[アップデート] AWS Control Tower の Account Factory Customization (AFC) で Terraform が利用可能に

AWS Control Tower x Terraform ユーザーへの新たな選択肢!
2023.07.07

どうも、ちゃだいん(@chazuke4649)です。

(ちょっと前のアップデートだけど)
AWS Control Tower の Account Factory Customization (AFC) で Terraform が利用可能になりました。

Single Region Terraform support now available for AWS Control Tower Account Factory

リリースノートにも書かれています。

Terraform support for Account Factory Customization | Release notes | AWS Control Tower

公式ドキュメントの該当にも、Terraform利用時の考慮事項が追記されています。

Customize accounts with Account Factory Customization (AFC) - AWS Control Tower

つまりどういうこと?

re:Invent 2022にて発表されたAFCですが、今までは CloudFormationベースのService Catalog製品しかAFCでは利用することができませんでした。

それが先日、Service Catalog自体がTerraformベースの製品を登録・起動できるようになったのを受けて、さらに今回AFC経由でもTerraformベースのService Catalog製品が利用できるようになりました。

AWS Control Tower x Terraform ユーザーに新しい選択肢が追加されたということですね!

やってみる

1. TerraformベースのService Catalog製品を起動できる状態にする

Service Catalogのポートフォリオや製品の管理は、Control Tower管理アカウントではなく、別のメンバーアカウントに管理権限を委任する方針がベストプラクティスなので、まず委任先のAWSアカウントを決定します。

そして、そのService Catalog管理アカウントにて、Terraformベースの製品が利用できる状態にするためのセットアップを行います。

詳細は以下ブログや、公式情報をご覧ください。本ブログでは割愛します。

具体的なToDoとしては以下となります

  • 1-1.[Service Catalog管理アカウント側]Terraform Reference Engine(TRE)のプロビジョニング
  • 1-2.[Service Catalog管理アカウント側]サンプル製品の登録
  • 1-3.[Service Catalog管理アカウント側]ポートフォリオへの登録
  • 1-4.[Service Catalog管理アカウント側]テストとして製品を起動してみる

特に1つ目のToDoは、Service CatalogにてTerraformベースの製品固有で必要なセットアップになるのでご注意ください。

最終的には以下のように TERRAFORM_OPEN_SOURCE 製品タイプの製品が、ポートフォリオに登録された状態になります。

2. AFCを利用可能な状態にする

続いて、Terraform版に関わらず、AFC自体を利用可能にするためのセットアップも存在します。

詳細は以下ブログや、公式情報をご覧ください。本ブログでは割愛します。

具体的なToDoとしては以下となります

  • 2-1.[Service Catalog管理アカウント側]Service Catalogの信頼されたアクセスを有効化する
  • 2-2.[Control Tower管理アカウント側]Service Catalog管理を委任する
  • 2-3.[Service Catalog管理アカウント側]AWSControlTowerBlueprintAccess IAMロールを作成する

補足)2-3.[Service Catalog管理アカウント側]AWSControlTowerBlueprintAccess IAMロールを作成する

先述のブログではCloudFormation StackSetsによって、Service Catalog管理アカウントに当該IAMロールを作成する方法が紹介されています。

それ以外の方法としては、「Control Tower管理アカウント から Service Catalog管理アカウントの AWSControlTowerExecutionロールへ スイッチロールし、IAMロールを作成する といった方法もあります。(今回自分はスイッチロールする方法でやりました)

また、作成するAWSControlTowerBlueprintAccessIAMロールのアクセスポリシーについて、当該ロールのポリシーをカスタムポリシーで作成する場合は、Terraformベース製品のために追加の権限が必要と書かれています。

Additional permissions required for creating a Terraform-based Service Catalog product 

ただ、こちらは(上記に言及されている通り)AWS管理ポリシー AWSServiceCatalogAdminFullAccess をアタッチすれば気にする必要はなさそうです。

3. 既存アカウントにてAFCを適用する

準備が整ったので、既存アカウントにTerraformベースの製品をAFC経由で登録する更新を行います。

Control Towerコンソールからカスタマイズしたいメンバーアカウントを選択し、「アカウントの更新」を押します。

更新画面の下の方に、オプションとしてAFCのセクションがあるので、以下の通り入力します。

ここで、2.の作業が正常に行えていれば Service Catalog管理アカウントID入力後に、「アカウントの検証」を行うと、当該アカウントにて登録されている製品の一覧が表示されるはずです。

諸々入力し、「アカウントの更新」を実行します。

更新が終わるまでしばらく待って、コンソールを確認すると、更新が完了しており、AFCの情報(正確にはブループリントの情報)が追加されていることが確認できました。

実際にターゲットのAWSアカウント(111111111111)へ移動し、S3コンソールを見てみると、該当のS3バケットが作成されていることが確認できました。

検証は以上です。

終わりに

TerraformがサポートされたAFCを試してみました。

事前準備にそこそこかかりますが、T新規や既存のAWSアカウントにTerraformコードで記述されたアカウントベースラインの設定を配布をマネージドで実現する方法として、1つの選択肢になりそうです。使っていきましょう!

それでは今日はこの辺で。ちゃだいん(@chazuke4649)でした。