使用 AWS CDK 自动部署 AWS Service Catalog 产品组合与产品 - AWS Prescriptive Guidance

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

使用 AWS CDK 自动部署 AWS Service Catalog 产品组合与产品

由 Sandeep Gawande (AWS)、RAJNEESH TYAGI (AWS) 和 Viyoma Sachdeva (AWS) 创作

代码存储库:aws-cdk-servicecatalog-automation

环境:PoC 或试点

技术: DevOps;基础架构;管理和治理

工作负载:开源

Amazon Web Services:AWS Service Catalog、AWS CDK

Summary

AWS Service Catalog 可帮助您集中管理获准在组织 AWS 环境中使用的 IT 服务或产品目录。一系列产品称为产品组合,产品组合还包含配置信息。利用 AWS Service Catalog,您可以为组织内的每类用户创建一个自定义产品组合,然后授予对适当产品组合的访问权限。然后,这些用户可在产品组合中快速部署他们需要的任何产品。

如果您拥有复杂的网络基础架构(例如多区域和多账户架构),建议您在单个中央账户中创建和管理服务目录组合。此模式介绍如何使用 AWS Cloud Development Kit (AWS CDK) 在中央账户中自动创建服务目录组合,向最终用户授予访问权限,然后选择向一个或多个目标 Amazon Web Services account 配置产品。此 ready-to-use 解决方案在源账户中创建 Service Catalog 产品组合。它还可以选择使用 AWS CloudFormation 堆栈在目标账户中配置产品,并帮助您 TagOptions 为产品进行配置:

  • AWS CloudFormation StackSets — 您可以使用 StackSets 在多个 AWS 区域和账户中启动 Service Catalog 产品。在此解决方案中,您可选择在部署此解决方案时自动配置产品。有关更多信息,请参阅使用 AWS CloudFormation StackSets(S ervice Catalog 文档)和StackSets 概念(CloudFormation 文档)。

  • TagOption 库-您可以使用 TagOption 库管理已配置产品的标签。A TagOption是在 AWS Service Catalog 中管理的键值对。它不是 AWS 标签,但它可以用作基于创建 AWS 标签的模板 TagOption。有关更多信息,请参阅TagOption 库(Service Catalog 文档)。

先决条件和限制

先决条件

  • 用作管理 Service Catalog 产品组合的源账户的有效 Amazon Web Services account。

  • 如果您使用此解决方案在一个或多个目标客户中配置产品,则目标账户必须已经存在并且处于活动状态。

  • AWS Identity and Access Management (IAM) 权限,用于访问 AWS Service Catalog CloudFormation、AWS 和 AWS IAM。

产品版本

  • AWS CDK 版本 2.27.0

架构

目标技术堆栈

  • 集中式 Amazon Web Services account 中的 Service Catalog 产品组合

  • 部署至目标账户的 Service Catalog 产品

目标架构

AWS CDK 创建 Service Catalog 产品组合,并在目标账户中配置产品。
  1. 在投资组合 (或) 账户中,您可使用您的用例的 Amazon Web Services account、AWS 区域、IAM 角色、产品组合和产品信息更新 config.json 文件。

  2. 您部署 AWS CDK 应用程序。

  3. AWS CDK 应用程序扮演部署 IAM 角色并创建 config.json 文件中定义的 Service Catalog 产品组合和产品。

    如果您配置 StackSets 为在目标账户中部署产品,则该过程将继续进行。如果您未配置 StackSets 为配置任何产品,则该过程已完成。

  4. AWS CDK 应用程序扮演StackSet 管理员角色并部署您在 c onfig. json 文件中定义的 AWS CloudFormation 堆栈集。

  5. 在目标账户中, StackSets 担任StackSet 执行角色并配置产品。

工具

Amazon Web Services

  • AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义和预调配 Amazon Web Services Cloud 基础设施。

  • AWS CDK Toolkit 是一个命令行云开发套件,可帮助您与 AWS CDK 应用程序进行交互。

  • AWS CloudFormation 可帮助您设置 AWS 资源,快速一致地配置这些资源,并在 AWS 账户和区域的整个生命周期中对其进行管理。

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

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

代码存储库

