見出し画像

【AWS Update】AWS Control Tower環境下でAWS CloudFormation Hooksの拡張機能が利用可能になりました


1.はじめに


SHIFTのナショナルセキュリティ事業部所属の松尾です。

AWS Control Tower シリーズ(下記リンク)でブログを連載していますが、並走してAWSのアップデート情報を記載していこうと思います。アップデート情報の掲載内容は、私の業務メインのITガバナンスに合わせます。

"AWS Control Tower シリーズ"

AWSアップデート情報(2024年11月20日)によると、AWS Control Towerのガードレール機能の1つである、プロアクティブコントロール用のAWS CloudFormation Hooks(以下、「CFn Hooks」)管理を改善したとのことです。どうやら、アップデート前はAWS Control Tower環境下では、AWS利用者が独自カスタマイズしたCFn Hooks(以下、CFn Hooks(拡張機能)を作成できず、AWS Control Towerのガードレール(プロアクティブコントロール)と併用不可であったようです。

今回のリリースにより、プロアクティブコントロールがデプロイされた Hooks は AWS Control Tower サービスによって直接管理されるようになっため、お客様は独自の Hooks を作成できると同時に、AWS Control Tower のプロアクティブコントロールのメリットも得られます。

"AWS Control Towerがプロアクティブコントロール用のHooks管理を改善し、
プロアクティブコントロールをサポートするリージョンを拡大(AWS)
"

今回、アップデート後の検証のため、AWS Control Tower環境下でのCFn Hooksの拡張機能の作成エラーは発生しませんが、AWS Control Towerのガードレール機能(プロアクティブコントロール)共存できるところまで見ようと思います。

【注】本記事での検証時点は、2024年12月9日、AWS Control Towerのランディングゾーンのバージョンは、3.3となります。

2.AWS CloudFormation Hooksとは


AWS CloudFormationはInfrastructure As Code(IaC)サービスであることはご存知の方もいると思いますが、CFn Hooksはどのようなサービスか知っていますでしょうか。私はAWS Control Towerのガードレール機能(プロアクティブコントロール)が実装されてから知りました。CFn HooksについてAWS社の説明は下記リンクとなりますが、日本語は未実装なため、遊び心でGPT-4oに和訳してもらいました(筆者の英語力は内緒)。

"What is AWS CloudFormation Hooks?(AWS)"

AWS CloudFormation Hooksは、CloudFormationリソース、スタック、変更セットが組織のセキュリティ、運用、コスト最適化のベストプラクティスに準拠していることを確保するために使用できる機能です。CloudFormation Hooksは、AWS Cloud Control APIリソースに対しても同様の準拠レベルを確保できます。CloudFormation Hooksを使用すると、プロビジョニングの前にAWSリソースの構成を積極的に検査するコードを提供できます。準拠していないリソースが見つかった場合、AWS CloudFormationは操作を失敗させ、リソースのプロビジョニングを防止するか、警告を発し、プロビジョニング操作を続行させることができます。

Hooksを使用して、さまざまな要件やガイドラインを強制することができます。たとえば、セキュリティ関連のHookは、Amazon Virtual Private Cloud(Amazon VPC)に対する適切なインバウンドおよびアウトバウンドトラフィックルールのためのセキュリティグループを検証できます。コスト関連のHookは、開発環境が小型のAmazon Elastic Compute Cloud(Amazon EC2)インスタンスタイプのみを使用するよう制限できます。データの可用性のために設計されたHookは、Amazon Relational Database Service(Amazon RDS)の自動バックアップを強制することができます。

CloudFormation Hooksは、AWS CloudFormationレジストリでサポートされている拡張タイプです。このレジストリは、Hooksを公開および非公開で配布およびアクティブ化するのを容易にします。事前に構築されたHooksを使用することも、自分自身のHooksをCloudFormation CLIを使用して構築することもできます。

要約すると、AWSリソースのプロビジョニング前にリソース構成の準拠性のチェック機能をもつサービスとなります。CFn Hooksについては、以前、"ガードレールの設計(AWS Control Tower シリーズ vol.2)" で、AWS Control Towerのガードレール機能(プロアクティブコントロール)の中で解説しています。つまり、本ブログタイトルのアップデート前は、AWS Control Tower環境下では、AWS Control TowerのCFn Hooks(=ガードレール機能(プロアクティブコントロール))のみ管理可能とし、AWS CloudFormation側でのCFn Hooks(拡張機能)を管理不可とすることで、CFn Hooksの設定をAWS Control Tower側で一元管理して統制をかけていたことになります。今回この制約が緩和され、両方のCFn Hooksが併用可能となったわけです。

3.AWS Control Tower環境下でのAWS CloudFormation Hooks(拡張機能)作成


それでは、AWS control Tower環境下でCFn Hooks(拡張機能)が作成可能か検証してみようと思います。今回はCFn Hooks(拡張機能)をAWS Control Towerのマスタアカウントで作成します。

Root OUに所属するAWS Control Towerのマスタアカウント(筆者作成)

今回は、AWS CloudFormationのレジストリ>パブリック拡張機能より、任意サンプル(AWSSamples::Ec2SsmSmOnly::Hooks)からCFn Hooks(拡張機能)を作成することにします。

アクティブ化を押下します。

実行ロール(IAMロール)のARNを指定します(※IAMロールにアタッチするIAMポリシーは検証の便宜上「AdministratorAccess」を設定)。その他のログ記録設定(CloudWatch Log)-オプション等の設定項目を任意で指定し、拡張機能のアクティブ化を押下します。

【実行ロール(IAMロール)の信頼ポリシー(サンプルコード)】

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "hooks.cloudformation.amazonaws.com",
                    "resources.cloudformation.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                }
            }
        }
    ]
}


