

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

# 管理多个 Amazon Web Services account 和 AWS 区域中的 AWS Service Catalog 产品
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions"></a>

*Ram Kandaswamy，Amazon Web Services*

## Summary
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-summary"></a>

Amazon Web Services (AWS) Service Catalog 简化并加速了企业基础设施即代码（IaC）模板的治理和分配。您可以使用 AWS CloudFormation 模板来定义产品所需的 AWS 资源（*堆栈*）集合。AWS CloudFormation StackSets 扩展了此功能，使您能够通过单个操作在多个账户和 AWS 区域中创建、更新或删除堆栈。

AWS Service Catalog 管理员使用开发人员编写的 CloudFormation 模板创建产品并进行发布。然后将这些产品与产品组合相关联，并对治理施加约束。为了向其他 AWS 账户或组织单位 (OUs) 中的用户提供您的产品，您通常会与他们[共享您的产品组合](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_sharing.html)。此模式描述了一种管理基于 AWS 的 AWS Service Catalog 产品的替代方法 CloudFormation StackSets。您可以使用堆栈集约束来设置可以部署和使用您的产品的 AWS 区域和账户，而不是共享产品组合。通过使用这种方法，您可以在多个账户和 AWS 区域中配置您的 AWS Service Catalog 产品，并从中心位置对其进行管理，同时满足您的监管要求。 OUs 

这种方法的优点：
+ 该产品从主账户进行预置和管理，不与其他账户共享。
+ 此方法提供了基于特定产品的所有预置产品（堆栈）的整合视图。
+ 使用 Amazon Web Services 管理连接器进行配置更简单，因为它仅针对一个账户。
+ 您可以更轻松地查询和使用 AWS Service Catalog 中的产品。

## 先决条件和限制
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-prereqs"></a>

**先决条件**
+ 适用于 IaC 和版本控制的 AWS CloudFormation 模板
+ 用于预置和管理 AWS 资源的多账户设置和 AWS Service Catalog

**限制**
+ 此方法使用 AWS CloudFormation StackSets，其局限性 StackSets 适用：
  + StackSets 不支持通过宏部署 CloudFormation 模板。如果您使用宏来预处理模板，则无法使用 StackSets基于基础的部署。
  + StackSets 提供了取消堆栈与堆栈集关联的功能，因此您可以瞄准特定的堆栈来修复问题。但是，已解除关联的堆栈不能再与堆栈集重新关联。
+ AWS Service Catalog 会自动生成 StackSet 名称。当前不支持自定义。

## 架构
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-architecture"></a>

**目标架构**

![\[用户使用 AWS CloudFormation 模板管理 AWS Service Catalog 产品，然后 StackSets。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/16458fcd-861d-4ed4-8b91-47e19289a6bb/images/97d23325-b5c6-4ca9-8288-8dec1650c975.png)


1. 用户创建一个 AWS CloudFormation 模板来配置 AWS 资源，采用 JSON 或 YAML 格式。

1. 该 CloudFormation 模板在 AWS Service Catalog 中创建产品，然后将其添加到产品组合中。

1. 用户创建预配置产品，在目标账户中创建 CloudFormation 堆栈。

1. 每个堆栈都预置 CloudFormation 模板中指定的资源。

## 工具
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可帮助您设置 AWS 资源，快速一致地配置这些资源，并在 AWS 账户和区域的整个生命周期中对其进行管理。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) 可帮助您集中管理获准在 AWS 上使用的 IT 服务目录。最终用户可在遵循组织设定约束的情况下快速部署他们所需已获得批准的 IT 服务。

## 操作说明
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-epics"></a>

