管理多个 Amazon Web Services account 和 AWS 区域中的 AWS Service Catalog 产品 - AWS Prescriptive Guidance

管理多个 Amazon Web Services account 和 AWS 区域中的 AWS Service Catalog 产品

Ram Kandaswamy,Amazon Web Services

摘要

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

AWS Service Catalog 管理员使用开发人员编写的 CloudFormation 模板创建产品并发布这些产品。然后将这些产品与产品组合相关联,并对治理施加约束。要使您的产品可供其他 Amazon Web Services account 或组织单位 (OU) 中的用户使用,您通常会与他们共享您的产品组合。此模式描述了一种管理基于 AWS CloudFormation StackSets 的 AWS Service Catalog 产品的替代方法。您可以使用堆栈集约束来设置可以部署和使用您的产品的 AWS 区域和账户,而不是共享产品组合。通过使用此方法,您可以在多个账户、OU 和 AWS 区域中预置 AWS Service Catalog 产品,并从中心位置对其进行管理,同时满足您的监管要求。 

这种方法的优点:

  • 该产品从主账户进行预置和管理,不与其他账户共享。

  • 此方法提供了基于特定产品的所有预置产品(堆栈)的整合视图。

  • 使用 Amazon Web Services 管理连接器进行配置更简单,因为它仅针对一个账户。

  • 您可以更轻松地查询和使用 AWS Service Catalog 中的产品。

先决条件和限制

先决条件

  • 适用于 IaC 和版本控制的 AWS CloudFormation 模板

  • 用于预置和管理 AWS 资源的多账户设置和 AWS Service Catalog

限制

  • 此方法使用 AWS CloudFormation StackSets,并且堆栈集存在以下限制:

    • StackSets 不支持通过宏进行 CloudFormation 模板部署。如果使用宏对模板进行预处理,则无法使用基于 StackSets 的部署。

    • StackSets 提供了将堆栈与堆栈集解除关联的功能,因此您可以针对特定堆栈来修复问题。但是,已解除关联的堆栈不能再与堆栈集重新关联。

  • AWS Service Catalog 会自动生成堆栈集名称。当前不支持自定义。

架构

目标架构

用户使用 AWS CloudFormation 模板和 StackSets 管理 AWS Service Catalog 产品。
  1. 用户以 JSON 或 YAML 格式创建一个 AWS CloudFormation 模板,以配置 AWS 资源。

  2. CloudFormation 模板在 AWS Service Catalog 中创建一个产品,并将其添加到产品组合中。

  3. 用户创建一个预置产品,该产品在目标账户中创建 CloudFormation 堆栈。

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

工具

Amazon Web Services

  • AWS CloudFormation 可帮助您跨 Amazon Web Services account 和区域设置 AWS 资源,快速一致地预调配这些资源,并在资源的整个生命周期管理资源。

  • AWS 命令行界面(AWS CLI)是一种开源工具,它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。

  • AWS Identity and Access Management (AWS IAM) 通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。

  • AWS Service Catalog 可帮助您集中管理获准在 AWS 上使用的 IT 服务目录。最终用户可在遵循组织设定约束的情况下快速部署他们所需已获得批准的 IT 服务。

操作说明

任务描述所需技能

创建产品组合。

产品组合是一个容器,其中包含一个或多个根据特定条件组合在一起的产品。使用产品组合可以帮助您在整个产品集中应用常见约束。

要创建产品组合,请按照 AWS Service Catalog 文档中的说明操作。如果您使用的是 AWS CLI,下面是一个示例命令:

aws servicecatalog create-portfolio --provider-name my-provider --display-name my-portfolio

有关更多信息,请参阅 AWS CLI 文档

AWS Service Catalog,IAM

创建 CloudFormation 模板

创建一个描述资源的 CloudFormation 模板。在适用的情况下,应对资源属性值进行参数化。

AWS CloudFormation、JSON/YAML

使用版本信息创建产品。

当您在 AWS Service Catalog 中发布 CloudFormation 模板时,该模板将成为产品。为可选的版本详细信息参数提供值,例如版本标题和描述;这将有助于以后查询产品。

要创建产品,请按照 AWS Service Catalog 文档中的说明操作。如果您使用的是 AWS CLI,则示例命令为:

aws servicecatalog create-product --cli-input-json file://create-product-input.json

其中 create-product-input.json 是传递产品参数的文件。有关此文件的示例,请参阅其他信息部分。有关更多信息,请参阅 AWS CLI 文档

AWS Service Catalog

应用约束。

将堆栈集约束应用于产品组合,以配置产品部署选项,例如多个 Amazon Web Services account 、区域和权限。有关说明,请参阅 AWS Service Catalog 文档

AWS Service Catalog

添加权限

为用户提供权限,以便他们可以启动产品组合中的产品。有关控制台说明,请参阅 AWS Service Catalog 文档。如果您使用的是 AWS CLI,下面是一个示例命令:

aws servicecatalog associate-principal-with-portfolio \ --portfolio-id port-2s6abcdefwdh4 \ --principal-arn arn:aws:iam::444455556666:role/Admin \ --principal-type IAM

有关更多信息,请参阅 AWS CLI 文档

AWS Service Catalog,IAM

预置产品。

预置产品是产品的资源实例。预置基于 CloudFormation 模板的产品会启动 CloudFormation 堆栈及其底层资源。

根据堆栈集约束,通过以适用的 AWS 区域和账户为目标来预置产品。在 AWS CLI 中,示例命令如下:

aws servicecatalog provision-product \ --product-id prod-abcdfz3syn2rg \ --provisioning-artifact-id pa-abc347pcsccfm \ --provisioned-product-name "mytestppname3"

有关更多信息,请参阅 AWS CLI 文档

AWS Service Catalog

相关资源

参考信息

教程和视频

其他信息

当您使用 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" }