此模式的代码可在 GitHubaws-cdk-servicecatalog-automation存储库中找到。代码存储库包含以下文件和文件夹:

  • cdk-sevicecatalog-app— 此文件夹包含此解决方案的 AWS CDK 应用程序。

  • config — 此文件夹包含 config.json 文件和用于在 Service Catalog 产品组合中部署产品的 CloudFormation 模板。

  • config/config.json — 该文件包含所有配置信息。您可更新此文件,以针对您的用例自定义此解决方案。

  • config/tem plates — 此文件夹包含服务中心产品的 CloudFormation 模板。

  • setup.sh — 此脚本部署解决方案。

  • uninstall.sh — 此脚本删除部署此解决方案时所创建的堆栈和所有 AWS 资源。

若要使用示例代码,请按照操作部分的说明执行。

最佳实践

操作说明

任务描述所需技能

安装 AWS CDK Toolkit。

确保您已安装 AWS CDK Toolkit。输入以下命令,以确认是否已安装并检查版本。 

cdk --version

如果未安装 AWS CDK Toolkit,请输入以下命令以进行安装。

npm install -g aws-cdk@2.27.0

如果 AWS CDK Toolkit 版本低于 2.27.0,则输入以下命令,以将其更新至 2.27.0 版本。

npm install -g aws-cdk@2.27.0 --force
AWS DevOps, DevOps 工程师

克隆存储库。

输入以下 命令。在其他信息部分的克隆存储库中,您可以复制包含存储库 URL 的完整命令。这将从中克隆aws-cdk-servicecatalog-automation存储库。 GitHub

git clone <repository-URL>.git

这将在目标目录中创建 cd aws-cdk-servicecatalog-automation 文件夹。输入以下命令以导航至此文件夹。

cd aws-cdk-servicecatalog-automation
AWS DevOps, DevOps 工程师

设置 AWS 凭证。

输入以下命令。它们会导出以下变量,这些变量定义您要部署堆栈的 Amazon Web Services account 和区域。

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number>
export CDK_DEFAULT_REGION=<AWS Region>

AWS CDK 的 AWS 凭证是通过环境变量提供的。

AWS DevOps, DevOps 工程师

为最终用户 IAM 角色配置权限。

如果您要使用 IAM 角色授予对产品组合及其中的产品的访问权限,则这些角色必须具有由 servicecatalog.amazonaws.com 服务主体担任的权限。有关如何授予这些权限的说明,请参阅使用 Service Catalog 启用可信访问(AWS Organizations 文档)。

AWS DevOps, DevOps 工程师

配置所需的 IAM 角色 StackSets。

如果您使用 StackSets 在目标账户中自动配置产品,则需要配置管理和运行堆栈集的 IAM 角色。

  1. 在源账户中,确认 AWSCloudFormationStackSetAdministrationRole 是否已存在。在目标账户中,确认 AWSCloudFormationStackSetExecutionRole 是否已经存在。如果这些角色已经存在,您可以跳至下一操作指南。

  2. 按照授予自我托管权限(IAM 文档) 中的说明,在产品组合账户中创建堆栈集管理角色,并在每个目标账户中创建执行角色。

AWS DevOps, DevOps 工程师
任务描述所需技能

创建 CloudFormation 模板。

在该config/templates文件夹中,为要包含在产品组合中的任何产品创建 CloudFormation 模板。有关更多信息,请参阅使用 AWS CloudFormation 模板(CloudFormation 文档)。

应用程序开发人员、AWS DevOps、 DevOps 工程师

自定义配置文件。

config 文件夹中,打开 config.json 文件。并根据您的用例定义相应的参数。若非另有说明,以下参数为必需参数:

  • portfolios 部分中,定义以下参数,以创建一个或多个 Service Catalog 产品组合:

    • portfolioName – 产品组合的名称。

    • providerName – 管理投资组合的个人、团队或组织的名称。

    • description – 投资组合的简要说明。

    • roles – (可选)应有权访问此产品组合的任何 IAM 角色的名称。具有此角色的用户可访问此产品组合中的产品。

    • users – (可选)应有权访问此产品组合及其产品的任何 IAM 用户的名称。

    • groups – (可选)应有权访问此产品组合及其产品的任何 IAM 用户组的名称。

    警告:IAM 用户拥有长期证书,这会带来安全风险。为帮助减轻这种风险,我们建议仅向这些用户提供执行任务所需的权限,并在不再需要这些用户时将其移除。

    重要提示:rolesusersgroups 都是可选参数,但是如果您未定义其中一个参数,则任何人都无法在 Service Catalog 控制台中查看产品组合产品。至少定义以下参数之一。有关更多信息,请参阅向 Service Catalog 最终用户授予权限(Service Catalog 文档)。

  • (可选)在该tagOption部分中, TagOptions 为产品定义:

    • key— TagOption 密钥的名称

    • value— 允许的字符串值 TagOption

    有关更多信息,请参阅TagOption 库(Service Catalog 文档)。

  • products 部分,为产品定义以下参数:

    • portfolioName – 要向其添加产品的产品组合的名称。只能指定一种产品组合。

    • productName – 产品的名称。

    • owner – 产品的所有者。

    • productVersionName – 以字符串值表示的产品版本名称,例如 v1

    • templatePath— 产品 CloudFormation 模板的文件路径。

    • deployWithStackSets—(可选)指定一个或多个账户和区域, StackSets 用于自动配置产品组合中的产品。如果您使用此部署选项,则需要使用以下参数。

      • accounts – 目标账户。

      • regions – 目标区域。

      • stackSetAdministrationRoleName— 用于管理 StackSets 配置的 IAM 角色的名称。请勿更改此值。此角色必须具有此确切名称。

      • stackSetExecutionRoleName — 部署堆栈实例的目标账户中的 IAM 角色的名称。请勿更改此值。此角色必须具有此确切名称。

