この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Control Towerのカスタマイズソリューション(CfCT)がネストOUとRootに対応したようなので、早速試してみました。
アップデートの経緯
これまではControl Tower自体がOUをネストして配置できなかったため、フラットなOU構成をとらなければいけなかったのですが、以下のアップデートでネストしたOU構成が可能となりました。
[アップデート] AWS Control Tower で入れ子構造の OU を利用できる様になりました | DevelopersIO
元々Control TowerでネストしたOUの構成が取れなかったので、CfCT側でも同様にネストしたOUに対しては実行できませんでした。それがControl Towerのアップデートが行われたため、追いついた形で利用できるようになったわけです。それと合わせてRoot(全アカウント)への実行も対応しています。
やってみる
それではCfCTでネストされたOUに対してCloudFormationスタックを展開してみます。(CfCTの展開方法については割愛します。)今回はCloudFormationスタックの展開のみを行いますが、SCPの展開も同じように可能です。
OU構成は以下の通りです。devOUに対してアカウントを配置して、CloudFormationテンプレートをCfCTから展開してみます。
Root
├ Security
└ Sandbox
└ dev
CfCTの更新
私の環境では既にCfCTが展開済みだったので、新しいバージョン(v2.2.0)へCfCTのスタックをアップデートします。
CloudFormationスタックの一覧からCustomizationsForCTSolution
を選択して更新をクリックします。
既存のテンプレートを置き換えるをクリックして、テンプレートはS3のURLを入力します。入力するURLは以下の通りです。
https://s3.amazonaws.com/solutions-reference/customizations-for-aws-control-tower/latest/custom-control-tower-initiation.template
その他の項目はデフォルトで大丈夫なので、そのまま更新します。
スタックのステータスがUPDATE_COMPLETEになっていること、説明のバージョンがv2.2.0になっていることを確認しましょう。
CfCTの構成
次にCfCTで展開するCloudFormationテンプレートと定義するマニフェストファイルですが、以下のような単純なフォルダ構成です。
.
├ manifest.yaml
└ template
└ describe-regions-iam-role.yaml
CloudFormationテンプレート(describe-regions-iam-role.yaml)
IAMロールを展開するだけのテンプレート。
Resources:
TestLambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Path: /
Policies:
- PolicyName: DescribeRegions
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- ec2:DescribeRegions
Resource: "*"
マニフェストファイル(manifest.yaml)
---
region: ap-northeast-1 # Control Tower Home Region
version: 2021-03-15
resources:
- name: describe-regions-iam-role
description: Control Tower Custom CloudFormation Resources - Create IAM Role
resource_file: template/describe-regions-iam-role.yaml
deploy_method: stack_set
deployment_targets:
organizational_units:
- Sandbox:dev
regions:
- ap-northeast-1
ネストされたOUを対象にする場合、親OU:子OU
という形式で記述します。
上記のフォルダ構成をCfCTのリポジトリにプッシュします。
動作確認
用意したフォルダをCodeCommitへプッシュすると、CodePipelineが動き始めます。パイプラインが完了するまでしばらく待ちましょう。
ここでCfCTが古いバージョン(v2.1.0以下)のまま進めてしまうと、パイプラインは成功となりますがネストされたOU内のアカウントにはスタックが作成されません。注意しましょう。
パイプラインが完了したら、devOU配下のアカウントにログインしてCloudFormationスタックを確認してみると、問題なくCfCTから展開されていることが確認できました。
実行先をRootにしてみる
Rootにも対応してるみたいなので、実行対象をRootに変更して実行してみます。
マニフェストファイル(manifest.yaml)
---
region: ap-northeast-1 # Control Tower Home Region
version: 2021-03-15
resources:
- name: describe-regions-iam-role
description: Control Tower Custom CloudFormation Resources - Create IAM Role
resource_file: template/describe-regions-iam-role.yaml
deploy_method: stack_set
deployment_targets:
organizational_units:
- Root
regions:
- ap-northeast-1
上記のようにマニフェストファイルを書き換えて実行すると、Root配下全てのアカウントに対して実行されます。そのため、Sandbox OUだけでなくSecurity OU含めた全てのアカウントにIAMロールが作成されました。全てのアカウントに対して実行したい場合にとても便利ですね。
まとめ
ネストされたOUとRootを対象にCfCTを実行してみました。最初はCfCTがControl Towerのアップデートにどの程度の速さで対応してくれるのか不安もありましたが、今回は2ヶ月弱で対応してくれました。今後も継続的にサポートしてくれると思うので、どんどん活用していきたいですね。