[アップデート]非準拠リソースのプロビジョニングを抑止できる!AWS Control Towerでプロアクティブなガードレールが利用可能になりました #reinvent
みなさん、こんにちは。
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のステータスに終わったことで後続が実行されませんでした。
検証は以上です。
対応サービス
プロアクティブなガードレールは現在、以下のサービスで利用可能なようです。 たくさんあるので、やってみたブログにも期待したいですね(圧力
- Amazon API Gateway controls
- AWS Certificate Manager controls
- Amazon CloudFront controls
- AWS CloudTrail controls
- AWS CodeBuild controls
- AWS Database Migration Service (DMS) controls
- Amazon DynamoDB controls
- DynamoDB Accelerator controls
- AWS Elastic Beanstalk controls
- Amazon Elastic Compute Cloud (EC2) controls
- Amazon Elastic Container Registry controls
- Amazon Elastic Container Service controls
- Amazon Elastic File System controls
- Elastic Load Balancing controls
- Amazon GuardDuty controls
- AWS Identity and Access Management (IAM) controls
- AWS Key Management Service (AWS KMS) controls
- Amazon Kinesis controls
- AWS Lambda controls
- AWS Network Firewall controls
- Amazon Relational Database Service (RDS) controls
- Amazon Redshift controls
- Amazon Simple Storage Service (S3) controls
- Amazon Simple Queue Service (SQS) controls
- AWS WAF regional controls
- AWS WAF controls
- AWS WAFV2 controls
対応リージョン
ドキュメントに記載がなかったため記載できませんが、すべての商用リージョンで利用可能(だと思われます、間違っていたらご指摘ください)
少なくとも東京リージョンでは利用可能です。
その他
本アップデートと同じく、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)でした。