[アップデート]非準拠リソースのプロビジョニングを抑止できる!AWS Control Towerでプロアクティブなガードレールが利用可能になりました #reinvent

AWS Control Towerの第三のガードレールが登場しました!
2022.12.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは。

AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。

AWS Control Towerでプロアクティブなガードレールが利用可能になりました。

本機能単体でのAWS What’sブログは更新されていませんが、公式ドキュメントが更新されているのでこちらをベースにアップデート内容について確認していきたいと思います。

アップデート概要

これまでControl Towerのガードレールは、予防的ガードレールおよび発見的ガードレールの2種類でしたが、今回のアップデートで3番目のガードレール「プロアクティブなガードレール」が追加されました。

プロアクティブなガードレールは、実行されたCloudFormationテンプレートのプロビジョニング前に、CloudFormation Guardルールによってリソースをスキャンします。ルールに違反していた場合、CloudFormation hooksによってプロビジョニングは失敗します。

各ガードレールの違いについては以下にまとめました。

名前 概要 実装方法 ステータスの種類
予防的ガードレール ポリシー違反につながるアクションを禁止します。 SCP(Organizations) enforced
not enabled
発見的ガードレール アカウント内のリソースのコンプライアンス違反を検出し、ダッシュボードを通じてアラートを提供します。 AWS Config rules clear
in violation
not enabled
プロアクティブなガードレール リソースがそのコントロールに準拠していることを確認し、準拠していないリソースはプロビジョニングされません。 AWS CloudFormation Guard
AWS CloudFormation hooks
PASS
FAIL
SKIP

やってみた

早速試してみました。

以下のようなシナリオで検証してみます

  • 今回は東京リージョンにあるControl Tower環境で検証します。
  • 特定のOUに対し、[CT.S3.PR.1]Amazon S3 バケットにブロックパブリックアクセスを設定するよう要求するを有効化します。
  • 対象のOU配下のアカウントで、パブリックブロックアクセスを有効化したS3をCloudFormationで作成します
    • スタックの実行が成功することを確認します
  • 対象のOU配下のアカウントで、パブリックブロックアクセスを無効化したS3をCloudFormationで作成します
    • スタックの実行が失敗することを確認します

それでは検証していきましょう。

まずはControl Tower管理アカウントでログインし、該当のガードレールを有効化してみます。

有効化するOUを選択して、OUの制御を有効化をクリックします。

有効化しようとしたところ、以下のようなエラーが出力されました。

AWS Control Tower cannot enable the control CT.S3.PR.1 on ou-xxxx-xxxxx, because the prerequisite control > > CT.CLOUDFORMATION.PR.1 is not enabled for this OU.

CT.CLOUDFORMATION.PR.1は、コンソールの実装欄に今回有効化したいCT.S3.PR.1と依存関係にあるガードレールであるとの記載がありました。

先にCT.CLOUDFORMATION.PR.1を有効化してから再度試してみたところ、エラーは発生せず有効化できました(有効化までに数分かかりました)

ここからは対象のOU配下のアカウントに切り替えます

まずはこちらのCloudFormationテンプレートを実行して、正常に動作することを確認します。

AWSTemplateFormatVersion: 2010-09-09
Description: CloudFormation template for s3 bucket
Resources:
  PrivateS3:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: test-ashisan-proactive-private
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true

無事成功しました。

CFnのスタックの処理が動作する前にControlTower::Guard::Hookが呼び出されている点がポイントですね。

続いてこちらのCloudFormationテンプレートを実行して、失敗するか確認してみます。

AWSTemplateFormatVersion: 2010-09-09
Description: CloudFormation template for s3 bucket
Resources:
  PublicS3:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: test-ashisan-proactive-public
      PublicAccessBlockConfiguration:
        BlockPublicAcls: false
        BlockPublicPolicy: false
        IgnorePublicAcls: false
        RestrictPublicBuckets: false

想定通りROLLBACKとなりました。

ControlTower::Guard::Hookがfailedのステータスに終わったことで後続が実行されませんでした。

検証は以上です。

対応サービス

プロアクティブなガードレールは現在、以下のサービスで利用可能なようです。 たくさんあるので、やってみたブログにも期待したいですね(圧力

対応リージョン

ドキュメントに記載がなかったため記載できませんが、すべての商用リージョンで利用可能(だと思われます、間違っていたらご指摘ください)

少なくとも東京リージョンでは利用可能です。

その他

本アップデートと同じく、re:Invent2022にてAWS Configルールでプロアクティブなコンプライアンスのサポートが発表されたことはご存じでしょうか?

弊社ブログにて、こちらのアップデートに関するConfigルールとCloudFormation hooksとの連携について触れています。

推測になりますが、公式ドキュメントによると、CloudFormation Guardの発見的統制のルールはAWS Configベースで構成されているそうなので、Configルールがプロアクティブなコンプライアンスをサポートしたことで、CloudFormation Guardでも利用可能になったのでしょうか。

発見的なガバナンスとコンプライアンス– AWS Config ベースの構成アイテム (CI) などの構成管理データベース (CMDB) リソースの適合性を検証します。

Configルールはリージョン単位で設定する必要があるため、同じ機能を自力でセットアップするとなると複数リージョンでの展開やマルチアカウントでの展開など考慮すべき点が多く、なかなか大変だと思います。

Control Towerにすべて任せられるのは非常に嬉しいポイントですね。

最後に

今回は、Control Towerで新しく利用可能になったガードレール、プロアクティブなガードレールを紹介しました。

実際に検証してみたことで、ガードレールの有効化時に依存関係の解決が必要なものがある、CloudFormation hooksは検知時も非検知時のどちらでも動作する(CFn hooksの通常の動作の範囲内だと思いますが)などと、色々発見がありました。

既に利用可能なサービスもたくさんあるので派生ブログに期待です!

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。