View a markdown version of this page

设置企业蓝图工厂 - AWS 规范性指导

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

设置企业蓝图工厂

本节将帮助您在 AWS 环境中设置企业蓝图工厂。它包括为企业蓝图工厂设置所需存储库和 AWS 资源的详细说明。

先决条件

以下是在您的 AWS 环境中设置企业蓝图工厂的先决条件:

  • 以下内容 AWS 账户:

    • 用于管理企业蓝图工厂和发布产品的帐户

    • 一个或多个使用已发布产品的账户

  • 所有账户都是:

  • AWS Command Line Interface (AWS CLI),已安装配置

  • 部署用于创建以下 AWS 资源的 AWS CloudFormation 堆栈的权限:

    • Amazon Log CloudWatch s 日志组

    • AWS CodePipeline 管道

    • AWS CodeBuild 项目

    • Amazon EventBridge 活动总线政策和规则

    • AWS Identity and Access Management (IAM) 角色和策略

    • AWS Key Management Service (AWS KMS) 密钥和密钥策略

    • AWS Service Catalog 产品组合、产品和预配置产品

    • 亚马逊简单通知服务 (Amazon SNS) Service 主题、主题政策和订阅

    • Amazon Simple Storage Service (Amazon S3) 存储桶

    • AWS Systems Manager 参数存储参数

    有关设置这些权限的更多信息,请参阅CloudFormation 文档实施最低权限策略。 AWS CloudFormation

  • 一个 GitHub 账户

最佳实践

我们建议您在 AWS 环境中设置企业蓝图工厂时遵循以下最佳实践:

  • 配置部署企业蓝图工厂所需的权限时,请遵循最低权限原则并授予所需的最低权限。有关更多信息,请参阅 IAM 文档中的授予最低权限安全最佳实践

  • 配置对 Service Catalog 组合的访问权限时,请遵循最低权限原则,仅向特定角色、用户或管理员授予访问权限。遵循 Service Catalog 的安全最佳实践

创建存储库

本节将帮助您为企业蓝图工厂设置配置存储库和产品存储库。要设置存储库,请将提供的存储库分叉进去 GitHub。然后,您可以使用创建 AWS CodeConnections 与存储 GitHub 库的连接。然后,将 GitHub 存储库克隆到本地计算机。

分叉 GitHub 存储库
  1. 登录 GitHub

  2. 导航到配置 GitHub 存储库存储库

  3. 选择 “分叉”。

  4. 在 “创建新分支” 页面上,在 “存储库名称” 框中输入ServiceCatalog-ConfigRepo

  5. (可选)输入描述。

  6. 选择 “仅复制主分支”。

  7. 选择 “创建分叉”。

  8. 重复这些步骤来分叉代码存储 GitHub 库。输入此存储库ServiceCatalog-CodeRepo的名称。

  9. 重复这些步骤来分叉产品存储 GitHub 库。输入此存储库ServiceCatalog-BlueprintProductRepo的名称。

创建 CodeConnections 连接
  1. 在 AWS CLI 中,输入以下命令以创建 CodeConnections 与的连接 GitHub:

    aws codeconnections create-connection --provider-type GitHub --connection-name <MyConnection>
  2. 使用 AWS 开发者工具控制台完成连接。有关更多信息,请参阅更新挂起的连接

克隆分叉存储库
  • 输入以下命令将 GitHub 存储库克隆到本地工作站:

    git clone git@github.com:<user>/aws-enterprise-blueprint-factory-config-repo ServiceCatalog-ConfigRepo git clone git@github.com:<user>/aws-enterprise-blueprint-factory-blueprint-repo ServiceCatalog-BlueprintProductRepo git clone git@github.com:<user>/aws-enterprise-blueprint-factory-code-repo ServiceCatalog-CodeRepo

设置企业蓝图工厂

本节中的说明描述了如何在目标账户中设置企业蓝图工厂。您从中克隆的产品存储库 GitHub 包含两个示例 CloudFormation 模板,BP-S3和。BP-SNS按照这些说明操作,您可以将这两个示例蓝图作为产品部署在 Service Catalog 中。

