経緯
AWS ConfigにはAWSリソースが適切な設定になっているかを監視してくれる機能があります。
以下は一例です。
- S3 バケットでパブリック読み取りアクセスが許可されないことを確認します。
- AWS アカウントで AWS CloudTrail が有効になっているかどうかを確認します。
- RDS DB インスタンスの高可用性が有効になっているかどうかを確認します。
一回目の非準拠メールを見逃してしまうと
上記のルールに非準拠した状態が継続することになります。
中々恐ろしいですね。
その為、ルールを定期的に評価させてみることになりました。
勘違い
AWS Configのマネージドルールについて勘違いをしまして、
ルールの詳細のトリガータイプを「設定の変更」→「定期的」にすれば
どれでも定期実行が可能だと思ってました。
が、ルールをEditで開いても「定期的」がグレーアウトしていてチェックすることができないものがあります。
AWSのサポートから教えて頂いた対処
StartConfigRulesEvaluationをLambdaで実装してCloudWatch EventsからLambdaを定期実行すれば
要望満たせるとのことでした。
Lambda用のRole
以下のPolicyを作成してこれから作成するLambda用のRoleへアタッチすればOKです。
JSONの場合
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "config:StartConfigRulesEvaluation",
"Resource": "*"
}
]
}
マネージドコンソールの場合
Lambda(Python3.6)
Pythonの参考ページを参照しつつ作成したコードがこちらです。
import boto3
client = boto3.client('config')
def lambda_handler(event, context):
response = client.start_config_rules_evaluation(
ConfigRuleNames=[
's3-bucket-public-read-prohibited',
'cloudtrail-enabled',
'rds-multi-az-support'
]
)
ConfigRuleNamesの箇所にマネージドルールの項目名を記載するだけです。
上で作成したRoleを選択するとLambdaの画面でConfigが連携されます。
CloudWatch Events
スケジュールにて確認したい間隔を設定し、Lambdaを指定することで、連携が完了です。
確認方法
ルールの項目から評価状況を確認してください。
最後に成功した呼び込みと最後に成功した評価が指定した間隔で更新されたら成功です。
落とし穴
AWS Configは仕様でルールの準拠・非準拠のステータス変更時しか通知してくれません。
つまり非準拠が継続の場合にはメール通知がありません。
サポートから上記の回答を頂いたので2019年2月末時点では代替手段もなさそなので
「運用でカバー」をしないといけない様です・・・
■ 公式リンク
公式ページ
ブラックベルト
AWS Config マネージドルールのリスト
■ AWS Config過去記事
AWS Configの通知内容をLambdaで成形