Amazon Web Services ブログ

新機能 – AWS Control Tower Account Factory for Terraform

AWS Control Tower を使用すると、セキュアなマルチアカウント AWS 環境を簡単にセットアップおよび管理できます。AWS Control Tower は、AWS Organizations を使用して、いわゆるランディングゾーンを作成し、数千のお客様との協業経験に基づいて継続的なアカウント管理とガバナンスを実現します。

AWS CloudFormation を使用してインフラストラクチャをコードとして管理する場合は、AWS Control Tower のカスタマイズを使用して AWS Control Tower のランディングゾーンをカスタマイズできます。このソリューションは、カスタムテンプレートとポリシーを個々のアカウントと組織内の組織単位 (OU) にデプロイするのに役立ちます。

しかし、Terraform を使用して AWS インフラストラクチャを管理するとどうなるでしょうか。

2021 年 11 月 29 日(米国時間)より、AWS Control Tower Account Factory for Terraform (AFT) を提供できるようになりました。これは AWS Control Tower チームが管理する新しい Terraform モジュールで、デプロイパイプラインを使用して Terraform で AWS アカウントをプロビジョニングおよびカスタマイズできます。開発パイプラインのソースコードは、AWS CodeCommitGitHubGitHub Enterprise、または BitBucket に保存できます。AFT では、生産性を高めるために必要なすべてのリソースにアクセスできる、完全に機能するアカウントの作成を自動化できます。このモジュールは、Terraform オープンソースTerraform Enterprise、および Terraform Cloud と連携して動作します。

アーキテクチャ図。

ここからは、実際にどのように機能するのかを見ていきましょう。

AWS Control Tower Account Factory for Terraform の使用
まず、AWS Control Tower Account Factory for Terraform (AFT) モジュールを使用する main.tf ファイルを作成します。

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
}

最初の 6 つのパラメータは必須です。前提条件として、AWS 組織の次の 4 つの AWS アカウントの ID を渡す必要があります。

  • ct_management_account_id – AWS Control Tower 管理アカウント
  • log_archive_account_id – ログアーカイブアカウント
  • audit_account_id – 監査アカウント
  • aft_management_account_id – AFT 管理アカウント

次に、2 つの AWS リージョンを渡す必要があります。

  • ct_home_region – このモジュールが実行されるリージョン。AWS Control Tower がデプロイされているリージョンと同じリージョンである必要があります。
  • tf_backend_secondary_region – バックエンドプライマリリージョンは AFT リージョンと同じです。このパラメータは、レプリケート先のセカンダリリージョンを定義します。AFT は、自身の状態を追跡するためのバックエンドを作成します。また、Terraform では、オープンソースバージョンを使用する場合にも使用されます。

その他のパラメータはオプションで、次のように、前述の main.tf ファイルのデフォルト値に設定されています。

  • terraform_distribution – Terraform のオープンソース (デフォルト)、Enterprise、Cloud のいずれかを選択します
  • 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 Plan がある場合)。

まず、プロジェクトを初期化し、プラグインをダウンロードします。

terraform init

次に、 を使用して AWS Control Tower 管理アカウントでログインし、デプロイを開始します。

terraform apply

はいで確認し、しばらくするとデプロイが完了します。

ここで、AWS SSO をもう一度使用して AFT 管理アカウントでログインします。AWS CodeCommit コンソールには、AFT で作成したアカウントをカスタマイズするために使用できる 4 つのリポジトリがあります。

コンソールのスクリーンショット。

これらのリポジトリは、 AWS CodePipeline が管理するパイプラインでアカウント作成を自動化するために使用されます。

現在、これら 4 つのリポジトリはすべて空です。まず、AFT Terraform モジュールの GitHub リポジトリ中の sources/aft-customizations-repos フォルダにあるコードを使用します。

aft-account-request リポジトリの例を使用して、いくつかの AWS アカウントを作成するためのテンプレートを用意します。2 つのアカウントのうちの 1 つはソフトウェアデベロッパー用です。

ソフトウェアデベロッパーの生産性を迅速に高めるために、特定のアカウントカスタマイズを作成します。テンプレートでは、account_customizations_name というパラメータを developer-customization と同じ値に設定しています。

次に、aft-account-customizations リポジトリに、developer-customization フォルダを作成します。このフォルダに Terraform テンプレートを配置して、そのタイプの新しいアカウント用の AWS Cloud9 EC2 ベースの開発環境を自動的に作成します。オプションで、Python コードでこれを拡張して、例えば内部または外部 API を呼び出すことができます。このアプローチを使用すると、ソフトウェアデベロッパーの新規アカウントはすべて、デリバリーパイプラインを通過するにつれて開発環境の準備が整います。

変更をメインブランチにプッシュします (最初にaft-account-customizations リポジトリ、次に aft-account-request)。これにより、パイプラインの実行がトリガーされます。数分後、2 つの新しいアカウントを使用する準備が整います。

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

原文はこちらです。