こんにちは、上野です。
本記事はAWS Community Builders Advent Calendar9日目の記事です。私は今年Community Builderになったばかりなので先輩のみなさんとこういった形で盛り上げることができて嬉しいです!
re:Invent期間中、キラキラした新サービスアップデートがたくさんありましたが、AWS Control Towerでもアップデートが入っていました。
AWS Control TowerではAccount Factoryという機能を使用して、新規AWSアカウントを作成でき、CloudTrailやConfig、Control Towerで設定されたガードレール(現在はコントロールと呼びます)が自動設定されます。
AWSアカウントの設定はAWS Service Catalogを使用して設定されるのですが、AWS Control Towerが使用するService Catalog製品に加え、ユーザ独自の製品も設定できるようになりました。Account Factory Customization (AFC)という機能になります。
何が嬉しいのか?
この機能が出るまでは、AWS Control Towerがサポートしていない設定は、AWS Control Tower外で独自に設定する必要がありました。たとえば我々NRIネットコムの事例では、以下のようにアカウント作成のイベントをEventBridgeで受け取り、StepFunctionsを実行することで独自のLambda関数処理を実行することで個別のセキュリティ設定をしています。
この事例では他にも、独自のCloudFormation StackSetsを展開しておいて、アカウントがOUに所属したタイミングで自動実行するというやり方も一部リソースでは行っています。
NRIネットコムの事例以外には、Control Towerのカスタマイズソリューションを使う方法もあります。
ここでポイントというか当たり前なところなのですが、Control Tower以外で設定したリソースはControl Tower外での管理となるため、エラー時の通知や修正対応もControl Tower外で対応しなければなりません。Control TowerのAccount Factoryは成功したけど、独自設定はエラーになったということも発生するため、エラーハンドリングは注意する必要があります。
今回新しく出たAccount Factory Customizationは、Control Towerから管理できるので処理に失敗した場合もAccount Factory上で失敗と表示されます。Control Towerの画面だけ見ておけば良いということですね。
やってみる
ドキュメントに従って実行していきます。Service Catalog製品の作成アカウントは別アカウントへ委任もできるのですが、今回はControl Towerが設定されているマネジメントアカウント上に製品を作成していきます。
今回は独自の設定として、IAM Access Analyzerのアナライザーを各アカウントで作成します。
1. IAMロールの準備
AWSControlTowerBlueprintAccessという名前のIAMロールが必要になるので作成します。
「YourManagementAccountId」にはマネジメントアカウントID、「YourControlTowerUserRole」にはマネジメントアカウントで使用するIAMロール名が入ります。私の場合はIAM Identity Center(旧AWS SSO)のユーザーを使用するので、そのIAM Role(ARN)を指定しました。
ロール名:AWSControlTowerBlueprintAccess 信頼ポリシー:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::YourManagementAccountId:role/service-role/AWSControlTowerAdmin", "arn:aws:iam::YourManagementAccountId:role/YourControlTowerUserRole" ] }, "Action": "sts:AssumeRole" } ] }
IAMポリシー:AWSServiceCatalogAdminFullAccess(マネージドポリシー)
2. Service Catalog製品の作成
以下のようにIAM Access Analyzerのアナライザーを作成するCloudFormationテンプレートを用意しておきます。
AWSTemplateFormatVersion: 2010-09-09 Resources: Analyzer: Type: 'AWS::AccessAnalyzer::Analyzer' Properties: AnalyzerName: AccountAnalyzer Type: ACCOUNT
Service Catalogの製品リストページから、新しい製品のアップロードを選択します。
作成したテンプレートをアップロードして、製品名やバージョンを入力し作成します。
製品リストに追加されました。
3. AWSアカウントを作成してみる
準備完了です。Account Factoryでアカウントを作成してみます。カスタマイズ設定も加えて。
Account Factoryのページに、カスタムアカウントファクトリというオプションメニューが増えているのでそこで先ほど作成した製品を指定します。(指定する項目がいくつかあるので、間違えないように注意)
他の項目はこれまでどおり同様に入力すればOKです。これで作成します。
しばらくするとアカウントの作成が完了します。
アカウントの詳細を見ると、今回適用したService Catalogの製品がBlueprintとして適用されていることがわかります。
実際にアカウント内の設定を見ると、アナライザーが作成されていることがわかります。
Control Tower管理外のリソースを、Account Factory経由でControl Towerの製品と同じ管理方法で設定できました。
エラーになるとどうなるのか
独自で作成したService Catalogの製品で作成エラーになった場合にどうなるのか試してみます。 アナライザーは1AWSアカウント内に複数作成できないため、すでに存在するAWSアカウントについて、Control Tower管理外の状態から登録し、独自製品のCloudFormationがエラーになるよう試してみます。
既存アカウントの登録画面でも、以下のように独自の製品が指定できるので指定して登録します。
しばらくすると以下のように登録が失敗した旨がアカウント一覧に表示されます。
アカウントの詳細ページを見ると、以下のようにAccess Analyzerのエラー内容まで表示されています。ありがたいですね。
修復してみます。今回はアナライザーが元々あったのが問題のため、元々あったアナライザーを削除します。 エラーとなったアカウント内で、アナライザーを削除後、アカウントの更新を実行します。
カスタムアカウントファクトリでは先ほどと同じ製品を指定し、アカウントの更新を行います。
しばらくするとエラーが解消され無事「登録済み」になりました!
エラー確認はControl Tower上だけで済んだので、シンプルですね。
Account Factory Customizationの制約事項
考慮事項としてAWSドキュメントに記載されています。いくつか気になるものをピックアップして記載しておきます。
- AFCで使えるService Catalogの製品は1つのみです。
AWSControlTowerBlueprintAccess
というIAMロールはこの名前で必ず必要です(手順のとおり)。このIAM Roleが無いとエラーになります。- 設定するときにホームリージョン1つまたは管理リージョンすべてを選択します。製品も1つなので、たとえば一部設定をホームリージョン、他の設定を管理リージョンみたいな設定は現状できません。
- メンバーアカウントでblueprint (デプロイされた製品)を更新すると、blueprint hub(製品を登録した) アカウント ID とService Catalog の製品を変更できなくなります。
まとめ
はい、正直地味なアップデートですねw!ただこの時期だと他のキラキラアップデートに埋もれてしまいそうなのであえて書いてみました。Control Towerはまだまだアップデートが多いサービスなので、今後にも期待しています。引き続きAWS Community Builders Advent Calendar 2022もお楽しみください!!