使用自动部署 S AWS ervice Catalog 产品组合和产品 AWS CDK - AWS Prescriptive Guidance

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

使用自动部署 S AWS ervice Catalog 产品组合和产品 AWS CDK

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

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

环境:PoC 或试点

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

工作负载:开源

AWSAWS服务:Service Catalog;AWSCDK

Summary

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

如果您拥有复杂的网络基础架构(例如多区域和多账户架构),建议您在单个中央账户中创建和管理服务目录组合。此模式描述了如何使用 AWS Cloud Development Kit (AWSCDK) 在中央账户中自动创建服务目录产品组合,向最终用户授予访问权限,然后(可选)在一个或多个目标AWS账户中配置产品。此 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是在 Serv AWS ice Catalog 中管理的键值对。它不是AWS标签,但它可以用作基于创建AWS标签的模板 TagOption。有关更多信息,请参阅TagOption 库(Service Catalog 文档)。

先决条件和限制

先决条件

  • 要用作管理 Service Catalog 产品组合的源账户的活跃AWS账户。

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

  • AWSIdentity and Access Management (IAM) 访问AWS服务目录的权限 AWS CloudFormation,以及AWSIAM。

产品版本

  • AWSCDK版本 2.27.0

架构

目标技术堆栈

  • 集中AWS账户中的 Service Catalog 产品组合

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

目标架构

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

  2. 您部署AWSCDK应用程序。

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

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

  4. 该AWSCDK应用程序扮演StackSet 管理员角色并部署您在 config.j son 文件中定义的AWS CloudFormation 堆栈集。

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

工具

AWS服务

  • AWSCloud Development Kit (AWSCDK) 是一个软件开发框架,可帮助您在代码中定义和配置AWS云基础架构。

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

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

  • AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。

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

代码存储库

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

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

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

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

  • 配置/模板-此文件夹包含服务中心产品的 CloudFormation 模板。

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

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

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

最佳实践

操作说明

任务描述所需技能

安装工具AWSCDK包。

确保已安装AWSCDK工具包。输入以下命令,以确认是否已安装并检查版本。 

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凭据。

输入以下命令。它们会导出以下变量,这些变量定义了您要部署堆栈的AWS账户和区域。

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

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

AWS DevOps, DevOps 工程师

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

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

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

部署解决方案。

输入以下 命令。这将部署AWSCDK应用程序并按照 config.json 文件中指定的方式配置服务目录产品组合和产品。

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. 重新部署解决方案。

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

应用程序开发者、 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" } } ] }