

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 管理目录
<a name="catalogs"></a>

AWS Service Catalog 提供了通过管理员控制台管理产品组合、产品和限制的界面。

**注意**  
要执行本部分中的任一任务，您必须具有 AWS Service Catalog的管理员权限。有关更多信息，请参阅 [Identity and Access Management AWS Service Catalog](controlling_access.md)。

**Topics**
+ [管理产品组合](catalogs_portfolios.md)
+ [管理产品](catalogs_products.md)
+ [使用 AWS Service Catalog 约束](constraints.md)
+ [AWS Service Catalog 服务操作](using-service-actions.md)
+ [将 AWS Marketplace 产品添加到您的投资组合](catalogs_marketplace-products.md)
+ [使用 CloudFormation StackSets](using-stacksets.md)
+ [管理预算](catalogs_budgets.md)

# 管理产品组合
<a name="catalogs_portfolios"></a>

您可以在 AWS Service Catalog 管理员控制台的**产品组合**页面上创建、查看和更新产品组合。

**Topics**
+ [创建、查看和删除产品组合](#portfoliomgmt-menu)
+ [查看产品组合详细信息](#portfoliomgmt-portdetails)
+ [创建和删除产品组合](portfoliomgmt-create.md)
+ [添加产品](portfoliomgmt-products.md)
+ [添加约束](portfoliomgmt-constraints.md)
+ [向用户授予访问权限](catalogs_portfolios_users.md)
+ [共享产品组合](catalogs_portfolios_sharing_how-to-share.md)
+ [共享和导入产品组合](catalogs_portfolios_sharing.md)

## 创建、查看和删除产品组合
<a name="portfoliomgmt-menu"></a>

**产品组合**页面显示您在当前区域中创建的产品组合的列表。使用此页面可创建新的产品组合、查看产品组合的详细信息或从您的账户中删除产品组合。

**查看**产品组合**页面**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 根据需要选择不同的区域。

1. 如果您是新手 AWS Service Catalog，则会看到起 AWS Service Catalog 始页。选择 **Get started** 以创建产品组合。按照说明创建您的第一个产品组合，然后继续进入**产品组合**页面。

使用时 AWS Service Catalog，您可以随时返回 “**投资组合**” 页面；在导航栏中选择 S **ervice Catalog**，然后选择 Portf **ol** ios。

## 查看产品组合详细信息
<a name="portfoliomgmt-portdetails"></a>

在 AWS Service Catalog 管理员控制台中，**投资组合详细信息**页面列出了投资组合的设置。使用此页可以管理产品组合中的产品、授予用户对产品的访问权限以及应用 TagOptions 和限制。

**查看 **Portfolio details** 页面**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择要管理的产品组合。

# 创建和删除产品组合
<a name="portfoliomgmt-create"></a>

使用**产品组合**页面创建和删除产品组合。

**创建新的产品组合**

1. 从左侧导航菜单中，选择**产品组合**。

1. 选择**创建产品组合**。

1. 在**创建产品组合**页面输入所需信息。

1. 选择 “**创建**”。 AWS Service Catalog 创建投资组合并显示投资组合的详细信息。

**删除产品组合**
**注意**  
您只能删除*本地*产品组合。您可以删除*导入*的（共享）产品组合，但不能删除导入的产品组合。

在删除投资组合之前，必须先移除其所有产品、约束、群组、角色、用户、共享和 TagOptions。为此，请打开一个产品组合以显示**产品组合详细信息**。然后选择选项卡将其删除。
**注意**  
为避免错误，请在删除任何产品*之前*从产品组合中删除约束。

1. 从左侧导航菜单中，选择**产品组合**。

1. 选择要删除的产品组合。

1. 选择**删除**。您只能删除*本地*产品组合。如果您正在尝试删除*导入*的（共享）产品组合，则**操作**菜单不可用。

1. 在确认窗口中，选择**删除**。

# 添加产品
<a name="portfoliomgmt-products"></a>

 您可以通过将新产品直接上传到现有产品组合或将目录中的现有产品与产品组合关联来将产品添加到产品组合。

**注意**  
 创建 AWS Service Catalog 产品时，您可以上传 CloudFormation 模板或 Terraform 配置文件。该 CloudFormation 模板存储在亚马逊简单存储服务 (Amazon S3) 存储桶中，存储桶名称以 ***“cf-templates-”*** 开头。在预配置产品时，您还必须具有从其他存储桶中检索对象的权限。有关更多信息，请参阅[创建产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-cloudresource.html#productmgmt-cloudresource-troubleshooting)。

## 添加新产品
<a name="portfoliomgmt-products-new"></a>

您可以直接从**产品组合详细信息**页面添加新产品。通过此页面创建产品时，将其 AWS Service Catalog 添加到当前选定的产品组合中。

**添加新产品**

1.  导航到**产品组合**页面，然后选择要将产品添加到的产品组合的名称。

1. 在**产品组合详细信息**页面上，展开**产品**部分，然后选择**上传新产品**。

1. 对于 **Enter product details**，输入以下内容：
   + **产品名称** - 产品的名称。
   + **产品描述**（可选） - 产品描述。此描述显示在产品列表中，可帮助您选择正确的产品。
   + **描述** - 完整描述。此描述显示在产品列表中，可帮助您选择正确的产品。
   + **所有者或分销商** - 所有者的姓名或电子邮件地址。经销商的联系信息是可选的。
   + **供应商**（可选） – 应用程序发布者的名称。利用此字段，您可以对其产品列表进行排序，以便更轻松地找到产品。

1. 在 **Version details** 页面上，输入以下内容：
   + **选择模板** — 对于 CloudFormation 产品，请选择您自己的模板文件、本地驱动器中的 CloudFormation 模板或指向 Amazon S3 中存储的模板的 URL、现有 CloudFormation 堆栈 ARN 模板或存储在外部存储库中的模板文件。

     对于 Terraform 产品，请选择您自己的模板文件、本地驱动器中的 tar.gz 配置文件或指向 Amazon S3 中存储模板的 URL，或者存储在外部存储库中的 tar.gz 配置文件。
   + **版本名称**（可选） – 产品版本的名称（例如，“v1”、“v2beta”）。不允许使用空格。
   + **Description**（可选） – 产品版本的说明，包括此版本与早期版本的区别。

1. 对于 **Enter support details**，输入以下内容：
   + **Email contact** （可选） – 用于报告与产品有关的问题的电子邮件地址。
   + **支持链接**（可选） – 用户可从中找到支持信息或文件票证的站点的 URL。URL 必须以 `http://` 或 `https://` 开头。管理员负责维护支持信息的准确性和可访问性。
   + **支持描述**（可选） – 有关用户应如何使用**联系电子邮件**和**支持链接**的描述。

1. 选择**创建产品**。

## 添加现有产品
<a name="portfoliomgmt-products-existing"></a>

您可以从三个位置将现有产品添加到产品组合：**产品组合**列表、**产品组合详细信息**页面或**产品列表**页面。

**将现有产品添加到产品组合**

1. 导航至**产品组合**页面。

1. 选择产品组合。然后选择**操作** - **将产品添加到产品组合**。

1.  选择产品，然后选择**添加产品至产品组合**。

## 从产品组合中删除产品
<a name="portfoliomgmt-products-remove"></a>

当您不再希望使用某个产品时，可将该产品从产品组合中删除。产品在**产品**页面的目录中仍然可用，并且您仍可将其添加到其他产品组合。可以一次性从产品组合中删除多个产品。

**从产品组合中删除产品**

1. 导航到**产品组合**页面，然后选择包含该产品的产品组合。**产品组合详细信息**页面随即打开。

1. 展开**产品**部分。

1. 选择一个或多个产品，然后选择**删除**。

1. 确认您的选择。

# 添加约束
<a name="portfoliomgmt-constraints"></a>

您应该添加约束以控制用户与产品的互动方式。有关 AWS Service Catalog 支持的约束类型的更多信息，请参阅[使用 AWS Service Catalog 约束](constraints.md)。

 可在产品放置到产品组合后向其添加约束。

**将约束添加到产品**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择**产品组合**，然后选择一个产品组合。

1. 在产品组合详细信息页面上，展开**创建约束**部分，然后选择**添加约束**。

1. 对于**产品**，请选择要向其应用约束的产品。

1. 对于**约束类型**，选择以下选项之一：

   **启动** — 允许您为用于配置 AWS 资源的产品分配 IAM 角色。有关更多信息，请参阅 [AWS Service Catalog 启动限制](constraints-launch.md)。

   **通知** - 允许将产品通知流式传输到 Amazon SNS 主题。有关更多信息，请参阅 [AWS Service Catalog 通知限制](constraints-notification.md)。

   **模板** - 允许您限制最终用户在启动产品时可用的选项。模板包含 JSON 格式的文本文件，其中包含一个或多个规则。规则已添加到产品使用的 CloudFormation 模板中。有关更多信息，请参阅 [模板约束规则](reference-template_constraint_rules.md)。

    **堆栈集**-允许您使用配置跨账户和地区的产品部署 CloudFormation StackSets。有关更多信息，请参阅 [AWS Service Catalog 堆栈集约束](constraints-stackset.md)。

   **标签更新** - 允许您在预配置产品后更新标签。有关更多信息，请参阅 [AWS Service Catalog 标签更新约束](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/constraints-resourceupdate.html)。

1.  选择**继续**，然后输入所需信息。

**编辑约束**

1. 登录 AWS 管理控制台 并打开 AWS Service Catalog 管理员控制台，网址为[https://console.aws.amazon.com/catalog/](https://console.aws.amazon.com/catalog/)。

1. 选择**产品组合**，然后选择一个产品组合。

1. 在**产品组合详细信息**页面，展开**创建约束**部分，然后选择要编辑的约束。

1. 选择**编辑约束**。

1. 根据需要编辑约束，然后选择**保存**。

# 向用户授予访问权限
<a name="catalogs_portfolios_users"></a>

允许用户拥有通过组或角色对产品组合的访问权限。为多个用户提供对产品组合的访问权限的最佳方式是，将用户置于 IAM 用户组中并向该组授予访问权限。这样一来，您只需在组中添加或删除用户即可管理产品组合访问权限。有关更多信息，请参阅 *IAM 用户指南* 中的 [IAM 用户和组](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_WorkingWithGroupsAndUsers.html)。

除了访问产品组合外，用户还必须有权访问 AWS Service Catalog 最终用户控制台。您可以通过在 IAM 中应用权限来授予对该控制台的访问权限。有关更多信息，请参阅 [Identity and Access Management AWS Service Catalog](controlling_access.md)。

如果您想与其他账户共享产品组合及其主体，可以将主体名称（群组、角色或用户）与投资组合相关联。主体名称与产品组合共享，并在收件人账户中用以向最终用户授予访问权限。

**向用户或组授予产品组合访问权限**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1.  在导航窗格中，选择**管理**，然后选择**产品组合**。

1.  选择要向群组、角色或用户授予访问权限的产品组合。 AWS Service Catalog 定向到**投资组合详情**页面。

1.  在**产品组合详细信息**页面上，选择**访问权限**选项卡。

1.  在**产品组合访问权限**下，选择**授予访问权限**。

1.  对于**类型**，选择**主体名称**，然后选择**组/**、**角色/**或**用户/**类型。您最多可以添加 9 个主体名称。

1.  选择**授予访问权限**，关联主体与当前产品组合。

**删除对产品组合的访问权限**

1. 在**产品组合详细信息页面**上，选择组、角色和用户选项卡。

1. 然后选择**删除访问权限**。

# 共享产品组合
<a name="catalogs_portfolios_sharing_how-to-share"></a>

要使其他 AWS 账户的 AWS Service Catalog 管理员能够将您的产品分发给最终用户，请使用共享或与他们 account-to-account共享您的产品 AWS Service Catalog 组合 AWS Organizations。

 当您使用共享或 Organizations account-to-account 共享作品集时，您就是在共享该作品集的*引用*。导入的产品组合中产品和约束与您对*共享的产品组合*（共享的原始产品组合）进行的更改保持同步。

收件人不能更改产品或约束，但可以为最终用户添加 AWS Identity and Access Management 访问权限。

**注意**  
 您无法共享已共享的资源。这包括含有共享产品的产品组合。

## Account-to-account 共享
<a name="portfolio-sharing-account"></a>

要完成这些步骤，您必须获取目标账户的 AWS 账户 ID。您可以在目标账户的 “**我的账户**” 页面上找到该ID。 AWS 管理控制台 

**与 AWS 账户共享投资组合**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 在左侧导航菜单中，选择**产品组合**，然后选择要共享的产品组合。在**操作**菜单中，选择**共享**。

1. 在**输入账户 ID** 中，输入您要与之共享的 AWS 账户的账户 ID。（可选）选择 “[TagOption 共享](#tagoptions-share)”。然后选择**共享**。

1. 将 URL 发送给目标账户的 AWS Service Catalog 管理员。URL 将打开**导入产品组合**页面，并会自动提供共享产品组合的 ARN。

### 导入产品组合
<a name="catalogs_portfolios_sharing_importing"></a>

如果其他 AWS 账户的 AWS Service Catalog 管理员与您共享投资组合，请将该投资组合导入您的账户，以便您可以将其产品分发给最终用户。

如果投资组合是通过共享的，则无需导入该投资组合 AWS Organizations。

要导入产品组合，您必须从管理员处获取产品 ID。

要查看所有导入的投资组合，请打开 AWS Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。在**产品组合**页面上，选择**已导入**选项卡。查看**导入的产品组合**表。

## 与共享 AWS Organizations
<a name="portfolio-sharing-organizations"></a>

您可以使用共享 AWS Service Catalog 投资组合 AWS Organizations。

 首先，您必须决定是从管理账户还是从委托管理员账户进行共享。如果您不想从管理账户进行共享，请注册一个委托管理员账户并使用它进行共享。有关更多信息，请参阅《CloudFormation 用户指南》中的[注册委托管理员](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html)。

 接下来，您必须决定与谁共享。您可以与以下实体共享：
+ 组织账户。
+ 组织部门（OU）。
+ 组织本身。（这将与组织中的每个账户共享。）

### 从管理账户共享
<a name="sharing-from-master"></a>

当使用组织结构或输入组织节点的 ID 时，您可以与组织共享产品组合。

****使用组织结构与组织共享投资组合****

1. 打开 AWS Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 在**产品组合**页面上，选择要共享的产品组合。在**操作**菜单中，选择**共享**。

1. 选择 **AWS Organizations** 并筛选到您的组织结构。

   您可以选择根节点与整个组织、上级组织单位 (OU)、子组织单位或组织内的 AWS 帐户共享产品组合。

   共享给父级组织单位会将此产品组合共享给该父级组织单位中的所有账户和子组织单位。

   您可以选择 “**仅查看 AWS 帐户**” 以查看组织中所有 AWS 帐户的列表。

****要通过输入组织节点的 ID与组织共享投资组合****

1. 打开 AWS Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 在**产品组合**页面上，选择要共享的产品组合。在**操作**菜单中，选择**共享**。

1. 选择**组织节点**。

   选择与整个组织、组织内的 AWS 账户或 OU 共享。

   输入您选择的组织节点的 ID，您可以在 AWS Organizations 控制台中找到该节点，网址为[ https://console.aws.amazon.com/organizations/](https://console.aws.amazon.com/organizations/)。

### 从委托管理员账户共享
<a name="delegated-admin"></a>

 组织的管理账户可以将其他账户注册为组织的委托管理员，也可取消注册。

委派的管理员可以像管理账号一样共享其组织中的 AWS Service Catalog 资源。他们有权创建、删除和共享产品组合。

要注册或取消注册委托管理员，您必须从管理账户中使用 API 或 CLI。有关更多信息，请参阅《*AWS Organizations API 参考*》中的[RegisterDelegatedAdministrator](https://docs.aws.amazon.com/organizations/latest/APIReference/API_RegisterDelegatedAdministrator.html)和[DeregisterDelegatedAdministrator](https://docs.aws.amazon.com/organizations/latest/APIReference/API_DeregisterDelegatedAdministrator.html)。

**注意**  
管理员必须先致电 [https://docs.aws.amazon.com/servicecatalog/latest/dg/API_EnableAWSOrganizationsAccess.html](https://docs.aws.amazon.com/servicecatalog/latest/dg/API_EnableAWSOrganizationsAccess.html)，然后才能指定委托 。

从委托管理员账户共享产品组合的过程与从管理账户共享相同，如 [从管理账户共享](#sharing-from-master) 中上述所示。

 如果某个成员被取消注册为委托管理员，则会发生以下情况：
+ 从该账户创建的产品组合共享将被删除。
+ 他们不能再创建新的产品组合共享。

**注意**  
 如果取消注册委托管理员后，委托管理员创建的产品组合和共享未被删除，请重新注册并取消注册委托管理员。此操作将删除由该账户创建的产品组合和共享。

### 在组织内移动账户
<a name="move-account"></a>

如果您在组织内转移账户，则与该账户共享 AWS Service Catalog 的产品组合可能会发生变化。

账户只能访问与其目标组织或组织单位共享的产品组合。

## 共享作品集 TagOptions 时共享
<a name="tagoptions-share"></a>

作为管理员，您可以创建要包含的共享 TagOptions。 TagOptions 是键值对，使管理员能够：
+ 定义并强制执行标签分类法。
+ 定义标签选项并将其与产品和产品组合相关联。
+ 与其他账户共享与产品组合和产品关联的标签选项。

当您在主账户中添加或删除标签选项时，更改会自动显示在收件人账户中。在收款人账户中，当最终用户使用配置产品时 TagOptions，他们必须为标签选择值，这些标签将成为预配置产品上的标签。

在收款人账户中，管理员可以将其他本地账户关联 TagOptions 到其导入的投资组合，以强制执行特定于该账户的标记规则。

**注意**  
要共享投资组合，您需要消费者的 AWS 账户 ID。在控制台的 AWS “**我的账户**” 中找到账户 ID。

**注意**  
如果 a TagOption 只有一个值，则会在置备过程中 AWS 自动强制使用该值。

**共享作品集 TagOptions 时共享**

1. 从左侧导航菜单中，选择**产品组合**。

1. 在**本地产品组合**中，选择并打开产品组合。

1. 从上方的列表中选择**共享**，然后选择**共享**按钮。

1. 选择与其他 AWS 账户或组织共享。

1. 输入 12 位的账户 ID 号，选择**启用**，然后选择**共享**。

   您共享的账户显示在**与之共享的账户**部分中。它表示是否 TagOptions 已启用。

您也可以更新投资组合份额以包含在内 TagOptions。现在 TagOptions ，所有属于产品组合和产品的产品都将共享到该账户。

**更新投资组合份额以包括 TagOptions**

1. 从左侧导航菜单中，选择**产品组合**。

1. 在**本地投资组合**中，选择并打开投资组合。

1. 从上方的列表中选择**共享**。

1. 在**与之共享的账户**中，选择账户 ID，然后选择**操作**。

1. 选择**更新取消共享**或**取消共享**。

   选择 “**更新取消共享**” 时，选择 “**启用**” 以启动共享 TagOptions。您共享的账户显示在**与之共享的账户**部分中。

   选择**取消共享**时，请确认您不想再共享该账户。

## 共享产品组合时共享主体名称
<a name="principal-name-share"></a>

作为管理员，您可以创建包含主体名称的产品组合共享。主体名称是群组、角色和用户的名称，管理员可以在产品组合中指定这些名称，然后与产品组合共享。当您共享投资组合时，请 AWS Service Catalog 验证这些委托人名称是否已经存在。如果确实存在，则 AWS Service Catalog 自动将匹配的 IAM 委托人与共享产品组合关联以向用户授予访问权限。

**注意**  
当您将主体与产品组合相关联时，当该产品组合随后与其他账户共享时，可能会出现潜在的权限提升路径。对于收款人账户中*不是* AWS Service Catalog 管理员但仍有能力创建委托人（用户/角色）的用户，该用户可以创建与投资组合的委托人名称关联相匹配的 IAM 委托人。尽管该用户可能不知道通过哪些主体名称相关联 AWS Service Catalog，但他们可能能够猜出该用户。如果担心这种潜在的升级路径，则 AWS Service Catalog 建议使用 a `PrincipalType` s `IAM`。使用此配置，`PrincipalARN` 必须先存在于收件人账户中，然后才能将其关联。

当您在主账户中添加或删除委托人姓名时， AWS Service Catalog 会自动将这些更改应用到收款人账户中。然后，收件人账户中的用户可以根据其角色执行任务：
+ **最终用户**可以预配置、更新和终止产品组合的产品。
+ **管理员**可以将其他 IAM 主体关联到其导入的产品组合，以向特定于该账户的最终用户授予访问权限。

**注意**  
主人姓名共享仅适用于 AWS Organizations。

**要在共享产品组合时共享主体名称**

1. 从左侧导航菜单中，选择**产品组合**。

1. 在**本地产品组合**中，选择要共享的产品组合。

1. 在**操作**菜单中，选择**共享**。

1. 在 AWS Organizations中选择一个组织。

1. 选择整个**组织根目录**、**组织单位（OU）** 或**组织成员**。

1. 在**共享**设置中，启用**主体共享**选项。

您也可以更新产品组合共享，使其包含主体名称共享。这会与收件人账户共享属于该产品组合的所有主体名称。

**要更新投资组合共享以启用或禁用主体名称**

1. 从左侧导航菜单中，选择**产品组合**。

1. 在**本地产品组合**中，选择要更新的产品组合。

1. 选择**共享** 选项卡。

1. 选择要更新的共享，然后选择**共享**。

1. 选择 “**更新共享**”，然后选择 “**启用**” 以启动委托人共享。 AWS Service Catalog 然后在收款人账户中共享主体姓名。

如果您想停止与收件人账户共享主体名称，请**禁用**委托人共享。

### 在共享主体名称时使用通配符
<a name="wildcards-principal-names"></a>

AWS Service Catalog 支持使用通配符（例如 “\$1” 或 “？”）向 IAM 委托人（用户、群组或角色）名称授予投资组合访问权限。使用通配符模式可以同时覆盖多个 IAM 主体名称。ARN 路径和主体名称允许使用无限制通配符。

**可接受的**通配符 ARN 示例：
+ **arn:aws:iam:::role/ResourceName\$1\$1**
+ **arn:aws:iam:::role/\$1/ResourceName\$1?**

**不可接受的**通配符 ARN 示例：
+ **arn:aws:iam:::\$1/ResourceName**

在 IAM 主体 ARN 格式（**arn:partition:iam:::resource-type/resource-path/resource-name**）中，有效值包括**用户/**、**组/**或**角色/**。“?”和“\$1”只能在 resource-id 段中的 resource-type 后使用。您可以在 resource-id 中的任何位置使用特殊字符。

“\$1”字符还与“/”字符匹配，从而允许在 resource-id *中*形成路径。例如：

**arn:aws:iam:::role/**\$1**/ResourceName\$1?** 匹配 **arn:aws:iam:::role/pathA/pathB/ResourceName\$11** 和 **arn:aws:iam:::role/pathA/ResourceName\$11**。

# 共享和导入产品组合
<a name="catalogs_portfolios_sharing"></a>

要向不在您的 AWS 账户用户中的用户（例如属于其他组织或组织 AWS 账户 中其他组织的用户）提供您的 AWS Service Catalog 产品，您可以与他们共享您的产品组合。您可以通过多种方式进行共享，包括 account-to-account共享、组织共享和使用堆栈集部署目录。

 在将产品和产品组合与其他账户共享之前，您必须决定是要共享目录的引用，还是要将目录的副本部署到每个收件人账户。请注意，如果部署副本，则当有要传播到收件人账户的更新时，必须重新部署。

您可以使用堆栈集同时将目录部署到多个账户。如果您想共享参考文献（与原始作品集保持同步的导入版本），则可以使用 account-to-account共享或使用进行共享 AWS Organizations。

要使用堆栈集部署目录副本，请参阅[如何设置公司标准 AWS Service Catalog 产品的多区域、多账户目录](https://aws.amazon.com/blogs/mt/how-to-set-up-a-multi-region-multi-account-catalog-of-company-standard-aws-service-catalog-products/)。

当您使用共享或 account-to-account共享产品组合时 AWS Organizations，您允许其他 AWS 账户的 AWS Service Catalog 管理员将您的产品组合导入他们的账户，并将产品分发给该账户中的最终用户。

此*导入的产品组合* 不是独立副本。导入的产品组合中产品和约束与您对*共享的产品组合*（共享的原始产品组合）进行的更改保持同步。*收件人管理员*，即您与之共享产品组合的管理员，不能更改产品或限制，但可以为最终用户添加 AWS Identity and Access Management (IAM) 访问权限。有关更多信息，请参阅 [向用户授予访问权限](catalogs_portfolios_users.md)。

收件人管理员可以通过以下方式将产品分发给属于其 AWS 账户的最终用户：
+ 将用户、组或角色添加到导入的产品组合。
+ 通过将导入的投资组合中的产品添加到**本地产品组合**，即收款人管理员创建的属于其 AWS 账户的单独产品组合。然后，收件人管理员将用户、组和角色添加到本地产品组合。对共享的产品组合中的产品原本应用的任何约束也存在于本地产品组合中。本地产品组合收件人管理员可添加其他约束，但无法删除原本从共享产品组合中导入的约束。

当您在共享的产品组合中添加或删除产品或约束时，此更改会传播到该产品组合的所有导入实例。例如，如果从共享的产品组合中删除产品，则也会从导入的产品组合中删除该产品。还会从导入的产品所添加到的所有本地产品组合中删除该产品。如果最终用户在您删除产品之前已启动产品，则最终用户的预配置产品会继续运行，但该产品在将来无法启动。

如果将启动约束应用于共享的产品组合中的产品，则该启动约束会传播到该产品的所有导入实例。要覆盖此启动约束，收件人管理员需将产品添加到本地产品组合中，然后将不同的启动约束应用于该本地产品组合。生效的启动约束将设置产品的启动角色。

*启动角色*是一个 IAM 角色， AWS Service Catalog 用于在最终用户启动产品时预配置 AWS 资源（例如 Amazon EC2 实例或 Amazon RDS 数据库）。作为管理员，您可以选择指定特定启动角色 ARN 或本地角色名称。如果您使用角色 ARN，即使最终用户不属于拥有启动角色的 AWS 账户，也使用此启动角色。如果您使用本地角色名称，则将使用最终用户的账户中具有该名称的 IAM 角色。

有关启动约束和启动角色的更多信息，请参阅[AWS Service Catalog 启动限制](constraints-launch.md)。拥有启动角色的 AWS 账户会配置 AWS 资源，该账户将产生这些资源的使用费。有关更多信息，请参阅[AWS Service Catalog 定价](https://aws.amazon.com/servicecatalog/pricing/)。

该视频向您展示了如何在中跨账户共享投资组合 AWS Service Catalog。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/BVSohYOppjk/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/BVSohYOppjk)


**注意**  
您无法重新共享已导入或已共享的产品组合中的产品。

**注意**  
产品组合导入必须发生在管理账户和相关账户间的同一区域。

## 共享的产品组合和导入的产品组合之间的关系
<a name="shared-imported-portfolios-relationship"></a>

此表汇总了导入的产品组合和共享的产品组合之间的关系，以及导入产品组合的管理员对该产品组合和其中的产品能执行和不能执行的操作。


| 共享的产品组合的元素 | 与导入的产品组合的关系 | 收件人管理员能够 | 收件人管理员不能 | 
| --- | --- | --- | --- | 
| 产品和产品版本 |  已继承。 如果产品组合创建者在共享的产品组合中添加或删除产品，则此更改会传播到导入的产品组合。  |  将导入的产品添加到本地产品组合。产品与共享的产品组合保持同步。  |  将产品上传或添加到导入的产品组合中，或从导入的产品组合中删除产品。  | 
| 启动约束 |  已继承。 如果产品组合创建者在*共享的产品*中添加或删除启动约束，则更改会传播到该产品的所有导入实例。 如果收件人管理员将导入的产品添加到*本地*产品组合，则导入的启动约束不会存在于共享产品组合中。  | 在本地产品组合中，管理员可以应用影响产品本地启动的启动限制。 |  在导入的产品组合中添加或删除启动约束。  | 
| 模板约束 |  已继承。 如果产品组合创建者在共享的产品中添加或删除模板约束，则更改会传播到该产品的所有导入实例。 如果收件人管理员将导入的产品添加到本地产品组合，则导入的模板约束将不会应用于本地产品组合。  |  在本地产品组合中，管理员可以添加约束本地产品的模板约束。  |  删除导入的模板约束。  | 
| 用户、组和角色 | 未继承。 | 添加管理员 AWS 账户中的用户、组和角色。 | 不适用。 | 

# 管理产品
<a name="catalogs_products"></a>

您可以通过创建基于更新后的模板的新版本来创建、更新产品，并将产品成组添加到产品组合中以便将其分发给用户。

产品的新版本将传播到有权通过产品组合访问产品的所有用户。在您分发更新时，最终用户可以更新现有预配置产品。

**Topics**
+ [查看产品页面](#productmgmt-menu)
+ [创建产品](productmgmt-cloudresource.md)
+ [将产品添加到产品组合](catalogs_portfolios_adding-products.md)
+ [更新产品](productmgmt-update.md)
+ [将产品同步到 GitHub、 GitHub 企业版或 Bitbucket 中的模板文件](git-synced-sc-products.md)
+ [删除产品](productmgmt-delete.md)
+ [管理版本](managing-versions.md)

## 查看产品页面
<a name="productmgmt-menu"></a>

您可以在 AWS Service Catalog 管理员控制台的 “**产品” 列表**页面上管理产品。

**要查看**产品列表**页面**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择**产品列表**。

# 创建产品
<a name="productmgmt-cloudresource"></a>

 您可以从 AWS Service Catalog 管理员控制台的 “**产品**” 页面创建产品。

**注意**  
创建 Terraform 产品需要额外配置，包括 Terraform 预配置引擎和启动角色。有关更多信息，请查看 [开始使用 Terraform 产品](getstarted-Terraform.md)。

**创建新 AWS Service Catalog 产品**

1. 导航**产品列表**页面。

1. 选择**创建产品**，然后选择**创建产品**。

1. **产品详情**-允许您选择要创建的产品类型。 AWS Service Catalog 支持 CloudFormation、Terraform Cloud 和 External（支持 Terraform 社区版）产品类型。产品详细信息还包含您在列表或详细信息页面中搜索和查看产品时显示的元数据。输入以下信息：
   + **产品名称** - 产品的名称。
   +  **产品描述** - 描述显示在产品列表中，可帮助您选择正确的产品。
   + **所有者** - 发布此产品的个人或组织。所有者可以是您 IT 组织或管理员的名称。
   + **分销商**（可选） – 应用程序发布者的名称。利用此字段，您可以对其产品列表进行排序，以便更轻松地找到产品。

1. **版本详细信息**使您可以添加模板文件并构建产品。输入以下信息：
   +  **选择方法** - 有四种方法可以添加模板文件。
     + **使用本地模板文件**-从本地驱动器上传 CloudFormation 模板或 Terraform tar.gz 配置文件。
     + **使用 Amazon S3 URL** - 指定 URL，该 URL 指向 CloudFormation 模板或存储在 Amazon S3 中的 Terraform tar.gz 配置文件。如果指定的是 Amazon S3 URL，则它必须以 `https://` 开头。
     + **使用外部存储库**-指定您的 GitHub、 GitHub 企业版或 Bitbucket 代码存储库。 AWS Service Catalog 允许您将产品同步到模板文件。对于 Terraform 产品，模板文件格式必须是在 Tar 中存档并在 Gzip 中压缩的单个文件。
     + **使用现有 CloudFormation 堆栈**-输入现有 CloudFormation 堆栈的 ARN。此方法不支持 Terraform 云或外部产品。
   +  **版本名称**（可选） – 产品版本的名称（例如，“v1”、“v2beta”）。不允许使用空格。
   +  **描述**（可选） – 产品版本的描述，包括此版本与其他版本的区别。
   +  **指南** - 在**产品详细信息**页面的版本选项卡中进行管理。创建产品版本时（在创建产品工作流程中），该版本的指南设置为默认值。要了解有关指南的更多信息，请参阅[管理版本](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/managing-versions.html)。

1. **支持详细信息**可确定贵公司内部的组织，并提供支持联系人。输入以下信息：
   + **Email contact** （可选） – 用于报告与产品有关的问题的电子邮件地址。
   + **支持链接**（可选） – 用户可从中找到支持信息或文件票证的站点的 URL。URL 必须以 `http://` 或 `https://` 开头。管理员负责维护支持信息的准确性和可访问性。
   + **支持描述**（可选） – 有关用户应如何使用**联系电子邮件**和**支持**链接的描述。

1.  **管理标签**（可选） - 除了使用标签对资源进行分类外，您还可以使用标签来验证您创建此资源的权限。

1. **创建产品** - 填写完表格后，选择**创建产品**。几秒钟后，产品会显示在**产品列表**页面上。您可能需要刷新浏览器来查看产品。

您还可以使用 CodePipeline 创建和配置管道，将产品模板部署到源存储库 AWS Service Catalog 并交付您在源存储库中所做的更改。有关更多信息，请参阅[教程：创建部署到 AWS Service Catalog的管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-S3-servicecatalog.html)。

您可以在 CloudFormation 或 Terraform 模板中定义参数属性，并在配置期间强制执行这些规则。这些属性可以定义最小和最大长度、最小值和最大值、允许值以及该值的正则表达式。 AWS Service Catalog 如果提供的值不符合参数属性，则在置备期间发出警告。要了解有关参数属性的更多信息，请参阅*《CloudFormation 用户指南》*中的[参数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)。

## 问题排查
<a name="productmgmt-cloudresource-troubleshooting"></a>

 您必须拥有从 Amazon S3 存储桶中检索对象的权限。否则，启动或更新产品时，您可能会遇到以下错误。

```
Error: failed to process product version s3 access denied exception
```

 如果您遇到此消息，请确保您拥有从以下存储桶中检索对象的权限：
+  存储桶储存着预配置构件模板。
+  以 “***cf-templates-\$1***” 开头的存储桶，用于 AWS Service Catalog 存储配置项目模板。
+  以 “***sc-\$1***” 开头的内部存储桶，用于 AWS Service Catalog 存储元数据。您将无法在您的账户中看到此存储桶。

 以下示例策略展示了在前述存储桶检索对象所需的最低权限。

```
{
          "Sid": "VisualEditor1",
          "Effect": "Allow",
          "Action": "s3:GetObject*",
          "Resource": [
              "arn:aws:s3:::YOUR_TEMPLATE_BUCKET",
              "arn:aws:s3:::YOUR_TEMPLATE_BUCKET/*",
              "arn:aws:s3:::cf-templates-*",
              "arn:aws:s3:::cf-templates-*/*",
              "arn:aws:s3:::sc-*",
              "arn:aws:s3:::sc-*/*"
          ]
      }
```

# 将产品添加到产品组合
<a name="catalogs_portfolios_adding-products"></a>

 您可以将产品添加到任意数量的产品组合。在产品更新时，所有包含产品的产品组合（包括共享产品组合）会自动接收新版本。

**将产品从目录添加到产品组合**

1.  导航**产品列表**页面。

1.  选择产品，然后选择**操作**。从下拉菜单中，选择**将产品添加到产品组合**。您将被定向到 “***name-of-product*添加到投资组合**” 页面。

1.  选择产品组合，然后选择**添加产品至产品组合**。

当将 Terraform 产品添加到产品组合中时，该产品需要启动约束。您必须从账户中选择一个 IAM 角色，输入 IAM 角色 ARN 或输入角色名称。如果您指定角色名称，当账户使用启动约束时，将使用账户中具有该名称的 IAM 角色。这允许使用与账户无关的启动角色约束，确保您可以为每个共享账户创建更少的资源。有关详情和说明，请查看 [步骤 6：为 Terraform 产品添加启动约束](getstarted-launchconstraint-Terraform.md) 

 一个产品组合可以包含许多混合使用 Terraform 产品类型的 CloudFormation 产品。

# 更新产品
<a name="productmgmt-update"></a>

 当更新产品的模板时，您会创建产品的新版本。新产品版本将自动对有权访问包含此产品产品组合的所有用户可用。

**注意**  
更新现有产品时，您无法更改产品类型（CloudFormation 或 Teraform）。例如，如果您更新 CloudFormation 产品，则无法用 Terraform tar.gz 配置文件替换现有 CloudFormation 模板。必须使用新的 CloudFormation 模板文件更新现有 CloudFormation 模板文件。

 当前正在运行早期版本预配置产品的最终用户可将其预配置产品更新至新版本。当产品有新版本可用时，用户可以使用**预配置产品列表**或**预配置产品详细信息**页面上的**更新预配置产品**命令。

在创建产品的新版本之前， AWS Service Catalog 建议您在 Terraform 引擎中 CloudFormation 或在 Terraform 引擎中测试产品更新，以确保它们能正常运行。

**创建新产品版本**

1.  导航**产品**页面。

1.  选择要更新的产品。您将被定向至*产品详细信息*页面。

1.  在*产品详细信息*页面上，展开**版本**选项卡，然后选择**创建新版本**。

1.  在**版本详细信息**下，执行以下操作：
   + **选择模板** - 有四种方法可以添加模板文件。

     *使用本地模板文件*-从本地驱动器上传 CloudFormation 模板或 Terraform tar.gz 配置文件。

     *使用 Amazon S3 URL* - 指定 URL，该 URL 指向 CloudFormation 模板或存储在 Amazon S3 中的 Terraform tar.gz 配置文件。如果指定的是 Amazon S3 URL，则它必须以 https:// 开头。

     *使用外部存储库*-指定您的 GitHub、 GitHub 企业版或 Bitbucket 代码存储库。 AWS Service Catalog 允许您将产品同步到模板文件。对于 Terraform 产品，模板文件格式必须是在 Tar 中存档并在 Gzip 中压缩的单个文件。

     *使用现有 CloudFormation 堆栈*-输入现有 CloudFormation 堆栈的 ARN。此方法不支持 Terraform 云或外部产品。
   + **版本标题** – 产品版本的名称（例如，“v1”、“v2beta”）。不允许使用空格。
   + **描述**（可选） – 产品版本的描述，包括此版本与早期版本的区别。

1. 选择**创建产品版本**。

 您还可以使用 CodePipeline 创建和配置管道，将产品模板部署到源存储库中 AWS Service Catalog，并在源存储库中交付更改。有关更多信息，请参阅[教程：创建部署到 AWS Service Catalog的管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-S3-servicecatalog.html)。

# 将产品同步到 GitHub、 GitHub 企业版或 Bitbucket 中的模板文件
<a name="git-synced-sc-products"></a>

AWS Service Catalog 允许您将产品同步到通过外部存储库提供商管理的模板文件。 AWS Service Catalog 将具有此类模板连接的产品称为 *Git 同步产品*。存储库选项包括 GitHub “ GitHub 企业版” 或 “Bitbucket”。 AWS 账户 使用外部存储库帐户授权后，您可以创建新 AWS Service Catalog 产品或更新现有产品以同步到存储库中的模板文件。当对模板文件进行更改并提交到存储库中时（例如，使用 git-push）， AWS Service Catalog 会自动检测更改并创建新的产品版本（构件）。

**Topics**
+ [将产品同步至外部模板文件所需权限](#required-perms-synced-repo)
+ [创建账户连接](#create-synced-product)
+ [查看 Git 同步产品连接](#view-repo-sync)
+ [更新 Git 同步产品连接](#update-repo-sync)
+ [删除 Git 同步产品连接](#delete-repo-sync)
+ [将 Terraform 产品同步到来自 GitHub、Enterpr GitHub ise 或 Bitbucket 的模板文件](#git-synced-Terraform)
+ [AWS 区域 支持 Git 同步产品](git-sync-supported-regions.md)

## 将产品同步至外部模板文件所需权限
<a name="required-perms-synced-repo"></a>

您可以使用以下 AWS Identity and Access Management (IAM) 策略作为模板，使 AWS Service Catalog 管理员能够将产品同步到外部存储库中的模板文件。此策略包括 CodeConnections 和的必需权限 AWS Service Catalog。 AWS Service Catalog 建议您复制下面的模板策略，并在启用存储库同步产品时也使用 AWS Service Catalog `AWSServiceCatalogAdminFullAccess`[托管策略](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-iam-awsmanpol)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CodeStarAccess",
            "Effect": "Allow",
            "Action": [
            "codestar-connections:UseConnection",
            "codestar-connections:PassConnection",
            "codestar-connections:CreateConnection",
            "codestar-connections:DeleteConnection",
            "codestar-connections:GetConnection",
            "codestar-connections:ListConnections",
            "codestar-connections:ListInstallationTargets",
            "codestar-connections:GetInstallationUrl",
            "codestar-connections:StartOAuthHandshake",
            "codestar-connections:UpdateConnectionInstallation",
            "codestar-connections:GetIndividualAccessToken"
            ],
            "Resource": "arn:aws:codestar-connections:*:*:connection/*"
        },
        {
        "Sid": "CreateSLR",
        "Effect": "Allow",
        "Action": "iam:CreateServiceLinkedRole",
        "Resource": "arn:aws:iam::*:role/aws-service-role/sync.servicecatalog.amazonaws.com/AWSServiceRoleForServiceCatalogArtifactSync",
        "Condition": {
        "StringLike": {
        "iam:AWSServiceName": "sync.servicecatalog.amazonaws.com"
                }
            }
        }
    ]
}
```

------

## 创建账户连接
<a name="create-synced-product"></a>

在将模板文件同步到 AWS Service Catalog 产品之前，必须创建并授权一次性 account-to-account连接。您可以使用此连接来指定包含所需模板文件的存储库的详细信息。您可以使用 AWS Service Catalog 控制台、控制 CodeConnections 台、 AWS Command Line Interface (CLI) 或创建连接 CodeConnections APIs。

建立连接后，您可以使用 AWS Service Catalog 控制台、 AWS Service Catalog API 或 CLI 来创建同步 AWS Service Catalog 产品。 AWS Service Catalog 管理员可以根据存储库和分支中的模板文件创建新 AWS Service Catalog 产品或更新现有产品。如果在存储库中提交了更改，则 AWS Service Catalog 会自动检测更改并创建新的产品版本。先前产品版本仍然不可超过规定的版本限制，并被指定为**已弃用**状态。

此外，在创建连接后 AWS Service Catalog 自动创建服务相关角色 (SLR)。此 SLR 允许 AWS Service Catalog 检测提交到存储库的任何模板文件更改。单反相机还 AWS Service Catalog 允许自动为同步产品创建新的产品版本。有关 SLR 权限和功能的更多信息，请参阅 [AWS Service Catalog的服务相关角色](#required-perms-synced-repo)。

**要创建新的 Git 同步产品**

1. 在左侧导航面板中，选择**产品列表**，然后选择**创建产品**。

1. 输入**产品详细信息**。

1. 在 “版本详细信息” 中，选择 “**使用 AWS CodeStar 提供程序指定您的代码存储库**”，然后选择 “**创建新 AWS CodeStar 连接**” 链接。

1. 创建连接后，刷新连接列表，然后选择新连接。指定存储库详细信息，包括**存储库**、**分支**和**模板文件路径**。

   有关使用 Terraform 配置文件的更多信息，请参阅 [将 Terraform 产品同步到来自 GitHub、Enterpr GitHub ise 或 Bitbucket 的模板文件](#git-synced-Terraform)。

   1. （创建新 AWS Service Catalog 产品资源时可选）在 Suppor **t Det** ails 部分，添加产品的元数据。

   1. （创建新 AWS Service Catalog 产品资源时可选）在 “**标签” 部分，选择 “**添加新标签****”，然后输入 “**密钥**” 和 “**值**” 对。

1. 选择**创建新产品**。

**要创建多个 Git 同步产品**

1. 在 AWS Service Catalog 控制台左侧导航面板中，选择**产品列表**，然后选择**创建多个 git 托管产品**。

1. 输入**通用产品详细信息**。

1. 在外部存储库详细信息中，选择一个 **AWS CodeStar 连接**，然后指定**存储库**和**分支**。

1. 在“添加产品”窗格中，输入**模板文件路径**和**产品名称**。选择**添加新项目**，然后根据需要继续添加产品。

1. 添加所有所需产品后，选择**批量创建产品**。

**将现有 AWS Service Catalog 产品连接到外部存储库**

1. 在 AWS Service Catalog 控制台左侧导航面板中，选择 “**产品列表**”，然后选择 “**将产品连接到外部存储库**”。

1. 在选择产品页面上，选择要连接到外部存储库的产品，然后选择**下一步**。

1. 在 “指定源详细信息” 页面上，选择现有 AWS CodeStar 连接，然后指定**存储库**、**分支**和**模板文件路径**。

1. 选择**下一步**。

1. 在查看并提交页面上，验证连接详细信息，然后选择**将产品连接到外部存储库**。

## 查看 Git 同步产品连接
<a name="view-repo-sync"></a>

您可以使用 AWS Service Catalog 控制台、API 或 AWS CLI 来查看存储库连接的详细信息。对于链接到模板文件的 AWS Service Catalog 产品，您可以从 “上次**同步状态” 中检索有关存储库连接以及模板上次与产品同步**的时间的信息。

**注意**  
您可以在产品级别查看存储库信息和**上次同步状态**。用户必须在中拥有 IAM 权限 CodeConnections APIs 才能查看存储库的详细信息。有关这些 IAM [权限所需策略的更多信息，请参阅将 AWS Service Catalog 产品同步到模板文件](#required-perms-synced-repo)所需的权限。

**要查看连接和存储库的详细信息，请使用 AWS 管理控制台**

1. 从左侧导航面板中，选择**产品列表**。

1. 从列表中选择产品。

1. 在**产品**页面上，导航至**产品源详细信息**部分。

1. 要查看产品版本的源代码修订 ID，请选择**上次创建的版本**链接。**版本详细信息**部分显示源代码修订 ID。

**要查看连接和存储库的详细信息，请使用 AWS CLI**

从中 AWS CLI，运行以下命令：

`$ aws servicecatalog describe-product-as-admin`

`$ aws servicecatalog describe-provisioning-artifact`

`$ aws servicecatalog search-product-as-admin`

`$ aws servicecatalog list-provisioning-artifacts`

## 更新 Git 同步产品连接
<a name="update-repo-sync"></a>

您可以使用 AWS Service Catalog 控制台、 AWS Service Catalog API 或更新现有账户连接和 Git 同步产品。 AWS CLI

要了解如何将现有 AWS Service Catalog 产品连接到模板文件，请参阅[创建新的 Git 同步产品](#create-synced-product)连接。

**要将现有产品更新为 Git 同步产品**

1. 在左侧的导航面板中，选择**产品列表**，然后选择以下选项之一：
   + 要更新**单个产品**，请选择该产品，导航至**产品源详细信息**部分，然后选择**编辑详细信息**。
   + 要更新**多个产品**，请选择**将产品连接到外部存储库**，选择最多十个产品，然后选择**下一步**。

1. 在**产品源详细信息**部分，执行以下更新：
   + 指定连接。
   + 指定存储库。
   + 指定分支。
   + 命名模板文件。

1. 选择**保存更改**。

**注意**  
对于尚未连接到外部存储库的产品，您可以在选择产品后使用产品信息页面顶部的提醒中显示的**连接到外部存储库**选项。

你也可以使用 AWS Service Catalog 控制台 AWS CLI 或 
+ 将现有 AWS Service Catalog 产品连接到外部存储库中的模板文件
+ 更新产品元数据，包括产品名称、描述和标签。
+ 重新配置（更新同步以使用其他存储库来源）先前连接 AWS Service Catalog 产品的连接。

**使用 AWS Service Catalog 控制台更新连接和存储库详细信息**

1. 在 AWS Service Catalog 控制台左侧导航面板**中，选择产品列表**，然后选择当前连接到外部存储库的产品。

1. 在**产品源详细信息**部分，选择**编辑产品源**。

1. 在**产品源详细信息**部分，指定新的所需存储库。

1. 选择**保存更改**。

**要更新连接和存储库的详细信息，请使用 AWS CLI**

从中 AWS CLI 运行`$ aws servicecatalog update-product`和`$ aws servicecatalog update-provisioning-artifact`命令。

## 删除 Git 同步产品连接
<a name="delete-repo-sync"></a>

您可以使用 AWS Service Catalog 控制台、 CodeConnections API 或删除 AWS Service Catalog 产品与模板文件之间的连接 AWS CLI。当您断开产品与模板文件的连接时，已同步 AWS Service Catalog 的产品会切换到常规管理的产品。断开产品连接后，如果模板文件更改并提交到先前连接的存储库中，则这些更改*不会*反映出来。要将 AWS Service Catalog 产品重新连接到外部存储库中的模板文件，请参阅[更新连接和同步 AWS Service Catalog]()产品。

**使用控制台断开 Git 同步产品的连接 AWS Service Catalog**

1. 在中 AWS 管理控制台，从左侧导航面板中选择 “**产品列表**”。

1. 从列表中选择产品。

1. 在**产品**页面上，导航至**产品源详细信息**部分。

1. 选择**断开连接**。

1. 确认操作，然后选择**断开连接**。

**要断开与 Git 同步产品的连接，请使用以下命令 AWS CLI**

从中 AWS CLI，运行`$ aws servicecatalog update-product`命令。在 `ConnectionParameters` 输入中，移除指定的连接。

**要使用 CodeConnections API 删除连接，或者 AWS CLI**

在 CodeConnections API 或中 AWS CLI，运行`$ aws codestar-connections delete-connection`命令。

## 将 Terraform 产品同步到来自 GitHub、Enterpr GitHub ise 或 Bitbucket 的模板文件
<a name="git-synced-Terraform"></a>

使用 Terraform 配置文件创建 Git 同步产品时，文件路径仅接受 tar.gz 格式。在文件路径中不能接受 Terraform 文件夹格式。

# AWS 区域 支持 Git 同步产品
<a name="git-sync-supported-regions"></a>

AWS Service Catalog 支持中 AWS 区域 与 Git 同步的产品，如下表所示。


****  

| AWS 区域 名字 | AWS 区域 身份 | 支持与 Git 同步的产品 | 
| --- | --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 是 | 
| 美国东部（俄亥俄州） | us-east-2 | 是 | 
| 美国西部（北加利福尼亚） | us-west-1 | 是 | 
| 美国西部（俄勒冈州） | us-west-2 | 是 | 
| 非洲（开普敦） | af-south-1 | 否 | 
| 亚太地区（香港） | ap-east-1 | 否 | 
| 亚太地区（雅加达） | ap-southeast-3 | 否 | 
| 亚太地区（孟买） | ap-south-1 | 是 | 
| 亚太地区（大阪） | ap-northeast-3 | 否 | 
| 亚太地区（首尔） | ap-northeast-2 | 是 | 
| 亚太地区（新加坡） | ap-southeast-1 | 是 | 
| 亚太地区（悉尼） | ap-southeast-2 | 是 | 
| 亚太地区（东京） | ap-northeast-1 | 是 | 
| 加拿大（中部） | ca-central-1 | 是 | 
| 欧洲地区（法兰克福） | eu-central-1 | 是 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 是 | 
| 欧洲地区（伦敦） | eu-west-2 | 是 | 
| 欧洲地区（米兰） | eu-south-1 | 否 | 
| 欧洲地区（巴黎） | eu-west-3 | 是 | 
| 欧洲地区（斯德哥尔摩） | eu-north-1 | 是 | 
| 中东（巴林） | me-south-1 | 否 | 
| 南美洲（圣保罗） | sa-east-1 | 是 | 
| AWS GovCloud （美国东部） | us-gov-east-1 | 否 | 
| AWS GovCloud （美国西部） | us-gov-west-1 | 否 | 

# 删除产品
<a name="productmgmt-delete"></a>

删除产品时， AWS Service Catalog 会从包含该产品的每个产品组合中删除所有产品版本。

AWS Service Catalog 允许您使用 AWS Service Catalog 控制台删除产品或 AWS CLI。要成功删除产品，您必须先取消关联该产品的所有资源。产品资源关联的示例包括产品组合关联 TagOptions、预算和服务操作。

**重要**  
 删除产品后，您无法将其恢复。

**使用 AWS Service Catalog 控制台删除产品**

1.  导航至**产品组合**页面，然后选择包含要删除的产品的产品组合。

1.  选择要删除的产品，然后选择产品窗格右上角的**删除**。

1. 对于*没有关联资源的*产品，请在文本框中输入删除，确认要**删除**的产品，然后选择**删除**。

   对于*关联资源的*产品，请继续执行步骤 4。

1. 在 “**删除产品**” 窗口中，查看 “**关联**” 表格，该表显示了该产品的所有关联资源。 AWS Service Catalog 当您删除产品时，会尝试解除这些资源的关联。

1. 在文本框中输入**删除**，确认您要删除该产品并删除其所有关联资源。

1. 选择**取消关联并删除**。

 AWS Service Catalog 如果无法解除所有产品资源的关联，则不会删除该产品。**删除产品**窗口会显示取消关联的失败次数以及每个失败的描述。有关在删除产品时解决资源取消关联失败问题的更多信息，请参阅下方的*删除产品时解决资源取消关联失败的问题*。

**Topics**
+ [使用删除商品 AWS CLI](product-delete-cli.md)
+ [解决删除产品时资源取消关联失败的问题](product-delete-exception.md)

# 使用删除商品 AWS CLI
<a name="product-delete-cli"></a>

AWS Service Catalog 允许您使用 [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)(AWS CLI) 从您的产品组合中删除产品。 AWS CLI 是一款开源工具，可让您使用命令行外壳中的命令与 AWS 服务进行交互。 AWS Service Catalog 强制删除功能需要[AWS CLI 别名](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html)，这是您可以在中创建的快捷方式， AWS CLI 以缩短经常使用的命令或脚本。

## 先决条件
<a name="product-delete-cli-requirements"></a>
+ 安装和配置 AWS CLI。有关更多信息，请参阅[安装或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 和[配置基础知识](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) 。请使用最低 AWS CLI 版本 1.11.24 或 2.0.0。
+ 删除产品 CLI 别名需要与 bash 兼容的终端和 JQ 命令行 JSON 处理器。有关安装命令行 JSON 处理器的更多信息，请参阅[下载 jq](https://stedolan.github.io/jq/download/)。
+ 创建 AWS CLI 别名以批处理 `Disassociation` API 调用，使您能够在单个命令中删除产品。

要成功删除产品，您必须先取消关联该产品的所有资源。产品资源关联的示例包括产品组合关联、预算、标签选项和服务操作。使用 CLI 删除产品时，CLI `force-delete-product` 别名允许您调用 `Disassociate` API 来取消关联任何会阻止 `DeleteProduct` API 的资源。这样可以避免为单独解除关联进行独立调用。

**注意**  
以下步骤中显示的文件路径可能会有所不同，具体取决于您用来执行这些操作的操作系统。

## 创建 AWS CLI 别名以删除 AWS Service Catalog 产品
<a name="product-delete-cli-alias"></a>

使用删除 AWS Service Catalog 产品时，CLI `force-delete-product` 别名允许您调用 `Disassociate` API 来取消关联任何会阻止该`DeleteProduct`调用的资源。 AWS CLI 

**在您的 AWS CLI 配置文件夹中创建`alias`文件**

1. 在 AWS CLI 控制台中，导航到配置文件夹。默认情况下，配置文件夹路径为 `~/.aws/`（Linux 或 macOS）或 `%USERPROFILE%\.aws\`（Windows）。

1. 使用文件导航或在首选终端中输入以下命令来创建名为 `cli` 的子文件夹：

   ```
                $ mkdir -p ~/.aws/cli
   ```

   生成的 `cli` 文件夹默认路径为 `~/.aws/cli/`（Linux 或 macOS）或 `%USERPROFILE%\.aws\cli`（Windows）。

1. 在新建的 `cli` 文件夹中，创建不带扩展名的名为 `alias` 的文本文件。您可以使用文件导航或在首选终端中输入以下命令来创建 `alias` 文件：

   ```
                 $ touch ~/.aws/cli/alias
   ```

1. 在第一行输入 `[toplevel]`。

1. 保存该文件。

接下来，您可以通过手动将 force-delete-product别名脚本粘贴到`alias`文件中，或者在终端窗口中使用命令来将别名添加到文件中。

**手动将 force-delete-product别名添加到您的`alias`文件中**

1. 在 AWS CLI 控制台中，导航到您的 AWS CLI 配置文件夹并打开该`alias`文件。

1. 在文件的 `[toplevel]` 行下方输入以下代码别名：

   ```
                [command servicecatalog]
             	 force-delete-product =
             	   !f() {
             	     if [ "$#" -ne 1 ]; then
             	         echo "Illegal number of parameters"
             	         exit 1
             	     fi
             	 
             	     if [[ "$1" != prod-* ]]; then
             	        echo "Please provide a valid product id."
             	        exit 1
             	     fi
             	 
             	     productId=$1
             	     describeProductAsAdminResponse=$(aws servicecatalog describe-product-as-admin --id $productId)
             	     listPortfoliosForProductResponse=$(aws servicecatalog list-portfolios-for-product --product-id $productId)
             	 
             	     tagOptions=$(echo "$describeProductAsAdminResponse" | jq -r '.TagOptions[].Id')
             	     budgetName=$(echo "$describeProductAsAdminResponse" | jq -r '.Budgets[].BudgetName')
             	     portfolios=$(echo "$listPortfoliosForProductResponse" | jq -r '.PortfolioDetails[].Id')
             	     provisioningArtifacts=$(echo "$describeProductAsAdminResponse" | jq -r '.ProvisioningArtifactSummaries[].Id')
             	     provisioningArtifactServiceActionAssociations=()
             	 
             	     for provisioningArtifactId in $provisioningArtifacts; do
             	       listServiceActionsForProvisioningArtifactResponse=$(aws servicecatalog list-service-actions-for-provisioning-artifact --product-id $productId --provisioning-artifact-id $provisioningArtifactId)
             	       serviceActions=$(echo "$listServiceActionsForProvisioningArtifactResponse" | jq -r '[.ServiceActionSummaries[].Id] | join(",")')
             	       if [[ -n "$serviceActions" ]]; then
             	         provisioningArtifactServiceActionAssociations+=("${provisioningArtifactId}:${serviceActions}")
             	       fi
             	     done
             	 
             	     echo "Before deleting a product, the following associated resources must be disassociated. These resources will not be deleted. This action may take some time, depending on the number of resources being disassociated."
             	 
             	     echo "Portfolios:"
             	     for portfolioId in $portfolios; do
             	       echo "\t${portfolioId}"
             	     done
             	 
             	     echo "Budgets:"
             	     if [[ -n "$budgetName" ]]; then
             	       echo "\t${budgetName}"
             	     fi
             	 
             	     echo "Tag Options:"
             	     for tagOptionId in $tagOptions; do
             	       echo "\t${tagOptionId}"
             	     done
             	 
             	     echo "Service Actions on Provisioning Artifact:"
             	     for association in "${provisioningArtifactServiceActionAssociations[@]}"; do
             	       echo "\t${association}"
             	     done
             	 
             	     read -p "Are you sure you want to delete ${productId}? y,n "
             	     if [[ ! $REPLY =~ ^[Yy]$ ]]; then
             	        exit
             	     fi
             	 
             	     for portfolioId in $portfolios; do
             	       echo "Disassociating ${portfolioId}"
             	       aws servicecatalog disassociate-product-from-portfolio --product-id $productId --portfolio-id $portfolioId
             	     done
             	 
             	     if [[ -n "$budgetName" ]]; then
             	       echo "Disassociating ${budgetName}"
             	       aws servicecatalog disassociate-budget-from-resource --budget-name "$budgetName" --resource-id $productId
             	     fi
             	 
             	     for tagOptionId in $tagOptions; do
             	       echo "Disassociating ${tagOptionId}"
             	       aws servicecatalog disassociate-tag-option-from-resource --tag-option-id $tagOptionId --resource-id $productId
             	     done
             	 
             	     for association in "${provisioningArtifactServiceActionAssociations[@]}"; do
             	       associationPair=(${association//:/ })
             	       provisioningArtifactId=${associationPair[0]}
             	       serviceActionsList=${associationPair[1]}
             	       serviceActionIds=${serviceActionsList//,/ }
             	       for serviceActionId in $serviceActionIds; do
             	         echo "Disassociating ${serviceActionId} from ${provisioningArtifactId}"
             	         aws servicecatalog disassociate-service-action-from-provisioning-artifact --product-id $productId --provisioning-artifact-id $provisioningArtifactId --service-action-id $serviceActionId
             	       done
             	     done
             	 
             	     echo "Deleting product ${productId}"
             	     aws servicecatalog delete-product --id $productId
             	 
             	   }; f
   ```

1. 保存该文件。

**使用终端窗口将 force-delete-product别名添加到您的`alias`文件中**

1. 打开终端窗口，并运行以下命令

   `$ cat >> ~/.aws/cli/alias`

1. 将别名脚本粘贴到终端窗口，然后按 *CTRL\$1D* 退出 `cat` 命令。

**给 force-delete-product别名打电话**

1. 在设备上的终端窗口中运行以下命令以调用删除产品别名

   `$ aws servicecatalog force-delete-product {product-id} `

   下面的示例展示了 `force-delete-product` 别名命令及其生成的响应 

   ```
                 $ aws servicecatalog force-delete-product prod-123
   ```

   ```
                 Before deleting a product, the following associated resources must be disassociated. These resources will not be deleted. This action may take some time, depending on the number of resources being disassociated.
                 Portfolios:
                   port-123
                 Budgets:
                     budgetName
                 Tag Options:
                     tag-123
                 Service Actions on Provisioning Artifact:
                     pa-123:act-123
                 Are you sure you want to delete prod-123? y,n
   ```

1. 输入 `y` 以确认您要删除产品。

成功删除产品后，终端窗口将显示如下结果

```
          Disassociating port-123
          Disassociating budgetName
          Disassociating tag-123
          Disassociating act-123 from pa-123
          Deleting product prod-123
```

## 其他资源
<a name="product-delete-cli-resources"></a>

有关 AWS CLI使用别名和删除 AWS Service Catalog 产品的更多信息，请查看以下资源：
+ 在 *AWS Command Line Interface (CLI)* 用户指南中@@ [创建和使用 AWS CLI 别名](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-alias.html)。
+ [AWS CLI 别名存储库](https://github.com/awslabs/awscli-aliases) git 存储库。
+ [删除 AWS Service Catalog 产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html)。
+ [AWS re: Invent 2016：《有效用户》开启 AWS CLI 。*YouTube*](https://youtu.be/Xc1dHtWa9-Q?t=1593)

# 解决删除产品时资源取消关联失败的问题
<a name="product-delete-exception"></a>

如果由于资源解除关联异常而导致您之前尝试[删除产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html)失败，请查看下面的异常列表及其解决方案。

**注意**  
如果您在收到资源解除关联失败消息之前关闭了**删除产品**窗口，则可以按照后续*删除产品*部分中的步骤一至三再次打开该窗口。

**要解决资源解除关联失败的问题**

在**删除产品**窗口中，查看关联表的**状态**列。确定失败的资源解除关联异常和建议解决方案：


****  

| 状态异常类型 | 原因 | 解决方案 | 
| --- | --- | --- | 
| Product prod-\$1\$1\$1\$1 | AWS Service Catalog 无法删除产品，因为产品仍有关联的预算 TagOptions，至少有一个ProvisioningArtifact与之关联的操作，产品仍分配给产品组合，产品有用户，或者产品有约束条件。 | 再次尝试删除产品。 | 
| 用户：username 未获得授权执行： | 尝试删除产品的用户没有取消关联产品资源的必要权限。 | AWS Service Catalog 建议联系您的账户管理员，了解有关取消关联您当前无权取消关联的产品资源的更多信息。 | 

# 管理版本
<a name="managing-versions"></a>

 您可以在创建产品时分配产品版本，并且您可以随时更新产品版本。

 版本包含 CloudFormation 模板、标题、描述、状态和指南。

## 版本状态
<a name="version-status"></a>

 一个版本可以有三种状态之一：
+  **活动** - 活动版本出现在版本列表中，并允许用户启动该版本。
+  **非活动** - 非活动版本从版本列表中隐藏。从此版本启动的现有预配置产品不会受到影响。
+  **已删除** - 被删除的某个版本将从版本列表中删除。删除版本的操作无法撤消。

## 版本指南
<a name="version-guidance"></a>

 您可以设置版本指南，以便向最终用户提供有关产品版本的信息。版本指南仅影响活动的产品版本。

 版本指南有两个选项：
+  **无** - 默认情况下，产品版本没有任何指导。最终用户可以使用该版本更新和启动预配置产品。
+  **已淘汰**-用户无法使用已淘汰的产品版本启动新的预配置产品。如果之前启动的预配置产品使用的是现已淘汰的版本，则用户只能使用现有版本或新版本更新该预配置产品。

## 更新版本
<a name="updating-versions"></a>

 您可以在创建产品时分配产品版本，也可以随时更新版本。有关创建产品的更多信息，请参阅[创建产品](productmgmt-cloudresource.md)。

**更新产品版本**

1.  在 AWS Service Catalog 控制台中，选择 “**产品**”。

1.  从产品列表中，选择要更新其版本的产品。

1.  在**产品详细信息**页面上，选择**版本**选项卡，然后选择要更新的版本。

1.  在**版本详细信息**页面上，编辑产品版本，然后选择**保存更改**。

# 使用 AWS Service Catalog 约束
<a name="constraints"></a>

您可以应用约束，以控制当最终用户启动特定组合中的产品时所应用的规则。当最终用户启动产品时，他们将看到您已使用约束应用的规则。您可以在产品放入产品组合后将约束应用于产品。约束一经创建便立即生效，并且它们已应用于尚未启动的产品的所有当前版本。

**Topics**
+ [启动约束](constraints-launch.md)
+ [通知约束](constraints-notification.md)
+ [标签更新约束](constraints-resourceupdate.md)
+ [堆栈集约束](constraints-stackset.md)
+ [模板约束](catalogs_constraints_template-constraints.md)

# AWS Service Catalog 启动限制
<a name="constraints-launch"></a>

启动约束指定最终用户启动、更新或终止产品时所扮演的 AWS Identity and Access Management (IAM) 角色。 AWS Service Catalog IAM 角色是用户或 AWS 服务可以临时承担的使用 AWS 服务的权限集合。有关介绍性示例，请参阅：
+ CloudFormation 产品类型:[步骤 6：添加启动约束以分配 IAM 角色](getstarted-launchconstraint.md)
+ Terraform 开源或 Terraform 云产品类型：[步骤 5：创建启动角色](getstarted-launchrole-Terraform.md)

启动约束适用于产品组合中的产品（产品-产品组合关联）。启动约束不适用于产品组合层面，也不适用于跨所有产品组合的某个产品。要将启动约束与产品组合中的所有产品相关联，您必须将启动约束分别应用于每个产品。

如果没有启动约束，最终用户必须使用自己的 IAM 凭证启动和管理产品。为此，他们必须拥有产品使用的 AWS 服务的权限，以及 AWS Service Catalog。 CloudFormation通过使用启动角色，您可改为将最终用户的权限限定为他们对该产品所需的最小权限。有关最终用户权限的更多信息，请参阅[Identity and Access Management AWS Service Catalog](controlling_access.md)。

要创建和分配 IAM 角色，您必须拥有以下 IAM 管理权限：
+ `iam:CreateRole`
+ `iam:PutRolePolicy`
+ `iam:PassRole`
+ `iam:Get*`
+ `iam:List*`

## 配置启动角色
<a name="constraints-launch-role"></a>

您向产品分配的作为启动约束的 IAM 角色必须拥有使用以下项的权限：

**对于 Cloudformation 产品**
+ `arn:aws:iam::aws:policy/AWSCloudFormationFullAccess` CloudFormation 托管策略
+ 产品 AWS CloudFormation 模板中的服务
+ 在服务拥有的 Amazon S3 存储桶中读取 AWS CloudFormation 模板的访问权限。

**对于 Terraform 产品**
+ 产品的 Amazon S3 模板中使用的服务
+ 自服务拥有的 Amazon S3 存储桶中读取 Amazon S3 模板的访问权限。
+ `resource-groups:Tag` 用于在 Amazon EC2 实例中进行标记（Terraform 预配置引擎在执行配置操作时担任）
+ `resource-groups:CreateGroup`用于资源组标记（假设 AWS Service Catalog 用于创建资源组和分配标签） 

IAM 角色的信任策略必须 AWS Service Catalog 允许代入该角色。在以下步骤中，当您选择角色类型时 AWS Service Catalog ，将自动设置信任策略。如果您不使用控制台，请参阅[如何在 IAM 角色中使用*信任策略中的为代入角色的 AWS 服务创建*信任策略](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)部分。

**注意**  
无法在启动角色中分配 `servicecatalog:ProvisionProduct`、`servicecatalog:TerminateProvisionedProduct` 和 `servicecatalog:UpdateProvisionedProduct` 权限。您必须使用 IAM 角色，如[授予 AWS Service Catalog 最终用户权限](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-iamenduser.html)部分中的内联策略步骤所示。

**注意**  
要在 AWS Service Catalog 控制台中查看预配置的 Cloudformation 产品和资源，最终用户需要 CloudFormation 读取权限。在控制台中查看预配置产品和资源**不会**使用启动角色。

**创建启动角色**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   Terraform 产品需要额外的启动角色配置。有关更多信息，请查看 *Terraform 开源产品入门*中的[步骤 5：创建启动角色](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchrole-Terraform)。

1. 选择 **角色**。

1. 选择**创建新角色**。

1. 输入角色名称并选择 **Next Step**。

1. 在 **AWS Service Catalog** 旁边的**AWS 服务角色**下，选择**选择**。

1. 在 **Attach Policy** 页面上，选择 **Next Step**。

1. 要创建角色，请选择 **Create Role**。

**将策略附加到新角色**

1. 选择您创建的角色以查看角色详细信息页面。

1. 选择 **Permissions** 选项卡，展开 **Inline Policies** 部分。然后选择 **click here**。

1. 选择 **Custom Policy**，然后选择 **Select**。

1. 输入策略的名称，然后将以下内容粘贴到 **Policy Document** 编辑器中：

   ```
     
             "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":"*",
            "Condition":{
               "StringEquals":{
                  "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
               }
            }
      ]
   }
   ```
**注意**  
为启动约束配置启动角色时，您必须使用以下字符串：`"s3:ExistingObjectTag/servicecatalog:provisioning":"true"`。

1. 为产品使用的每个额外服务的策略添加一行。例如，要为 Amazon Relational Database Service（Amazon RDS）添加权限，请在 `Action` 列表中的最后一行的末尾键入逗号，然后添加以下行：

   ```
   "rds:*"
   ```

1. 选择**应用策略**。

## 应用启动约束
<a name="constraints-launch-constraint"></a>

您配置启动角色后，将该角色作为启动约束分配给产品。此操作指示 AWS Service Catalog 在最终用户启动产品时代入该角色。

**将角色分配给产品**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择包含产品的产品组合。

1. 选择**约束**选项卡并选择**创建约束**。

1. 自**产品**中选择产品，然后在**约束类型**下选择**启动**。选择**继续**。

1. 在**启动约束** 部分，您可以从自己的账户中选择 IAM 角色、输入 IAM 角色 ARN 或输入角色名称。

   如果您指定角色名称，当账户使用启动约束时，将使用账户中具有该名称的 IAM 角色。此方法允许使用与账户无关的启动角色约束，因此您可以为每个共享账户创建更少的资源。
**注意**  
在创建启动约束的账户中，以及使用此启动约束启动产品的用户账户中，都必须存在给定的角色名称。

1. 指定 IAM 角色后，选择 **创建**。

## 在启动限制中添加混淆代理
<a name="constraint-confused-deputy"></a>

AWS Service Catalog 支持使用代入角色请求 APIs 的[混乱副](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)手保护。添加启动约束时，您可以使用启动角色信任策略中的 `sourceAccount` 和 `sourceArn` 条件来限制启动角色访问权限。它可确保启动角色由可信来源调用。

在以下示例中， AWS Service Catalog 最终用户属于账户 111111111111。 AWS Service Catalog 管理员为产品创建 `LaunchConstraint` 时，最终用户可以在启动角色信任策略中指定以下条件，将担任角色限制为账户 111111111111。

```
"Condition":{
   "ArnLike":{
      "aws:SourceArn":"arn:aws:servicecatalog:us-east-1:111111111111:*"
   },
   "StringEquals":{
      "aws:SourceAccount":"111111111111"
   }
  
}
```

使用 `LaunchConstraint` 预配置产品的用户必须具有相同的 `AccountId`（111111111111）。否则，为防止滥用启动角色，操作将出现 `AccessDenied` 错误并失败。

以下 AWS Service Catalog APIs 是为了保护混乱的副手：
+ `LaunchConstraint`
+ `ProvisionProduct`
+ `UpdateProvisionedProduct`
+ `TerminateProvisionedProduct`
+ `ExecuteProvisionedProductServiceAction`
+ `CreateProvisionedProductPlan`
+ `ExecuteProvisionedProductPlan`

 AWS Service Catalog 仅对的`sourceArn `保护支持模板化 ARNs，例如 “`arn:<aws-partition>:servicecatalog:<region>:<accountId>:`” 它不支持特定的资源 ARNs。

## 验证启动约束
<a name="constraints-launch-test"></a>

要验证 AWS Service Catalog 使用角色启动产品并成功配置产品，请从 AWS Service Catalog 控制台启动产品。要在将约束发布给用户前对其进行测试，请创建包含相同产品的测试产品组合，并使用该产品组合测试约束。

**启动产品**

1. 在 AWS Service Catalog 控制台的菜单中，选择 S **ervice Catalog**，**最终用户**。

1. 选择产品以打开**产品详细信息**页面。在**启动选项**表中，确认已显示角色的 Amazon 资源名称（ARN）。

1. 选择**启动产品**。

1. 继续执行启动步骤，填入任何所需信息。

1. 确认产品已成功启动。

# AWS Service Catalog 通知限制
<a name="constraints-notification"></a>

**注意**  
AWS Service Catalog 不支持 Terraform 开源或 Terraform Cloud 产品的通知限制。

通知约束指定 Amazon SNS 主题以接收有关堆栈事件的通知。

使用以下过程创建 SNS 主题并订阅它。

**创建 SNS 主题和订阅**

1. [在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. 选择**创建主题**。

1. 键入主题名称，然后选择 **创建主题**。

1. 选择**创建订阅**。

1. 对于**协议**，请选择**电子邮件**。对于 **Endpoint**，请键入您用于接收通知的电子邮件地址。选择**创建订阅**。

1. 您将收到一封包含主题行 `AWS Notification - Subscription Confirmation` 的确认电子邮件。打开电子邮件，然后按照说明操作以完成订阅。

通过以下过程使用您在上一过程中创建的 SNS 主题应用通知约束。

**向产品应用通知约束**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择包含产品的产品组合。

1. 展开**约束**并选择**添加约束**。

1. 从**产品**中选择产品并将**约束类型**设置为**通知**。选择**继续**。

1. 选择 **Choose a topic from your account**，然后选择您根据 **Topic Name** 创建的 SNS 主题。

1. 选择**提交**。

# AWS Service Catalog 标签更新限制
<a name="constraints-resourceupdate"></a>

**注意**  
AWS Service Catalog 不支持 Terraform 开源产品的标签更新限制。

通过标签更新限制， AWS Service Catalog 管理员可以允许或禁止最终用户更新与预配置产品关联的资源上的标签。如果允许更新标签，则与产品或产品组合关联的新标签将在预配置产品更新期间应用于预配置的资源。

**启用产品的标签更新**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择包含要更新的产品的产品组合。

1. 选择**约束** 选项卡并选择**添加约束**。

1. 在**约束类型**下，选择**标签更新**。

1. 从**产品**中选择产品，然后选择**继续**。

1. 在**标签更新**页面上，选择**启用标签更新**。

1. 选择**提交**。

# AWS Service Catalog 堆栈集约束
<a name="constraints-stackset"></a>

**注意**  
AWS Service Catalog 不支持 Terraform 开源产品的堆栈集约束。
AutoTags 目前不支持 CloudFormation StackSets。

堆栈集约束允许您使用配置产品部署选项 CloudFormation StackSets。您可以为产品启动指定多个账户和区域。最终用户可以管理这些账户，并确定产品的部署位置和部署顺序。

**向产品应用堆栈集约束**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择包含所需产品的产品组合。

1. 选择**约束**选项卡并选择**创建约束**。

1. 在**产品**中，选择产品。在**约束类型**中，选择**堆栈集**。

1. 为您的堆栈集约束配置账户、区域和权限。
   + 在**账户设置**中，确定要在其中创建产品的账户。
   + 在**区域设置**中，选择要部署产品的地理区域以及在这些区域中您希望的产品部署顺序。
   + 在**权限**中，选择一个 IAM StackSet 管理员角色来管理您的目标账户。如果您不选择角色，则 StackSets使用默认 ARN。[了解有关设置堆栈集权限的更多信息。](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)

1. 选择**创建**。

# AWS Service Catalog 模板约束
<a name="catalogs_constraints_template-constraints"></a>

**注意**  
AWS Service Catalog 不支持 Terraform 开源或 Terraform Cloud 产品的模板限制。

要限制最终用户在启动产品时可用的选项，请应用模板约束。应用模板约束可确保最终用户可在不违反组织的合规性要求的情况下使用产品。您可以将模板约束应用于产品 AWS Service Catalog 组合中的产品。产品组合必须先包含一个或多个产品，然后才能定义模板约束。

模板约束由一个或多个规则组成，这些规则缩小了在产品基础 CloudFormation 模板中定义的参数的允许值。 CloudFormation 模板中的参数定义用户在创建堆栈时指定的值的集合。例如，参数可以定义用户在启动包含实例的堆栈时可以选择的各种 EC2 实例类型。

如果模板中的参数值集对于产品组合的目标受众来说太广泛，则可定义模板约束来限制用户在启动产品时可选择的值。例如，如果模板参数包含的 EC2 实例类型对于仅应使用小实例类型（例如`t2.micro`或`t2.small`）的用户来说太大，则可以添加模板约束来限制最终用户可以选择的实例类型。有关 CloudFormation 模板参数的更多信息，请参阅《*CloudFormation 用户指南*》中的[参数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)。

模板约束绑定于产品组合内。如果将模板约束应用于一个产品组合的某个产品，然后您将此产品包含在另一个产品组合中，则这些约束将不会应用于第二个产品组合的此产品。

如果将模板约束应用于已与用户共享的产品，则约束会立即应用到随后启动的所有产品和产品组合中所有版本的产品。

您可以使用规则编辑器或在 AWS Service Catalog 管理员控制台中将规则写成 JSON 文本来定义模板约束规则。有关规则的更多信息（包括语法和示例），请参阅[模板约束规则](reference-template_constraint_rules.md)。

要在将约束发布给用户前对其进行测试，请创建包含相同产品的测试产品组合，并使用该产品组合测试约束。

**将模板约束应用于产品**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 在**产品组合**页面，选择包含要将模板约束应用于其上的产品的产品组合。

1. 展开**约束**部分并选择**添加约束**。

1. 在**选择产品和类型**窗口中，对于**产品**，选择您要定义模板约束的产品。然后，对于**约束类型**项，选择**模板**。选择**继续**。

1. 在**模板约束生成器**页面，使用 JSON 编辑器或规则生成器界面来编辑约束规则。
   + 要编辑规则的 JSON 代码，请选择**约束文本编辑器**选项卡。此选项卡上提供了多个示例来帮助您开始操作。

     要使用规则生成器界面构建规则，请选择**规则生成器**选项卡。在此选项卡上，您可以选择产品的模板中指定的任何参数，并可以为该参数指定允许值。根据参数的类型，可通过选择清单中的项目、指定数量或指定逗号分隔列表中的一组值来指定允许值。

     在构建完规则后，选择**添加规则**。规则会显示在**规则生成器**选项卡上的表中。要查看和编辑 JSON 输出，请选择**约束文本编辑器**选项卡。

1. 在编辑完约束的规则后，选择**提交**。要查看约束，请转到产品组合详细信息页，然后展开**约束**。

# 模板约束规则
<a name="reference-template_constraint_rules"></a>

在 AWS Service Catalog 产品组合中定义模板约束的规则描述了最终用户何时可以使用该模板，以及他们可以为用于创建他们尝试使用的产品的 CloudFormation 模板中声明的参数指定哪些值。规则可用于防止最终用户无意中指定错误的值。例如，您可以添加一条规则来验证最终用户是否在给定 VPC 中指定了有效的子网，或者是否在测试环境中使用了`m1.small`实例类型。 CloudFormation 在为产品创建资源之前，使用规则来验证参数值。

每个规则包含两个属性：规则条件（可选）和断言（必需）。规则条件确定规则的生效时间。断言描述用户可为特定参数指定的值。如果您未定义规则条件，则规则的断言始终生效。要定义规则条件和断言，可使用*特定于规则的内部函数*，只能在模板的 `Rules` 部分中使用这些函数。您可以嵌套函数，但规则条件或断言的最终结果必须为 true 或 false。

例如，假设您在 `Parameters` 部分中声明了 VPC 和子网参数。您可以创建一个规则来验证给定子网是否位于特定的 VPC 中。因此，当用户指定 VPC 时，会在创建或更新堆栈之前 CloudFormation 评估断言以检查子网参数值是否在该 VPC 中。如果参数值无效，则 CloudFormation 立即无法创建或更新堆栈。如果用户未指定 VPC，则 CloudFormation 不检查子网参数值。

## 语法
<a name="template-constraint-rules-syntax"></a>

模板的`Rules` 部分由后跟冒号的密钥名称 `Rules` 组成。所有规则声明都被括在括号里。如果您声明多个规则，则可用逗号将它们分隔开。对于每个规则，您必须声明一个用引号引起来的逻辑名称，后跟冒号以及将规则条件和断言括起来的括号。

规则可以包含 `RuleCondition` 属性，且必须包含 `Assertions` 属性。对于每个规则，您可以仅定义一个规则条件；您可以在 `Assertions` 属性内定义一个或多个断言。可以通过使用特定于规则的内部函数定义规则条件和断言，如以下伪模板所示：

```
"Rules":{
   "Rule01":{
      "RuleCondition":{
         "Rule-specific intrinsic function"
      },
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         },
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   },
   "Rule02":{
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   }
}
```

此伪模板显示包含两个分别名为 `Rules` 和 `Rule01` 的规则的 `Rule02` 部分。`Rule01` 包含一个规则条件和两个断言。如果规则条件中的函数的计算结果为 true，则将计算和应用每个断言中的函数。如果规则条件为 false，则此规则不会生效。由于 `Rule02` 没有规则条件（这意味着始终计算和应用断言），因此它始终生效。

有关用于定义规则条件和断言的特定于规则的内置函数信息，请参阅*AWS CloudFormation 《用户指南》*中的[AWS 规则函数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html)。

## 示例：按条件验证参数值
<a name="template-constraint-rules-example"></a>

以下两个规则检查 `InstanceType` 参数的值。根据环境参数（`test` 或 `prod`）的值，用户必须为 `m1.small` 参数指定 `m1.large` 或 `InstanceType`。必须在同一模板的 `InstanceType` 部分中声明 `Environment` 和 `Parameters` 参数。

```
"Rules" : {
  "testInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "test"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.small"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the test environment, the instance type must be m1.small"
      }
    ]
  },
  "prodInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "prod"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.large"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the prod environment, the instance type must be m1.large"
      }
    ]
  }
}
```

# AWS Service Catalog 服务操作
<a name="using-service-actions"></a>

**注意**  
AWS Service Catalog 不支持 Terraform 开源或 Terraform Cloud 产品的服务操作。

AWS Service Catalog 使您能够减少管理维护和最终用户培训，同时遵守合规性和安全措施。利用服务操作，作为管理员，您可以允许最终用户在 AWS Service Catalog中执行操作任务、排查问题、运行批准的命令或请求权限。使用 [AWS Systems Manager 文档](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html)定义服务操作。这些[AWS Systems Manager 文档](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html)允许访问实施 AWS 最佳实践的预定义操作，例如 Amazon EC2 停止和重启，您也可以定义自定义操作。

在本教程中，您为最终用户提供重启 Amazon EC2 实例的功能。添加必要的权限，定义服务操作，将服务操作与产品关联，将操作用于预配置产品来测试最终用户体验。

## 先决条件
<a name="service-actions-prerequisites"></a>

本教程假设您拥有完全的 AWS 管理员权限，您已经熟悉了 AWS Service Catalog，并且您已经拥有一组基本的产品、产品组合和用户。如果您不熟悉 AWS Service Catalog，请在使用本教程之前完成[设置](setup.md)和[入门](getstarted.md)任务。

**Topics**
+ [先决条件](#service-actions-prerequisites)
+ [步骤 1：配置最终用户权限](#service-actions-configure-end-user-permissions)
+ [步骤 2：创建服务操作](#service-actions-create-new-service-action)
+ [步骤 3：将服务操作与产品版本关联](#service-actions-associate-with-product-version)
+ [步骤 4：测试最终用户体验](#service-actions-test-end-user-experience)
+ [步骤 5：使用管理服务操作 AWS CloudFormation](#service-actions-cloudformation)
+ [步骤 6：问题排查](#service-actions-troubleshooting)

## 步骤 1：配置最终用户权限
<a name="service-actions-configure-end-user-permissions"></a>

最终用户必须拥有必需的权限才能查看和执行特定服务操作。在此示例中，最终用户需要获得访问 AWS Service Catalog 服务操作功能和执行 Amazon EC2 重启的权限。

**更新权限**

1. 打开 AWS Identity and Access Management (IAM) 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 从菜单中找到用户群组。

1. 选择最终用户将用于访问 AWS Service Catalog 资源的群组。在本示例中，我们选择最终用户组。在您自己的实现中，选择相关最终用户使用的组。

1. 在组的详细信息页面的**权限**选项卡上，创建新策略或编辑现有策略。在此示例中，我们通过选择为群组的 “置备” 和 “终止” 权限创建的自定义策略， AWS Service Catalog 向现有策略添加权限。

1. 在**策略**页面上，选择**编辑策略**以添加必要的权限。您可以使用可视化编辑器或 JSON 编辑器来编辑策略。在本示例中，我们使用 JSON 编辑器添加权限。在本教程中，向策略添加以下权限：

------
#### [ JSON ]

****  

   ```
   {
   	"Version":"2012-10-17",		 	 	 
   	"Statement": [
   		{
   			"Sid": "Stmt1536341175150",
   			"Action": [
   				"servicecatalog:ListServiceActionsForProvisioningArtifact",
   				"servicecatalog:ExecuteprovisionedProductServiceAction",
   				"ssm:DescribeDocument",
   				"ssm:GetAutomationExecution",
   				"ssm:StartAutomationExecution",
   				"ssm:StopAutomationExecution",
   				"cloudformation:ListStackResources",
   				"ec2:DescribeInstanceStatus",
   				"ec2:StartInstances",
   				"ec2:StopInstances"
   			],
   			"Effect": "Allow",
   			"Resource": "*"
   		}
   	]
   }
   ```

------

1. 编辑策略之后，审查并批准对策略的更改。最终用户组中的用户现在拥有在 AWS Service Catalog中执行 Amazon EC2 重启操作所需的权限。

## 步骤 2：创建服务操作
<a name="service-actions-create-new-service-action"></a>

接下来，您要创建一个服务操作来重启 Amazon EC2 实例。

1. 打开 AWS Service Catalog 控制台，网址为[https://console.aws.amazon.com/sc/](https://console.aws.amazon.com/servicecatalog/)。

1. 从菜单中，选择**服务操作**。

1. 在**服务操作**页面上，选择**创建新操作**。

1. 在**创建操作**页面上，选择一个 AWS Systems Manager 文档来定义服务操作。Amazon EC2 实例重启操作由 AWS Systems Manager 文档定义，因此我们保留下拉菜单上的默认选项 **Amazon 文档**。

1. 搜索并选择 “**AWS-重启EC2实例**” 操作。

1. 请为操作提供一个对您的环境和团队有意义的名称和描述。最终用户将看到此描述，从而选择帮助他们了解操作作用的内容。

1. 在**参数和目标配置**下，选择将作为操作目标的 SSM 文档参数（例如，**实例 ID**），然后选择参数的目标。选择**添加参数**以添加其他参数。

1. 在**权限**下，选择一个角色。我们在此示例中使用默认权限。还可以在此页面上执行和定义其他权限配置。

1. 审查配置之后，选择**创建操作**。

1. 在下一页上，操作创建完成后且可用时，将出现确认。

## 步骤 3：将服务操作与产品版本关联
<a name="service-actions-associate-with-product-version"></a>

定义操作后，您必须将产品与定义的操作关联。

1. 在**服务操作**页面上，选择 **AWS-重新启动 EC2instance**，然后选择**关联操作**。

1. 在**关联操作**页面上，选择您希望您的最终用户在其上执行服务操作的产品。在本示例中，我们选择**Linux 桌面**。

1. 选择产品版本。请注意，您可以使用顶部的复选框选择所有版本。

1. 选择**关联操作**。

1. 在下一页上，将显示一条确认消息。

您现在已经在 AWS Service Catalog中创建了服务操作。本教程的下一步是，以最终用户身份使用服务操作。

## 步骤 4：测试最终用户体验
<a name="service-actions-test-end-user-experience"></a>

最终用户可以在预配置产品上执行服务操作。在本教程中，最终用户至少必须具有一个预配置产品。预配置产品应从您在上一步中与服务操作关联的产品版本启动。

**以最终用户身份访问服务操作**

1. 以最终用户身份登录 AWS Service Catalog 控制台。

1. 在 AWS Service Catalog 控制面板的导航窗格中，选择**预配置产品列表**。此列表将显示为最终用户账户预配置的产品。

1. 在**预配置产品列表** 页面上，选择已预配置的实例。

1. 在**预配置产品详细信息**页面上，选择右上角的**操作**，然后选择 **AWS-重新启动EC2instance**操作。

1. 确认您要执行自定义操作。您收到操作已发送的确认。

## 步骤 5：使用管理服务操作 AWS CloudFormation
<a name="service-actions-cloudformation"></a>

 您可以创建服务操作及其与 AWS CloudFormation 资源的关联。有关更多信息，请参阅《AWS CloudFormation 用户指南》**中的以下内容：
+  [AWS::ServiceCatalog::CloudFormationProduct ProvisioningArtifactProperties](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-servicecatalog-cloudformationproduct-provisioningartifactproperties.html) 
+  [AWS::ServiceCatalog::ServiceAction协会](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-serviceactionassociation.html) 

**注意**  
 如果您管理服务操作与 CloudFormation 资源的关联，请不要通过或添加或删除服务操作 AWS 管理控制台。 AWS Command Line Interface 当您执行堆栈更新时，在 CloudFormation 之外对服务操作所做的任何更改都将被替换。

## 步骤 6：问题排查
<a name="service-actions-troubleshooting"></a>

如果您的服务操作执行失败，则可以在**预配置产品**页面上服务操作执行事件的**输出**部分中找到错误消息。您可以在下面看到常见错误消息的说明。

**注意**  
错误消息的确切文本可能会发生更改，因此您应避免在任何类型的自动执行的过程中使用这些文本。

 **内部故障**

AWS Service Catalog 遇到了内部错误。请稍后重试。如果错误仍存在，请与客户支持联系。

 **调用 StartAutomationExecution 操作时出错 (ThrottlingException)**

服务操作执行受后端服务（例如 SSM）的限制。

 **代入角色时拒绝访问**

 AWS Service Catalog 无法担任服务操作定义中指定的角色。请确保在角色的信任策略中将 *servicecatalog.amazonaws.com* 主体或区域主体（如 *servicecatalog.us-east-1.amazonaws.com*）列入允许列表。

 **调用 StartAutomationExecution 操作时出错 (AccessDeniedException)：用户无权在资源StartAutomationExecution 上执行:ssm:。**

服务操作定义中指定的角色无权调用 ssm: StartAutomationExecution。确保角色具有适当的 SSM 权限。

 ***TargetType*在预配置产品中找不到任何类型为的资源**

预配置产品不包含任何与 SSM 文档中指定的目标类型相匹配的资源，例如:: EC2 AWS:: Instance。检查您的预配置产品是否有这些资源，或确认文档是否正确。

 **Document with that name does not exist (具有该名称的文档不存在)**

在服务操作定义中指定的文档不存在。

 **Failed to describe SSM Automation document (无法描述 SSM Automation 文档)**

AWS Service Catalog 尝试描述指定文档时遇到来自 SSM 的未知异常。

 **Failed to retrieve credentials for role (无法检索角色的凭证)**

AWS Service Catalog 担任指定角色时遇到未知错误。

 **在中找不到参数的值 *InvalidValue* “” *\$1ValidValue1\$1, \$1ValidValue2\$1***

 传递给 SSM 的参数值不在文档的允许值列表中。确认提供的参数有效，然后重试。

 **参数类型错误。为提供的值*ParameterName*不是有效的字符串。**

传递给 SSM 的参数值对文档上的类型无效。

 **Parameter is not defined in service action definition (未在服务操作定义中定义参数)**

传递给的参数 AWS Service Catalog 未在服务操作定义中定义。您只能使用在服务操作定义中定义的参数。

 **步骤处于 executing/canceling 操作状态时失败。 *Error message.*有关更多诊断详细信息，请参阅 Automation 服务问题排查指南。**

 SSM Automation 文档中的步骤失败。请参阅消息中的错误以进一步排除问题。

 **不允许使用以下参数值，因为它们不在预配置产品中：*InvalidResourceId***

用户已请求对不在预配置产品中的资源执行操作。

 **TargetType 未为 SSM 自动化文档定义**

服务操作需要 SSM 自动化文档进行 TargetType 定义。检查您的 SSM Automation 文档。

# 将 AWS Marketplace 产品添加到您的投资组合
<a name="catalogs_marketplace-products"></a>

您可以将 AWS Marketplace 产品添加到您的产品组合中，使这些产品可供 AWS Service Catalog 最终用户使用。

AWS Marketplace 是一家在线商店，您可以在其中查找、订阅并立即开始使用大量软件和服务。中的产品类型 AWS Marketplace 包括数据库、应用程序服务器、测试工具、监控工具、内容管理工具和商业智能软件。 AWS Marketplace 可在以下网址获得[https://aws.amazon.com/marketplace](https://aws.amazon.com/marketplace)。请注意，您不能将软件即服务 (SaaS) 产品从添加 AWS Marketplace 到 AWS Service Catalog。

您可以将带有 CloudFormation 模板 AWS Marketplace 的产品复制到 AWS Service Catalog 最终用户 AWS Service Catalog，然后将该产品添加到产品组合中。

**注意**  
AWS Service Catalog 不支持使用 Terraform 开源或 Terraform Cloud AWS Marketplace 产品模板向 AWS Service Catalog 最终用户分发产品。

AWS Marketplace 支持 AWS Service Catalog 直接或使用手动选项订阅和添加产品。我们建议使用专为之设计的功能添加商品 AWS Service Catalog。

## 使用管理 AWS Marketplace 产品 AWS Service Catalog
<a name="catalogs_marketplace-sc"></a>

您可以使用自定义界面将订阅 AWS Marketplace 的产品直接添加到 AWS Service Catalog 。在 [AWS Marketplace](https://aws.amazon.com/marketplace) 中，选择 **Service Catalog**。有关更多信息，请参阅 *AWS Marketplace 帮助和常见问题解答*中的[将产品复制到 AWS Service Catalog](https://aws.amazon.com/marketplace/help/buyer-copy-product-to-SC?ref=help_ln_sibling)。

## 手动管理和添加 AWS Marketplace 产品
<a name="catalogs_marketplace-manual"></a>

完成以下步骤以订阅 AWS Marketplace 产品，在 CloudFormation 模板中定义该产品，然后将该模板添加到产品 AWS Service Catalog 组合中。

**订阅 AWS Marketplace 产品**

1. 前往 AWS Marketplace [https://aws.amazon.com/marketplace](https://aws.amazon.com/marketplace)。

1. 浏览产品或执行搜索以查找要添加到 AWS Service Catalog 产品组合的产品。选择产品以查看产品详细信息页面。

1. 选择**继续**以查看完成页面，然后选择**手动启动**选项卡。

   配送页面上的信息包括支持的亚马逊弹性计算云 (Amazon EC2) Elastic Compute Cloud 实例类型、 AWS 区域支持的实例类型以及产品在每个区域使用的亚马逊系统映像 (AMI) ID。 AWS 注意，有些选择可能会影响到成本。在后续步骤中，您将使用此信息对 CloudFormation 模板进行自定义。

1. 选择 **Accept Terms** 订阅产品。

   订阅产品后，您可以 AWS Marketplace 随时访问产品配送页面上的信息，方法是选择 “**您的软件**”，然后选择产品。

**在 CloudFormation 模板中定义您的 AWS Marketplace 商品**

要完成以下步骤，您将使用其中一个 CloudFormation 示例模板作为起点，然后对模板进行自定义，使其代表您的 AWS Marketplace 商品。要访问示例模板，请参阅*《AWS CloudFormation 用户指南》*中的[示例模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-sample-templates.html)。

1. 在* CloudFormation 用户指南*的示例模板页面上，为您的产品选择一个 AWS 区域。您的 AWS Marketplace 产品必须支持 AWS 该地区。您可以在 AWS Marketplace中的产品完成页面上查看受支持的区域。

1. 要查看适合该区域的服务示例模板的列表，请选择**服务**链接。

1. 您可以使用满足您需求的任一示例作为起始点。此过程中的步骤将使用 **Amazon EC2 instance in a security group** 模板。要查看示例模板，请选择 **View**，然后在本地保存模板的副本，以便您能对其进行编辑。本地文件的扩展名必须为 `.template`。

1. 在文本编辑器中打开模板文件。

1. 自定义模板顶部的描述。您的描述可能与以下示例类似：

   `"Description": "Launches a LAMP stack from AWS Marketplace",`

1. 自定义 `InstanceType` 参数，使其仅包括产品支持的 EC2 实例类型。如果模板包含不受支持的 EC2 实例类型，则最终用户无法启动产品。

   1. 在的产品配送页面上 AWS Marketplace，在**定价详情**部分查看支持的 EC2 实例类型。  
![\[中产品配送页面上的定价详情部分 AWS Marketplace 显示了支持的 EC2 实例类型。\]](http://docs.aws.amazon.com/zh_cn/servicecatalog/latest/adminguide/images/ec2-ondemand.png)

   1. 在您的模板中，将默认实例类型更改为所选的受支持的 EC2 实例类型。

   1. 编辑 `AllowedValues` 列表，使其仅包含产品所支持的 EC2 实例类型。

   1. 删除您不希望最终用户在从 `AllowedValues` 列表启动产品时使用的 EC2 实例类型。

   编辑完 `InstanceType` 参数后，此参数可能类似于以下示例：

   ```
       "InstanceType" : {
         "Description" : "EC2 instance type",
         "Type" : "String",
         "Default" : "m1.small",
         "AllowedValues" : [ "t1.micro", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.large", "c3.xlarge", "c3.xlarge", "c3.4xlarge", "c3.8xlarge" ],
         "ConstraintDescription" : "Must be a valid EC2 instance type."
       },
   ```

1. 在模板的 `Mappings` 部分中，编辑 `AWSInstanceType2Arch` 映射，使其仅包含受支持的 EC2 实例类型和架构。

   1. 通过删除 `AllowedValues` 参数的 `InstanceType` 列表中未包含的所有 EC2 实例类型来编辑映射的列表。

   1. 编辑将作为产品支持的架构类型的每个 EC2 实例类型的 `Arch` 值。有效值包括 `PV64`、`HVM64` 和 `HVMG2`。要了解产品支持的架构类型，请参阅 AWS Marketplace中的产品详细信息页面。要了解 EC2 实例系列支持哪些架构，请参阅 [Amazon Linux AMI 实例类型矩阵](https://aws.amazon.com/amazon-linux-ami/instance-type-matrix/)。

   编辑完 `AWSInstanceType2Arch` 映射后，此映射可能类似于以下示例：

   ```
       "AWSInstanceType2Arch" : {
         "t1.micro"    : { "Arch" : "PV64"  },
         "m1.small"    : { "Arch" : "PV64"  },
         "m1.medium"   : { "Arch" : "PV64"  },
         "m1.large"    : { "Arch" : "PV64"  },
         "m1.xlarge"   : { "Arch" : "PV64"  },
         "m2.xlarge"   : { "Arch" : "PV64"  },
         "m2.2xlarge"  : { "Arch" : "PV64"  },
         "m2.4xlarge"  : { "Arch" : "PV64"  },
         "c1.medium"   : { "Arch" : "PV64"  },
         "c1.xlarge"   : { "Arch" : "PV64"  },
         "c3.large"    : { "Arch" : "PV64"  },
         "c3.xlarge"   : { "Arch" : "PV64"  },
         "c3.2xlarge"  : { "Arch" : "PV64"  },
         "c3.4xlarge"  : { "Arch" : "PV64"  },
         "c3.8xlarge"  : { "Arch" : "PV64"  }
       }
   ,
   ```

1. 在模板的`Mappings`部分中，编辑`AWSRegionArch2AMI`映射以将每个 AWS 区域与产品的相应架构和 AMI ID 相关联。

   1. 在的产品配送页面上 AWS Marketplace，查看您的产品在每个 AWS 区域使用的 AMI ID，如下例所示：

         
![\[中商品配送页面 IDs 上的地区和 AMI 表 AWS Marketplace。\]](http://docs.aws.amazon.com/zh_cn/servicecatalog/latest/adminguide/images/sc-marketplace_ami_ids-console.png)

   1. 在您的模板中，删除您不支持的所有 AWS 区域的映射。

   1. 编辑每个区域的映射以删除不支持的架构（`PV64``HVM64`、或`HVMG2`）及其关联的 AMI IDs。

   1. 对于剩下的每个 AWS 区域和架构映射，请在中的产品详情页面中指定相应的 AMI ID AWS Marketplace。

   编辑完 `AWSRegionArch2AMI` 映射后，您的节点可能类似于以下示例：

   ```
       "AWSRegionArch2AMI" : {
         "us-east-1"        : {"PV64" : "ami-nnnnnnnn"},
         "us-west-2"        : {"PV64" : "ami-nnnnnnnn"},
         "us-west-1"        : {"PV64" : "ami-nnnnnnnn"},
         "eu-west-1"        : {"PV64" : "ami-nnnnnnnn"},
         "eu-central-1"     : {"PV64" : "ami-nnnnnnnn"},
         "ap-northeast-1"   : {"PV64" : "ami-nnnnnnnn"},
         "ap-southeast-1"   : {"PV64" : "ami-nnnnnnnn"},
         "ap-southeast-2"   : {"PV64" : "ami-nnnnnnnn"},
         "sa-east-1"        : {"PV64" : "ami-nnnnnnnn"}
       }
   ```

   现在，您可以使用模板将产品添加到产品 AWS Service Catalog 组合中。如果要进行其他更改，请参阅[使用 CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)以了解有关模板的更多信息。

**将您的 AWS Marketplace 产品添加到产品 AWS Service Catalog 组合中**

1. 登录 AWS 管理控制台 并导航到 AWS Service Catalog 管理员控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 在**产品组合**页面上，选择要将 AWS Marketplace 产品添加到的产品组合。

1. 在产品组合详细信息页面上，选择**上传新产品**。

1. 键入请求的产品和支持详细信息。

1. 在 **Version details** 页面上，依次选择 **Upload a template file**、**Browse** 和模板文件。

1. 键入版本标题和描述。

1. 选择**下一步**。

1. 在**审核**页面上，确认摘要是正确的，然后选择**确认并上传**。产品将添加到产品组合。产品现在对有权访问产品组合的最终用户可用。

# 使用 CloudFormation StackSets
<a name="using-stacksets"></a>

**注意**  
AutoTags 目前不支持 CloudFormation StackSets。

您可以使用 CloudFormation StackSets 在多个 AWS 区域 和账户中发布 AWS Service Catalog 产品。您可以指定产品在 AWS 区域内部署的顺序。在账户之间，产品是并行部署的。在启动时，用户可以指定容错能力以及并行部署的最大账户数。有关更多信息，请参阅[使用 CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)。

## 堆栈集和堆栈实例
<a name="stacksets-vs-stack-instances"></a>

*堆栈集*允许您使用单个 CloudFormation 模板在跨 AWS 区域的 AWS 账户中创建堆栈。

*堆栈实例*指的是 AWS 区域内的目标账户中的堆栈，并且仅与一个堆栈集相关联。

有关更多信息，请参阅 [StackSets 概念](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html)。

## 堆栈集约束
<a name="stackset-constraints"></a>

在中 AWS Service Catalog，您可以使用堆栈集约束来配置产品部署选项。

 AWS Service Catalog 支持两种产品的堆栈集限制 AWS GovCloud (US) Regions： AWS GovCloud （美国西部）和 AWS GovCloud （美国东部）。

有关更多信息，请参阅 [AWS Service Catalog 堆栈集约束](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/constraints-stackset.html)。

# 管理预算
<a name="catalogs_budgets"></a>

您可以使用 AWS 预算来跟踪您的服务成本和使用情况 AWS Service Catalog。您可以将预算与 AWS Service Catalog 产品和产品组合相关联。

**注意**  
AWS Service Catalog 不支持 Terraform 开源产品的预算。

AWS 预算使您能够设置自定义预算，以便在您的成本或使用量超过（或预计超过）预算金额时提醒您。有关 AWS 预算的信息，请访问[https://aws.amazon.com/aws-cost-management/aws-budgets](https://aws.amazon.com/aws-cost-management/aws-budgets)。

**Topics**
+ [先决条件](#budgets-setup)
+ [创建预算](#budgets-create)
+ [关联预算](#budgets-associate)
+ [查看预算](#budgets-view)
+ [取消关联预算](#budgets-disassociate)

## 先决条件
<a name="budgets-setup"></a>

在使用 AWS 预算之前，您需要在 AWS 账单与成本管理 控制台中激活成本分配标签。有关更多信息，请参阅《AWS 账单与成本管理 用户指南》**中的[激活用户定义的成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)。

**注意**  
标签最多需要 24 小时才能激活。

您还需要允许将要使用预算功能的任何用户或群组访问 AWS 账单与成本管理 控制台。您可以通过为用户创建新策略来执行此操作。

要允许 用户创建预算，您还必须允许用户查看账单信息。如果要使用 Amazon SNS 通知，则可以为用户提供创建 Amazon SNS 通知的功能，如下面的策略示例所示。

**创建预算策略**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**策略**。

1. 在内容窗格中，选择**创建策略**。

1. 选择 **JSON** 选项卡，然后复制以下 JSON 策略文档中的文本。将该文本粘贴到 **JSON** 文本框中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt1435216493000",
               "Effect": "Allow",
               "Action": [
                   "aws-portal:ViewBilling",
                   "aws-portal:ModifyBilling",
                   "budgets:ViewBudget",
                   "budgets:ModifyBudget"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "Stmt1435216552000",
               "Effect": "Allow",
               "Action": [
                   "sns:*"
               ],
               "Resource": [
                   "arn:aws:sns:us-east-1:123456789012:*"
               ]
           }
       ]
   }
   ```

------

1. 完成后，选择**查看策略**。策略验证程序将报告任何语法错误。

1. 在**审核** 页面上，为您的策略命名。查看策略**摘要**以查看您的策略授予的权限，然后选择**创建策略**以保存您的工作。

   新策略将显示在托管策略列表中，并且已准备好附加到您的用户和组。有关更多信息，请参阅*《AWS Identity and Access Management 用户指南》*中的[创建和附加客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#step2-attach-policy)。

## 创建预算
<a name="budgets-create"></a>

 在 AWS Service Catalog 管理员控制台中，**产品列表**和产品**组合**页面列出了有关现有产品和产品组合的信息，并允许您对其进行操作。要创建预算，请先确定要将预算与哪个产品或产品组合相关联。

**创建预算**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1.  选择**产品列表**或**产品组合**。

1.  选择要添加预算的产品或产品组合。

1.  打开**操作**菜单，然后选择**创建预算**。

1.  在**预算创建** 页面上，将一种标签类型与您的预算相关联。

    标签有两种类型： AutoTags 和 TagOptions。 AutoTags 确定推出产品的产品组合、产品和用户。 AWS Service Catalog 自动将这些标签应用于已配置的资源。A TagOption 是管理员定义的键值对，在中进行管理。 AWS Service Catalog

    为了使产品组合或产品上的支出能够反映相关预算，它们必须具有相同的标签。请注意，首次使用的标签键可能需要 24 小时才能激活。有关更多信息，请参阅 [先决条件](#budgets-setup)。

1.  选择 “**在中创建” AWS Budgets**。您会被定向至**设置预算**页面。按照[创建预算](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-create.html)中的步骤继续进行预算设置。

**注意**  
 创建预算后，您必须将其与产品或产品组合相关联。

## 关联预算
<a name="budgets-associate"></a>

 每个产品组合或产品可以有一个与之关联的预算。每个预算可以与多个产品组合和产品相关联。

 当您将预算与产品或产品组合相关联时，您将能够从该产品或产品组合的详细信息页面查看有关预算的信息。为了使产品或产品组合上的支出能够反映在预算中，您必须为预算和产品或产品组合关联相同的标签。

**注意**  
 如果您从中删除预算 AWS Budgets，则与 AWS Service Catalog 产品和产品组合的现有关联仍然存在。 AWS Service Catalog 将无法显示有关已删除预算的任何信息。

**关联预算**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1.  选择**产品列表**或**产品组合**。

1.  选择您想要与预算关联的产品或产品组合。

1.  打开**操作**菜单，然后选择**关联预算**。

1.  在**预算关联**页面上，选择现有预算，然后选择**继续**。

1.  **产品**或**产品组合**表现在将包含您刚刚添加的预算的数据。

## 查看预算
<a name="budgets-view"></a>

 如果预算与产品相关联，您可以在**产品详细信息**和**产品列表**页面上查看有关预算的信息。如果预算与产品组合相关联，您可以在**产品组合**和**产品组合详细信息**页面上查看有关预算的信息。

 **产品组合**和**产品列表**页面显示现有资源的预算信息。您可以看到显示**当前与预算**和**预测与预算**的列。

 当选择产品或产品组合时，您会被定向至详细信息页面。**产品组合详细信息**和**产品详细信息**页面中包含一些部分，记录了有关关联预算的详细信息。您可以查看预算金额、当前支出和预测支出。您还可以选择查看预算详细信息并编辑预算。

## 取消关联预算
<a name="budgets-disassociate"></a>

 您可以将预算与产品组合或产品取消关联。

**注意**  
 如果您从预算中删除 AWS 预算，则与 AWS Service Catalog 产品和产品组合的现有关联仍然存在。 AWS Service Catalog 将无法显示有关已删除预算的任何信息。

**要取消关联预算**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1.  选择**产品列表**或**产品组合**。

1.  选择要取消预算关联的产品或产品组合。

1.  选择**操作**。从下拉列表中选择**取消关联预算**。此时会显示确认提醒。

1.  在您确认要取消关联产品或产品组合的预算后，选择**确认**。