亚马逊AWS官方博客

新增 – AWS Control Tower Account Factory for Terraform

借助 AWS Control Tower,您可以更轻松地设置和管理安全的多账户 AWS 环境。AWS Control Tower 使用 AWS Organizations 创建所谓的登录区,根据我们与数千名客户合作的经验,实现持续的账户管理和监管。

如果您使用 AWS CloudFormation 将基础设施作为代码进行管理,则可以使用 Customizations for AWS Control Tower(适用于 AWS Control Tower 的自定义项目)自定义 AWS Control Tower 登录区,该解决方案可帮助您将自定义模板和策略部署到单个账户和企业内的组织单位 (OU)。

但是,如果您使用 Terraform 管理您的 AWS 基础设施怎么办?

我很高兴分享 AWS Control Tower Account Factory for Terraform (AFT) 的可用性,这是一个由 AWS Control Tower 团队维护的新 Terraform 模块,允许您使用部署管道通过 Terraform 预置和自定义 AWS 账户。开发管道的源代码可以存储在 AWS CodeCommitGitHubGitHub EnterpriseBitBucket 中。借助 AFT,您可以自动创建功能齐全的账户,这些账户可以访问提高工作效率所需的所有资源。该模块可与 Terraform 开源Terraform 企业Terraform 云配合使用。

架构图。

我们来看看这些步骤的实际操作。

使用 AWS Control Tower Account Factory for Terraform
首先,我创建一个 main.tf 文件,以使用 AWS Control Tower Account Factory for Terraform (AFT) 模块:

module "aft" {
  source = "git@github.com:aws-ia/terraform-aws-control_tower_account_factory.git"

  # Required Parameters
  ct_management_account_id    = "123412341234"
  log_archive_account_id      = "234523452345"
  audit_account_id            = "345634563456"
  aft_management_account_id   = "456745674567"
  ct_home_region              = "us-east-1"
  tf_backend_secondary_region = "us-west-2"

  # Optional Parameters
  terraform_distribution = "oss"
  vcs_provider           = "codecommit"

  # Optional Feature Flags
  aft_feature_delete_default_vpcs_enabled = false
  aft_feature_cloudtrail_data_events      = false
  aft_feature_enterprise_support          = false
}

前六个参数是必需的。作为先决条件,我需要传递我的 AWS 组织中四个 AWS 账户的 ID:

  • ct_management_account_id – AWS Control Tower management account
  • log_archive_account_id – Log Archive account
  • audit_account_id – Audit account
  • aft_management_account_id – AFT management account

然后,我必须通过两个 AWS 区域

  • ct_home_region – 将从中执行此模块的区域。这必须是部署 AWS Control Tower 的同一区域。
  • tf_backend_secondary_region – 后端主区域与 AFT 区域相同。此参数定义要复制到的辅助区域。AFT 为自己的状态创建了一个后端,以进行状态跟踪。在使用开源版本时,它也用于 Terraform。

其他参数是可选的,在之前的 main.tf 文件中设置为其原定设置值:

  • terraform_distribution – 在 Terraform 开源(原定设置)、企业或云之间进行选择
  • vcs_provider – 在 AWS CodeCommit(原定设置)、GitHub、GitHub Enterprise 或 BitBucket 之间选择控制系统要使用的版本。

默认情况下,这些功能标志处于禁用状态,除非您想启用它们,否则可以省略:

  • aft_feature_delete_default_vpcs_enabled – 自动删除新账户的原定设置 VPC
  • aft_feature_cloudtrail_data_events – 为新账户启用 AWS CloudTrail 数据事件。请注意,此选项通常是在高度监管的环境中实现合规性所必需的,可能会影响您的成本。
  • aft_feature_enterprise_support – 自动向 Enterprise Support 注册新账户(如果您有 Enterprise Support 计划)。

首先,我初始化项目并下载插件:

terraform init

然后,我使用 AWS Single Sign-On 通过 AWS Control Tower 管理账户登录并开始部署:

terraform apply

我确认,过了一段时间,部署就完成了。

现在,我再次使用 AWS SSO 通过 AFT 管理账户登录。在 AWS CodeCommit 控制台中,我找到了四个存储库,可用于自定义使用 AFT 创建的账户。

控制台屏幕截图。

AWS CodePipeline 管理的管道使用这些存储库来自动创建账户:

  • xaft-account-request – 我在这里请求由 AFT 预置和管理的账户。
  • aft-global-customizations – 我可以使用此存储库以客户定义的资源自定义所有已预置的账户。这些资源可以通过 Terraform 或通过 Python 创建。
  • aft-account-customizations – 在这里,我可以根据 aft-account-request 存储库中 account_customizations_name 参数的值自定义预置的账户。通过这种方式,我可以根据账户会为之使用的角色创建不同的自定义项目集。
  • aft-account-provisioning-customizations – 此存储库使用 AWS Step Functions 自定义新账户的预置流程,并简化与其他环境的集成。状态机可以使用 AWS Lambda 函数、Amazon Elastic Container Service (Amazon ECS)AWS Fargate 任务、托管在 AWS 或本地部署的自定义活动,或 Amazon Simple Notification Service (SNS)Amazon Simple Queue Service (SQS) 与外部应用程序进行通信。

目前,这四个存储库都是空的。首先,我使用 AFT Terraform 模块 GitHub 存储库中 sources/aft-customizations-repos 文件夹中的代码。

使用 aft-account-request 存储库中的示例,我准备了一个模板来创建几个 AWS 账户。两个账户的其中之一是针对软件开发人员的。

为了帮助软件开发人员快速提高工作效率,我创建了特定的账户自定义项目。在模板中,我将参数 account_customizations_name 设置为等于 developer-customization

然后,在 aft-account-customizations 存储库中,我创建了 developer-customization 文件夹,在其中放置了 Terraform 模板以自动为该类型的新账户创建基于 AWS Cloud9 EC2 的开发环境。或者,我可以使用我的 Python 代码对其进行扩展,例如,调用内部或外部 API。使用这种方法,软件开发人员的所有新账户都将在通过交付管道时准备好其开发环境。

我将更改推送到分支(首先是 aft-account-customizations 存储库,然后是 aft-account-request)。这将触发管道的执行。几分钟后,这两个新账户就可以使用了。

您可以根据自己的独特要求自定义 AFT 创建的账户。例如,您可以为每个账户提供自己的特定安全设置(例如 IAM 角色或安全组)和存储空间(例如,预先配置的 Amazon Simple Storage Service (Amazon S3) 存储桶)。

可用性和定价
AWS Control Tower Account Factory for Terraform (AFT) 可以在 AWS Control Tower 可用的任何区域工作。使用 AFT 不会产生额外费用。您需要为解决方案使用的服务付费。例如,当您设置 AWS Control Tower 时,您会开始为设置登录区和强制性防护机制而配置的 AWS 服务付费。

在构建此解决方案时,我们与 HashiCorp 合作。HashiCorp 联合创始人兼 CTO Armon Dadgar 告诉我们:“管理拥有成百上千用户的云环境可能是一个复杂而耗时的过程。使用集成 Terraform 和 AWS Control Tower 的软件交付管道,可以更轻松地在所有账户中达成一致的监管和合规性要求。”

该管道提供了一个账户创建过程,该过程可以监控账户预置何时完成,然后触发其他 Terraform 模块以通过进一步的自定义项目来提升账户。您可以将管道配置为使用自己的自定义 Terraform 模块,或者从预发布的 Terraform 模块中选择常见产品和配置。

使用 AWS Control Tower Account Factory for Terraform 简化和标准化 AWS 账户创建。

Danilo