🎊
AWS Config Custom Policy RulesがCloudFormationに対応したようです。
はじめに
このZennでCustom Policy Rulesの記事を書きました。登壇もしました。
このCustom Policy Rulesの情報を集めるのにはかなり苦労しました。なぜかって日本語どころか、英語圏、AWS公式ですら全然公開されていない始末。
で、2022/8/2に本機能がGAされました。えええ、そりゃ情報がないわけだ。
GAになるとどうなる?
本機能ですが、私が確認できている限り、AWS Blogにて6/30に情報が公開されていました。
上記の公式アナウンスを見るに、機能的には特に変わってないように見えたが……
あ゛あ゛あ゛あ゛あ゛あ゛!゛!゛!゛!゛!゛!゛ Custom Policy Rulesが CloudFormation対゛応゛し゛て゛る゛う゛う゛う゛う゛う゛
これは、もう、試すしかないですよねっ。
サンプルコード
AWSTemplateFormatVersion: 2010-09-09
Description: "sample-custom-policy"
Resources:
samplePolicy:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: sample-custom-policy
Description: sample-custom-policy
# InputParameters: Json
# MaximumExecutionFrequency: String
Scope:
ComplianceResourceTypes:
- AWS::EC2::Volume
Source:
CustomPolicyDetails:
EnableDebugLogDelivery: true
PolicyRuntime: guard-2.x.x
PolicyText: |
let latest = ["io2", "gp3", "sc1", "st1"]
rule checkcompliance when
resourceType == "AWS::EC2::Volume" {
configuration.volumeType IN %latest
}
Owner: CUSTOM_POLICY
SourceDetails:
- EventSource: aws.config
MessageType: ConfigurationItemChangeNotification
- EventSource: aws.config
MessageType: OversizedConfigurationItemChangeNotification
ポイント
-
PolicyText
はLambdaのインラインのノリで書くのが良さそう。- CloudFormationを確認したところ、GuardファイルをS3へ置いて参照する方式は未対応......?
-
SourceDetails
はConfigurationItemChangeNotification
,OversizedConfigurationItemChangeNotification
(≒設定変更時のみ)しか対応していない。- これはCustom Policy Rulesの仕様なので回避できません。
- CustomRuleと異なる点として「RuleへIAM Roleが付与できない」。ConfigRecorderのスキーマを見て判定に利用できるパラメータは確認しましょう。
- この記事でも述べたが、下のリポジトリはメンテ状況がいまいちなので、現状は実機での確認を推奨します。私と一緒にコントリビュートしませんか?
deploy
今回はお試しなのでCloud9で手動デプロイしました。
# install rain
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/home/ec2-user/.linuxbrew/bin/brew shellenv)"' >> /home/ec2-user/.bash_profile
eval "$(/home/ec2-user/.linuxbrew/bin/brew shellenv)"
brew install rain
# deploy
rain deploy sample.yaml
これで動きました。CDKでも早くデプロイしてみたいですね。L2 Constructsも作るか!?
追記:適合パックはまだ非対応
以下のコマンドを試したところ、ConformancePack(Config適合パック)形式のdeployリクエストは成功するが、CustomPolicyDetails is required when Owner is CUSTOM_POLICY
というエラーで失敗する。
# deploy(ConformancePack)
aws configservice put-conformance-pack \
--conformance-pack-name samplePolicy \
--template-body file://sample.yaml
CustomPolicyDetailsは上述のとおり書いているがどういうことだ!?
Stackの様子を見にいくと、展開されたテンプレート(後述)CustomPolicyDetails
の値が削除されていた。きっとまだ非対応なため解釈できなかったのだろう……ぐぬぬ。
---
Description: "DO NOT MODIFY THIS STACK! This stack is managed by Config Conformance\
\ Packs."
Parameters: {}
Mappings: {}
Conditions: {}
Rules: {}
Resources:
samplePolicy:
Type: "AWS::Config::ConfigRule"
Properties:
ConfigRuleName: "sample-custom-policy-conformance-pack-lszjbrlk9"
Description: "sample-custom-policy"
Scope:
ComplianceResourceTypes:
- "AWS::EC2::Volume"
Source:
Owner: "CUSTOM_POLICY"
SourceDetails:
- EventSource: "aws.config"
MessageType: "ConfigurationItemChangeNotification"
- EventSource: "aws.config"
MessageType: "OversizedConfigurationItemChangeNotification"
Outputs: {}
AWSTemplateFormatVersion: "2010-09-09"
Hooks: {}
参考
Discussion