こんにちは。AWS CLIが好きな福島です。
- はじめに
- 結論
- ①ガードレールからコントロールへの名称変更
- ②コントロール(旧ガードレール)のカテゴリ分け
- ③「CloudFormation guard rule」という新しい実装方法であるコントロールの追加
- ③の機能を試してみた
- 終わりに
はじめに
今回は、2022/11/28と少し前のアップデートでプレビューの機能ですが、 ざっくりマルチアカウントの運用(特にアカウントの統制)を容易にしてくれるサービスであるControl Towerに関する以下のアップデートをご紹介いたします。
結論
今回のアップデートをまとめると、以下の3点かと存じます。
①Control Towerには、AWSアカウントの予防的統制や発見的統制を行うための定義として、「ガードレール」が存在しておりましたが、その名称が「コントロール」に変更された
②名称変更と伴に「コントール」がカテゴリ分けされ、見やすくなった
③「SCP」、「Config Rules」に加え、「CloudFormation guard rule」という新しい実装方法であるコントロールが追加された
以降から1つずつ詳細を記載いたします。
①ガードレールからコントロールへの名称変更
上述の通り、Control Towerには、AWSアカウントの予防的統制や発見的統制を行うための定義として、 「ガードレール」が存在しておりましたが、その名称が「コントロール」に変更されました。
また、以下の通り、コンソールの見え方も変わっており、現在はガードレールの画面は見えなくなっております。
②コントロール(旧ガードレール)のカテゴリ分け
①でコントロールの画面をお見せいたしましたが、今回のアップデートでコントロールが3つのカテゴリに分類されるようになりました。
これにより自分たちの環境で適用すべきコントロールが見つけやすくなったのではないかと存じます。 また、このカテゴリを基にAWSアカウントへどういった統制をするべきか検討するための材料にもなるではないかと存じます。
- フレームワーク
- サービス
- 統制目標
フレームワーク
サービス
統制目標
上記それぞれのカテゴリを押下することでそれらに分類されたコントロールを一覧で表示することができます。 以下は、「フレームワーク」の「NIST 800-53 Rev 5」を押下した際の画面例になります。
また、①に掲載したコントロール画面と同様ですが、左のペインで「すべてのコントロール」を押下することで名前の通り、すべてのコントロールを見ることも可能です。
③「CloudFormation guard rule」という新しい実装方法であるコントロールの追加
概要
AWSアカウントの予防的統制には「SCP」、発見的統制には「Config Rules」という機能が使われることが多く、 Control Towerのコントロール(旧ガードレール)でも、それらの2つの機能を用いた統制の定義がありました。
今回のアップデートで「SCP」、「Config Rules」に加え、「CloudFormation guard rule」という予防的統制が可能な定義が追加されました。
CloudFormation guard ruleとは
この機能は、「CloudFormation Hooks」と「CloudFormation guard rule」という機能を使った予防的統制となります。
「CloudFormation Hooks」により特定のサービスに関するスタックの作成や更新をフックし、「CloudFormation guard rule」によりデプロイするリソースへの制限をかけるイメージとなります。
例えば、S3を構築する際にブロックパブリックアクセスの設定をオフでデプロイした場合、スタックを中断するといったことができます。
また、「CloudFormation guard rule」では、上記の例のようなポリシーをコードで記述するのですが、このようにポリシーをコードで管理することをPolicy as Codeと呼ぶようです。
注意点
ここでポイントなのが、CloudFormationによるリソースのデプロイにのみ制限をかけることができるため、 マネジメントコンソールやAWS CLIを使ったリソースのデプロイには、統制を効かせられないというところです。
CloudFormationによるデプロイが徹底される環境であれば、この統制は有用かと存じますが、徹底されていなければ正しく統制を効かせられないため、注意が必要です。
③の機能を試してみた
今回は、S3のブロックパブリックアクセスをオンにする統制を効かせたいと思います。
コントロールの適用
まず、「CloudFormation guard rule」を利用するためには、「[CT.CLOUDFORMATION.PR.1] AWS CloudFormation レジストリ内のリソースタイプ、モジュール、フックの管理を禁止する」というコントロール(SCP)を適用する必要があるため、有効化します。
設定は簡単で右上の「コントロールを有効にする」を押下します。
その後、このコントロールを有効化したいOUを指定すれば設定完了です。
準備が整ったら、「[CT.S3.PR.1] Amazon S3 バケットにブロックパブリックアクセスを設定する必要がある」というコントロールを有効化します。 これも先ほどと同様に右上の「コントロールを有効にする」を押下します。
その後、このコントロールを有効化したいOUを指定すれば設定完了です。
設定後の確認
アカウントのタブ画面で適用されているAWSアカウントの情報も確認することが可能です。
後、この機能は良いなと感じたのですが、アーティファクトのタブでCloudFormation guard ruleはもちろんのことこのポリシーに準拠もしくは非準拠となるテンプレート例が載っております。
◆準拠しているテンプレート例
◆非準拠となるテンプレート例
動作確認
ここから実際にこのポリシーをデプロイしたアカウントでスタックをデプロイしてみたいと思います。
準拠テンプレートのデプロイ
準拠テンプレートをデプロイしたところ、以下の通り、Control TowerによりデプロイされたCloudFormation Hookのチェックを経て、無事にリソースが構築できました。
非準拠テンプレートのデプロイ
非準拠テンプレートをデプロイしたところ、以下の通り、Control TowerによりデプロイされたCloudFormation Hookによりデプロイが失敗しました。
補足
「CloudFormation guard rule」は、「Config Rules」と同様にControl Tower からコントロールを有効化すると、CloudFormation StackSetsの機能で各アカウントにスタックをデプロイします。
以下はメンバーアカウントにデプロイされたスタックとなり、CloudFormation Hookと伴にIAMロールやCloudWatch Logsがデプロイされていることが分かります。
終わりに
今回は、先日あったControl Towerのアップデートをご紹介いたしました。
まだプレビューですが、コントロール(旧ガードレール)がカテゴリ分けされたのは、自分の環境でどのコントロールを有効化すればいいのか分かりやすくなるため、良いアップデートだなと感じました。マルチアカウントでなくても、AWSアカウントを利用するにあたり、アカウントの統制を行うための参考にもなると思います。
また、「CloudFormation guard rule」のコントロールも良いですが、使うためにはリソースのデプロイをCloudFormationに徹底させなければ統制を正しく効かせられないため、すぐに導入するのは難しさも感じました。
将来、CloudFormation以外のマネジメントコンソールやAWS CLIからの操作などにも、ポリシーを適用できるようになるといいですね。