AWS ControlTowerのカスタマイズ(CfCT)がルートとネストされたOUをサポートしたのでやってみた
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ヶ月弱で対応してくれました。今後も継続的にサポートしてくれると思うので、どんどん活用していきたいですね。