要设置角色
  1. 在蓝图开发者的账户中,创建以下信任策略,然后将其另存为sc-enduserrole-trust-policy.json

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ServiceCatalogEndUserRole" }, "Action": "sts:AssumeRole" } }
  2. 输入以下命令创建 ServiceCatalogEndUserRole IAM 角色:

    aws iam create-role \ --role-name ServiceCatalogEndUserRole \ --assume-role-policy-document file://sc-enduserrole-trust-policy.json aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess \ -- role-name ServiceCatalogEndUserRole
    注意

    开发人员使用该ServiceCatalogEndUserRole角色来配置 Service Catalog 产品。此角色不需要权限即可创建蓝图中定义的资源。这遵循了最低特权权限和职责分工的最佳实践。

  3. 创建以下信任策略,然后将其另存为sc-launchconstraintrole-trust-policy.json

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  4. 输入以下命令创建 ServiceCataloglogLaunchConstraintRole IAM 角色:

    aws iam create-role \ --role-name ServiceCataloglogLaunchConstraintRole \ --assume-role-policy-document file://sc-launchconstraintrole-trust-policy.json aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonSNSFullAccess \ --role-name ServiceCataloglogLaunchConstraintRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AWSCloudFormationFullAccess \ --role-name ServiceCataloglogLaunchConstraintRole
  5. ServiceCataloglogLaunchConstraintRole IAM 角色添加以下策略。包括产品资源所需的任何其他权限,如 Service Catal og 文档中的配置启动角色中所述:

    { "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":"*", "Condition":{ "StringEquals":{ "s3:ExistingObjectTag/servicecatalog:provisioning":"true" } } ] }
    注意

    Service Catalog 使用此角色将 CloudFormation 堆栈作为产品部署到服务目录中。此角色的信任策略确保只有 Service Catalog 可以担任该角色。其他用户或服务不能担任此角色。这遵循了职责分离的最佳做法。

  6. 创建以下信任策略,然后将其另存为sc-codebuild-trust-policy.json

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  7. 输入以下命令创建 codebuild-servicecatalog-admin-role IAM 角色:

    aws iam create-role \ --role-name codebuild-servicecatalog-admin-role \ --assume-role-policy-document file://sc-codebuild-trust-policy.json aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess \ --role-name codebuild-servicecatalog-admin-role
    注意

    配置管道中的 CodeBuild 作业使用此角色。

设置 Amazon S3 存储桶
要设置 AWS Systems Manager 参数
  • 按照在 S ystems Manager 中创建参数库参数中的说明创建下表中的 Systems Manager 参数。这些参数用于部署配置管道的 CloudFormation 模板中。

    参数名称 类型 说明
    /blueprints/resources/vpc_id 字符串 存储目标虚拟私有云 (VPC) ID 的参数。
    /blueprints/resources/subnets StringList 存储目标子网 IDs 的参数。
    /blueprints/resources/securitygroups StringList 存储目标安全组 IDs 的参数。
    /blueprints/resources/artifacts-bucket-name 字符串 用于存储用于项目的 Amazon S3 存储桶名称的 CodePipeline参数。
    /blueprints/resources/BlueprintRepo 字符串 用于存储企业蓝图工厂蓝图蓝图的存储 GitHub 库的参数。默认值为 <user>/aws-enterprise-blueprint-factory-blueprint-repo
    /blueprints/resources/CodeRepo 字符串 用于存储存储企业蓝图工厂配置管道代码和代码的存储 GitHub 库的Bootstrapping-Admin-Product参数。默认值为 <user>/aws-enterprise-blueprint-factory-code-repo
    /blueprints/resources/ConfigRepo 字符串 用于存储存储企业蓝图工厂配置文件的存储 GitHub 库的参数。默认值为 <user>/aws-enterprise-blueprint-factory-config-repo
更新 CloudFormation 模板
  1. 在代码存储库 (ServiceCatalog-CodeRepo) 中,打开 ServiceCatalog-pipeline .yml 文件。

  2. 编辑此文件中以下参数的默认值:

    • ConfigRepositoryName是 Systems Manager 参数,用于存储企业蓝图工厂配置文件的存储 GitHub库。默认值为 /blueprints/resources/ConfigRepo

    • CodeRepositoryName是 Systems Manager 参数,用于存储存储企业蓝图工厂配置管道代码和Bootstrapping-Admin-Product代码的存储 GitHub 库。默认值为 /blueprints/resources/CodeRepo

    • BlueprintRepositoryName是 Systems Manager 参数,用于存储企业蓝图工厂蓝图蓝图的存储 GitHub库。默认值为 /blueprints/resources/BlueprintRepo

    • BranchName是存储配置文件的配置存储库的分支。默认值为 main

    • VPCID是存储目标 VPC 的 ID 的 Systems Manager 参数。默认值为 /blueprints/resources/vpc_id

    • Subnets是 Systems Manager 参数, IDs 用于存储目标子网的。默认值为 /blueprints/resources/subnets

    • SecurityGroupIds是 Systems Manager 参数,用于存储目标安全组的。 IDs 默认值为 /blueprints/resources/securitygroups

    • IamRoleName是 CodeBuild 任务使用的 IAM 角色的名称。 默认值为codebuild-servicecatalog-admin-role

    • EnvironmentType是您部署企业蓝图工厂的环境。默认值为 DEV

    • ArtifactBucket是 Systems Manager 参数,用于存储存储工件的 Amazon S3 CodePipeline 存储桶。 默认值为/blueprints/resources/artifacts-bucket-name

    • CodeConnectionArn是与的 CodeConnections连接的亚马逊资源名称 (ARN)。 GitHub

  3. 保存并关闭 ServiceCatalog-pipelin e.yml 文件。

  4. 输入以下命令将更改合并到代码存储库中:

    cd ServiceCatalog-CodeRepo git add ServiceCatalog-Pipeline.yml git commit -m "<description of change>" git push origin main
  5. 在配置存储库 (ServiceCatalog-ConfigRepo) 中,打开 bp_c onfig.yml 文件。

  6. 根据您的组织需要更新投资组合部分中的值。例如,更新portfolio_access_rolesshare_to_ou属性。有关更多信息,请参阅本指南中的配置文件

  7. 保存并关闭 bp_ config.yml 文件。

  8. 输入以下命令将更改合并到代码存储库中:

    cd ServiceCatalog-ConfigRepo git add bp_config.yml git commit -m "<description of change>" git push origin main