### 跨账户预置产品
<a name="provision-products-across-accounts"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建产品组合。 | 产品组合是一个容器，其中包含一个或多个根据特定条件组合在一起的产品。使用产品组合可以帮助您在整个产品集中应用常见约束。要创建产品组合，请按照 [AWS Service Catalog 文档](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/portfoliomgmt-create.html)中的说明操作。如果您使用的是 AWS CLI，下面是一个示例命令：<pre>aws servicecatalog create-portfolio --provider-name my-provider --display-name my-portfolio</pre>有关更多信息，请参阅 [AWS CLI 文档](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/servicecatalog/create-portfolio.html)。 | AWS Service Catalog，IAM | 
| 创建 CloudFormation 模板。 | 创建描述资源的 CloudFormation 模板。在适用的情况下，应对资源属性值进行参数化。 | AWS CloudFormation、JSON/YAML | 
| 使用版本信息创建产品。 | 当您在 AWS Service Catalog 中发布 CloudFormation 模板时，该模板就会变成产品。为可选的版本详细信息参数提供值，例如版本标题和描述；这将有助于以后查询产品。要创建产品，请按照 [AWS Service Catalog 文档](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-cloudresource.html)中的说明操作。如果您使用的是 AWS CLI，则示例命令为：<pre>aws servicecatalog create-product --cli-input-json file://create-product-input.json</pre>其中 `create-product-input.json` 是传递产品参数的文件。有关此文件的示例，请参阅*其他信息*部分。有关更多信息，请参阅 [AWS CLI 文档](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/servicecatalog/create-product.html)。 | AWS Service Catalog | 
| 应用约束。 | 将堆栈集约束应用于产品组合，以配置产品部署选项，例如多个 Amazon Web Services account 、区域和权限。有关说明，请参阅 [AWS Service Catalog 文档](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/constraints-stackset.html)。 | AWS Service Catalog | 
| 添加权限 | 为用户提供权限，以便他们可以启动产品组合中的产品。有关控制台说明，请参阅 [AWS Service Catalog 文档](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_users.html)。如果您使用的是 AWS CLI，下面是一个示例命令：<pre>aws servicecatalog associate-principal-with-portfolio \<br />    --portfolio-id port-2s6abcdefwdh4 \<br />    --principal-arn arn:aws:iam::444455556666:role/Admin \<br />    --principal-type IAM</pre>有关更多信息，请参阅 [AWS CLI 文档](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/servicecatalog/associate-principal-with-portfolio.html)。 | AWS Service Catalog，IAM | 
| 预置产品。 | 预置产品是产品的资源实例。基于 CloudFormation 模板配置产品会启动 CloudFormation 堆栈及其底层资源。根据堆栈集约束，通过以适用的 AWS 区域和账户为目标来预置产品。在 AWS CLI 中，示例命令如下：<pre>aws servicecatalog provision-product \<br />    --product-id prod-abcdfz3syn2rg \<br />    --provisioning-artifact-id pa-abc347pcsccfm \<br />    --provisioned-product-name "mytestppname3"</pre>有关更多信息，请参阅 [AWS CLI 文档](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/servicecatalog/provision-product.html)。 | AWS Service Catalog | 

## 相关资源
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-resources"></a>

**参考**
+ [AWS Service Catalog 概述](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)
+ [使用 AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html)

**教程和视频**
+ [AWS re: Invent 2019：实现一切自动化：选项和最佳实践](https://www.youtube.com/watch?v=bGBVPIpQMYk)（视频）

## 附加信息
<a name="manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions-additional"></a>

使用该`create-product`命令时，`cli-input-json`参数指向一个文件，该文件指定了产品所有者、支持电子邮件和 CloudFormation 模板详细信息等信息。配置文件示例如下：

```
{
   "Owner": "Test admin",
      "SupportDescription": "Testing",
         "Name": "SNS",
            "SupportEmail": "example@example.com",
            "ProductType": "CLOUD_FORMATION_TEMPLATE",
               "AcceptLanguage": "en",
                  "ProvisioningArtifactParameters": {
                     "Description": "SNS product",
                        "DisableTemplateValidation": true,
                           "Info": {
                              "LoadTemplateFromURL": "<url>"
                     },
                           "Name": "version 1"
}
```