AWS Control TowerのセットアップでハマったKMS権限エラーの解決策
はじめに
AWS Control Towerのセットアップ中、KMS(Key Management Service)の権限不足が原因でCloudFormationスタックのデプロイに失敗するエラーについて解説します。
この問題の解決策は、AWS公式ドキュメントにKMSキーポリシーの修正方法が記載されています。しかし、実際にエラーから復旧するためには、ドキュメントに明記されていないCloudFormationスタックの手動削除が必要でした。
本記事では、このエラーの再現から、CloudFormationのスタックをクリーンアップし、セットアップを再実行するまでの具体的な手順を解説します。同じ問題に直面している方の助けになれば幸いです。
対象者
AWS Contorol Towerのセットアップで、KMS 暗号化のオプションを有効にした場合
AWS Contorol Towerとは?
公式ドキュメントはこちらです。

AWS Control Towerは、マルチアカウント環境をAWSのベストプラクティスに基づいて自動でセットアップしてくれるサービスです。通称「ランディングゾーン」と呼ばれる、安全で管理しやすい基盤を迅速に構築できます。
発生したエラー
今回のセットアップ中に、以下のエラーメッセージが表示されました。

AWS Contorol Tower はランディングゾーンを完全に設定できませんでした。AWS Contorol Tower failed to deploy stack(s): [arnの値].To continue, review the failed stack(s) and try aganin.
このメッセージだけでは原因が特定しづらいですね。そこで、詳細なエラー原因を特定するため、AWS CloudFormationのコンソールを確認することにしました。
AWS CloudFormationの対応
AWS Control Towerは、内部で複数のAWS CloudFormationスタックを実行してリソースをプロビジョニングしています。
エラーログをたどっていくと、スタックのデプロイ失敗ログの中に以下の記述を見つけました。

スタックログを詳しく確認した結果、Key Management Service (KMS)へのアクセス権限が不足していることが判明しました。
このエラーは、AWS Control Towerのセットアップ時にKMS暗号化オプションを有効にしている場合に発生する可能性があります。AWS Control Towerが、新しく作成したKMSカスタマーキーにアクセスする権限がなかったため、必要なリソースを作成できずにデプロイが失敗していました。
解決策:KMSキーの権限修正とAWS CloudFormationスタックの削除
この問題を解決するには、失敗したAWS CloudFormationスタックをクリーンアップし、KMSキーの権限ポリシーを修正してから、AWS Control Towerのセットアップを再実行する必要があります。
ステップ1: 失敗したAWS CloudFormationスタックを削除する
AWS CloudFormationコンソールに移動し、失敗したスタックを特定して削除します。
スタックアクションから削除をすると、削除の進行中になり、削除が完了します。

Control Towerは、一度失敗したスタックを自動でクリーンアップしないため、手動で削除する必要があります。これにより、次のセットアップ実行時に新しいスタックが作成できるようになります。
ステップ2: KMSキーポリシーを修正する(もしくはKMS 暗号化のオプションを有効にしない場合は不要)
エラーの原因となったKMSキーのポリシーに、AWS ConfigとAWS CloudTrailのポリシーを追加します。
また、KMSキーが条件を満たしているかも確認しておきましょう。
具体的な修正内容とKMSキーの作成条件は、下記の公式ドキュメントに記載されています。
ステップ3: AWS Control Towerのセットアップを再実行する
KMSキーの権限を修正し(もしくはKMS 暗号化のオプションを有効にしない)、AWS CloudFormationスタックを削除したら、再度AWS Control Towerのセットアップを実行します。

今回は、権限エラーが発生することなく、正常にセットアップが完了するはずです。
まとめ
AWS Control Towerのような自動化されたサービスでは、エラーメッセージがシンプルすぎて原因特定が難しい場合があります。今回のケースでは、AWS CloudFormationのスタックログを詳細に確認することで、KMSの権限不足という根本原因にたどり着き、AWS CloudFormationのスタックを削除することでセットアップの再実行が完了できました。
公式ドキュメントから見つけるのが難しいリカバリーでしたが、同じ事象で困っているかたの役に立てばと思います。
Discussion