エンジニアの皆さん、こんにちは。
インフラの世界で最も恐ろしいのは、「デプロイボタンを押した瞬間にセキュリティホールが生まれること」です。コードレビューで防ぐ? それは人間の注意力に依存したギャンブルです。
真のSREは、「間違った構成はデプロイされる前に物理的に不可能にする」という設計思想を持ちます。そこで登場するのが、AWS CloudFormation Hooksです。今日は、あなたの組織のインフラを「失敗できない環境」へと進化させる、プロアクティブなガバナンス基盤の構築術を伝授しましょう。
—
1. CloudFormation Hooksの本質:なぜ「事後」ではなく「事前」なのか
これまで、多くの現場では「Configで非準拠リソースを見つけて通知する」というリアクティブな対応をとっていました。しかし、それでは「脆弱なリソースが作られた後」という手遅れの状態です。
Hooksは、デプロイ(スタック作成・更新)の瞬間に介入し、テンプレートの内容が社内規約に違反していれば即座にデプロイを遮断します。
これは「ガードレール」ではなく「物理的な壁」です。これがあるだけで、深夜の障害対応やセキュリティインシデントの9割は撲滅できます。
—
2. 事前準備:開発のための「武器」を揃える
まずは、Hooksの開発に必要なツールチェーンをセットアップしましょう。これらは現代のSREにとって必須の装備です。
1. AWS SAM CLI: Hooksの開発・テストの要です。
2. CloudFormation CLI (cfn-cli): Hooksの雛形生成と登録に不可欠です。
3. Python環境: ロジック記述用。
以下のコマンドで環境を整えてください。
CloudFormation CLI のインストール
pip install cloudformation-cli cloudformation-cli-java-plugin cloudformation-cli-python-plugin
—
3. 実践:HelloWorld的なHookの構築
今回は「すべてのS3バケットに『Encryption』が有効であることを強制する」という、最も基本的かつ強力なHookを作成します。
① プロジェクトの初期化
まずは雛形を作成します。
自分の名前空間(例: MyCorp)を定義して初期化
cfn init
プロンプトが出たら以下を選択
1. Hook
2. <あなたの名前空間>
3.
4. python
② ロジックの実装(`src/handlers.py`)
ここが核心部です。`preCreate`および`preUpdate`フックを実装し、リソースのプロパティを検証します。
def pre_create_handler(session, request, callback_context):
model = request.hook_context.target_model
# リソースタイプがS3バケットか判定
if request.type_name == “AWS::S3::Bucket”:
# BucketEncryptionが設定されているかチェック
if not model.get(“BucketEncryption”):
# 違反があればFAILEDを返す(これによりデプロイが停止する)
return ProgressEvent.failed(
HandlerErrorCode.NonCompliant,
“セキュリティ違反: S3バケットには暗号化設定が必須です。”
)
return ProgressEvent.success(callback_context)
—
4. 魔法の瞬間:AWSへの登録と有効化
コードを書いただけでは動きません。AWS CloudFormation Registryに「このHookは正義である」と登録する必要があります。
1. テンプレートの検証
cfn validate
2. パッケージ化と登録
cfn submit –set-default
このコマンドを実行すると、あなたのコードがAWSの内部APIにアップロードされ、アカウント内の全スタックに対して「見張り」を開始します。
—
5. なぜ、これが「現場で震えるほど役立つ」のか
この手法の凄みは、「開発者が何をしてもセキュリティが担保される」という点にあります。
- 自動化の究極形: 開発者がどんなに複雑なCFnテンプレートを書いても、`cfn submit`されたHookが、暗号化の欠落やパブリックアクセスの許可を自動で検知し、APIを弾きます。
- 心理的安全性: 開発者は「セキュリティ要件を全て覚える」という重圧から解放されます。間違っていればツールが教えてくれるからです。
最後に:あなたへのアドバイス
Hooksは強力ですが、まずは「最低限守るべきルール(暗号化、タグ付けの強制など)」からスモールスタートしてください。最初から複雑なポリシーを適用すると、現場の摩擦が大きくなります。
「インフラはコードであり、ガードレールであるべきだ」。
この考え方が浸透したとき、あなたのインフラは、ただのサーバーの集合体から、「絶対に壊れない堅牢な城」へと進化します。
さあ、次のデプロイから、あなたの手で「完璧なガバナンス」を実装してみませんか? 困ったことがあれば、いつでもまた聞きに来てください。応援しています。