AWS Config概要
触れる機会がありましたので忘備録的に記載致します。
-
AWSの各サービスの設定変更を検知
作業者が複数いる状況やAWSリソースが多数ある場合でも管理者が設定変更を簡単に把握できる。 -
AWSが準備したルールに準拠しているかを評価
誤った設定を行った際に通知され把握できる。
構築
構成
AWS Configから直でSNSだと件名が固定になってしまい、本文のjsonを見ないと何のメールか判らない為、
Lambdaを経由してメール通知します。Lambda連携の為にCloudWatch Eventsも出てきます。
AWS Config
■ 設定
設定項目 | 値 |
---|---|
記録するリソースタイプ | グローバルリソース (AWS IAM リソースなど) を含める |
Amazon S3 バケット | バケットの作成 |
バケット名 | 任意 |
Amazon SNS トピック | ※チェックなし |
AWS Config ロール | 既存の AWS Config サービスにリンクされたロールを使用 |
■ ルール
52項目から通知したいルールを選択
AWS Config マネージドルールのリスト
CloudWatch Events
### 設定変更検知
設定項目 | 値 |
---|---|
イベントソース | イベントパターン |
サービス名 | Config |
イベントタイプ | Config Configuration Item Change |
※1 | Any message type |
※2 | Any resource type |
※3 | 任意のリソース ID |
※1 選べるタイプが1つの為、anyを選択
※2 通知のAWSサービスを選択したい場合に使用。
下記URLから監視対象のリソースタイプの値を入力することで通知内容を限定できる。
AWS Config でサポートされている AWS リソースタイプとリソース関係
※3 EC2でいうインスタンスIDを入力することで、通知内容をインスタンス単位で制限ができるはず
☆未検証!
### ルール準拠・非準拠検知
設定項目 | 値 |
---|---|
イベントソース | イベントパターン |
サービス名 | Config |
イベントタイプ | Config Rules Compliance Change |
※1 | Any rule name |
※2 | Any resource type |
※3 | 任意のリソース ID |
※1 Configのルール設定で検知対象を絞っている為、Any
※2 設定変更検知と同様
※3 設定変更検知と同様
Lambda
タイトルがAWS Config起因かつ、設定変更検知なのかルール準拠・非準拠検知なのかを把握できるようにします。
本文はConfigが出力するjsonをそのまま載せるLambdaのコードになっています。
設定項目 | 値 |
---|---|
関数の作成 | 一から作成 |
名前 | 任意 |
ランタイム | Python3.6 |
ロール | 1つ以上のテンプレートから |
ロール名 | 任意 |
ポリシーテンプレート | Amazon SNS 発行ポリシー |
トリガーの追加 | CloudWatch Events |
ルール | 上記で作成したルール |
### コード
import json
import boto3
def lambda_handler(event, context):
type = event['detail-type']
Msg=json.dumps(event)
sub = '[AWS Config]' + str(type)
client = boto3.client('sns')
response = client.publish(
TopicArn='SNS TopicのArn',
Message=text,
MessageStructure='context',
Subject=sub
)
return
SNS
トピックの設定で「メッセージの発行の許可」を「全員」にすることで
Lambdaからメールを送付できました。
もっと適切な設定があると思いますが、省略します。
まとめ
ここまで完了したら監視対象の設定を変更し、メールが通知されるか確認してください。
CloudWatch EventsのターゲットにSNS Topicを追加することでLambda起因のトラブルか否かを
切り分けすることができます。
CloudWatch LogsのLambdaを見るとエラー要因がわかったりします。
公式ドキュメントや調べた内容の継ぎ接ぎな内容なので、間違いがありましたら
ご指摘いただけると幸いです。