部署 CloudFormation 堆栈
  1. 登录企业蓝图工厂管理帐户。

  2. 切换到具有管理权限的 IAM 角色。

  3. 打开 CloudFormation 管理控制台

  4. 在屏幕顶部的导航栏上,选择目标 AWS 区域。

  5. 堆栈页面,选择右上角的堆栈,然后选择使用新资源(标准)

  6. 对于 Prepare template(准备模板),选择 Template is ready(模板就绪)。

  7. 指定模板下,选择上传模板文件

  8. 选择 “选择文件”,导航到该文件ServiceCatalog-CodeRepo夹,然后选择 ServiceCatalog-pip eline.yml。

  9. 选择下一步继续操作并验证模板。

  10. 堆栈名称中,输入堆栈的名称。

  11. 在 “参数” 部分中,请勿更改默认值。

  12. 选择下一步

  13. 配置堆栈选项页面上,不要更改默认值,然后选择下一步

  14. 查看并创建页面上,验证模板和堆栈详细信息,然后选择提交

  15. 监控堆栈部署的进度。有关更多信息,请参阅 CloudFormation 文档

  16. 等待状态更改为CREATE_COMPLETE

验证部署
  1. 打开 AWS Service Catalog 管理控制台

  2. 在导航窗格中,选择产品

  3. 确认产品列表中是否有 ServiceCatalog-Pipelin e。

  4. 打开 AWS CodePipeline 管理控制台

  5. 名称中,选择配置管道。默认情况下,管道名称为ServiceCatalog-Pipeline

  6. 选择 View history (查看历史记录)

  7. 查看管道的状态和阶段执行。有关状态的更多信息,请参阅 CodePipeline 文档中的查看执行状态

  8. 等到配置管道的状态变为Succeeded

  9. 打开 S ervice Catalog 控制台

  10. 在导航窗格中,选择产品

  11. 确认 BP-s3 产品和 b p-SNS 产品产品可用。这表示示例蓝图的产品发布管道已成功完成。

  12. 如果要删除在设置企业蓝图工厂时部署的示例蓝图,请按照删除蓝图中的说明进行操作。

删除企业蓝图工厂

如果您不使用企业蓝图工厂,则可以将其删除以停止产生与其 AWS 资源相关的成本。

删除 资源
  1. 输入以下命令以删除部署在企业蓝图工厂管理账户中的 IAM 角色:

    aws iam detach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess \ --role-name ServiceCatalogEndUserRole aws iam delete-role --role-name ServiceCatalogEndUserRole aws iam detach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonSNSFullAccess \ --role-name ServiceCataloglogLaunchConstraintRole aws iam delete-role --role-name ServiceCataloglogLaunchConstraintRole
  2. 删除企业蓝图工厂的 CloudFormation 堆栈。有关说明,请参阅从 CloudFormation 控制台删除堆栈从中删除堆栈 AWS CLI

  3. 删除用于存储项目的 Amazon S3 存储 CodePipeline 桶。有关说明,请参阅 Amazon S3 文档中的删除存储桶

  4. 从参数存储中删除以下 Systems Manager 参数:

    • /blueprints/resources/vpc_id

    • /blueprints/resources/subnets

    • /blueprints/resources/securitygroups

    • /blueprints/resources/artifacts-bucket-name

    • /blueprints/resources/BlueprintRepo

    • /blueprints/resources/CodeRepo

    • /blueprints/resources/ConfigRepo

    有关说明,请参阅 Systems Manager 文档中的从参数存储中删除参数