有关已完成的配置文件的示例,请参阅其他信息部分的示例配置文件

应用程序开发人员、 DevOps 工程师、AWS DevOps

部署解决方案。

输入以下 命令。这将部署 AWS CDK 应用程序,并按照 config.json 文件中指定的方式配置 Service Catalog 产品组合和产品。

sh +x setup.sh
应用程序开发人员、 DevOps 工程师、AWS DevOps

验证部署。

通过执行以下操作,验证部署是否成功:

  1. 使用可访问配置文件中定义的一个或多个投资组合的凭证登录 AWS 管理控制台。

  2. 通过以下网址打开 Service Catalog 控制台:https://console.aws.amazon.com/servicecatalog/。 

  3. 在导航窗格中的配置下,选择产品。验证您能否能看到为产品组合指定的产品列表。

  4. 按照启动产品(Service Catalog 文档)中的说明启动其中一个可用产品。确认可用的产品版本和标签与您在配置文件中提供的值是否相匹配。

  5. 如果您选择使用在一个或多个目标账户中自动配置产品 StackSets,请执行以下操作:

    1. 使用授予您查看目标账户之一中所配置产品权限的凭证登录。

    2. 在 Service Catalog 控制台的导航窗格,在配置 下,选择已配置产品

    3. 确认预期产品在列表中显示。

常规 AWS

(可选)更新产品组合与产品。

如果您想使用此解决方案更新产品组合、产品或配置新产品:

  1. config.json 文件中进行所需更改。

  2. 根据需要在config/template文件夹中添加或修改任何 CloudFormation 模板。

  3. 重新部署解决方案。

例如,您可添加其他产品组合或预配置更多资源。AWS CDK 应用程序仅实施更改。如果先前部署的产品组合或产品无变化,则重新部署不会影响它们。

应用程序开发人员、 DevOps 工程师、通用 AWS
任务描述所需技能

(可选)移除此解决方案所部署的 AWS 资源。

如果要删除预配置产品,请按删除预配置产品(Service Catalog 文档)中的说明进行操作。

如果您想删除此解决方案所创建的所有资源,请输入以下命令。

sh uninstall.sh
AWS DevOps, DevOps 工程师,应用程序开发人员

相关资源

其他信息

其他信息

克隆存储库

输入以下命令以从中克隆存储库 GitHub。

git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git

示例配置文件

以下是带示例值的 config.json 文件示例。

{ "portfolios": [ { "displayName": "EC2 Product Portfolio", "providerName": "User1", "description": "Test1", "roles": [ "<Names of IAM roles that can access the products>" ], "users": [ "<Names of IAM users who can access the products>" ], "groups": [ "<Names of IAM user groups that can access the products>" ] }, { "displayName": "Autoscaling Product Portfolio", "providerName": "User2", "description": "Test2", "roles": [ "<Name of IAM role>" ] } ], "tagOption": [ { "key": "Group", "value": [ "finance", "engineering", "marketing", "research" ] }, { "key": "CostCenter", "value": [ "01", "02", "03", "04" ] }, { "key": "Environment", "value": [ "dev", "prod", "stage" ] } ], "products": [ { "portfolioName": "EC2 Product Profile", "productName": "Ec2", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template1.json" }, { "portfolioName": "Autoscaling Product Profile", "productName": "autoscaling", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template2.json", "deployWithStackSets": { "accounts": [ "012345678901", ], "regions": [ "us-west-2" ], "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole", "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole" } } ] }