【ログ記録設定(CloudWatch Log)(サンプルコード)】

{
  "logRoleArn": "arn:aws:iam::123456789012:role/CFnHookSampleRole",
  "logGroupName": "LogGroupCFnHookSampleRole"
}

設定エイリアスを「default」とし、設定JSONを指定します。設定JSON内のProperties要素は、設定スキーマ(今回は「AWSSamples::Ec2SsmSmOnly::Hooks」)によって変わります。設定JSON内の各パラメータの解説は以下を参照ください。
"Hook configuration schema syntax reference(左ペイン:Configuration schema)(AWS)"

【設定JSON(設定スキーマ:AWSSamples::Ec2SsmSmOnly::Hooks)(サンプルコード)】

{
  "CloudFormationConfiguration": {
    "HookConfiguration": {
      "TargetStacks": "ALL",
      "FailureMode": "FAIL",
      "Properties": {
        "requireSessionManagerEncryption":"true"
      }
    }
  }
}

AWS Control Tower環境下で、エラーすることなく、CFn Hooks(拡張機能)が作成することができました(おそらく、これでアップデート情報が反映されているとみてよいはず...)。なお、作成したCFn Hooks(拡張機能)は、AWS Control Tower側のコントロール(ガードレール)一覧にはプロアクティブコントロールとして表示されないため、AWS CloudFormation側で管理する必要があります。

4.考察(マネージド機能とカスタマイズ機能の併用)


CFn Hooksに限らず、IAMロールなど、AWS側で一部機能がマネージド管理されるものは多くあります。技術面では基本的にマネージド機能を利用し、マネージド機能で実現不可なものは、AWS利用者が独自でカスタマイズ機能を作成することになります。一方で、運用面で見たときにカスタマイズ機能が増えるにつれて独自ソースの管理の煩雑化などで運用オーバーヘッドがかかり、後任者に独自ソースの構成管理がしっかり引き継がれず、運用が回らなくなるリスクがあります。

私は過去のシステム開発・運用経験を通して、上記課題にあたった際は、そもそもシステムが組織の業務効率化のためにあるということに立ち戻るようにしています。組織とシステム間の整理の流れとしては以下のとおりです。

① 業務効率化のため、組織戦略の指針に沿って業務システム化する目的を(再)確認
② 業務フローにおいて業務効率化を図るため、業務システム化する箇所を特定
③ 製品パッケージの標準機能(マネージド機能)を基本的に利用
④ 標準機能(マネージド機能)で実現不可の範囲は、②に戻り、システム化することなく組織運用として対応可能か再確認
⑤ ④で抽出した必要最小限の拡張機能(カスタマイズ機能)により、標準機能を補完する


執筆者プロフィール:松尾光敏
過去にアプリケーション開発・基盤構築を経て、いまはコンサルとしてメインクライアントの官公庁案件のほか、社内AWS CCoEに関わっています。最近は週末に、コンサルのための体力づくりと歳による体力低下を補うために趣味のサイクリングを再開しました。
■保有資格
・AWS認定全冠(2023/2024 Japan AWS All Certifications Engineers)
・Azure Solutions Architect Expert
・Google Cloud Professional Cloud Architect
・CISSP
・CISA
・PMP

お問合せはお気軽に

SHIFTについて(コーポレートサイト)

SHIFTのサービスについて(サービスサイト)

SHIFTの導入事例

お役立ち資料はこちら

SHIFTの採用情報はこちら

PHOTO:UnsplashClark Van Der Beken