この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちはオンジー(@onzuka_muscle)です!
EventBridge を使った Config Rules のイベント通知に関する小ネタです。
やってみた
想定する環境
下記をどちらも満たしている環境を想定してください。
- Security Hub によるコンプライアンスチェックを有効にしている
- 独自の Config Rules を展開している
Config Rules の一覧を見てみるとこのように 「Security Hub によって展開された Config Rules」と「独自の Config Rules」が混在しています。
やりたい通知
Security Hub のイベント通知は既に設定(下記イベントパターン)していたので「独自の Config Rules」のみを通知したいとします。
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"]
}
しかし下記イベントパターンのように特に何のフィルタもかけずに"Config Rules Compliance Change"を通知すると「Security Hub によって展開された Config Rules」と「独自の Config Rules」どちらも通知されてしまいます。
{
"source": ["aws.config"],
"detail-type": ["Config Rules Compliance Change"]
}
「Security Hub によって展開された Config Rules」の通知は除外したいです。
解決策(コンテンツフィルタリング)
下記のようなイベントパターンにすると「Security Hub によって展開された Config Rules」の通知を除外できます。
{
"source": ["aws.config"],
"detail-type": ["Config Rules Compliance Change"],
"detail": {
"configRuleName": [{
"anything-but": {
"prefix": "securityhub"
}
}]
}
}
イベントパターンのコンテンツフィルタリングで実現しています。
上記の"detail"部分に注目してください。
"prefix": "securityhub"の部分で configRuleName が"securityhub"から始まる Config Rules が指定されています。
それを"anything-but"で囲むことで"prefix"で指定されたコンテンツ以外が全てマッチします。
結果的に「名前が"securityhub"から始まるルールを除く全てが通知の対象」となっています。
動作確認
実際に Config Rules のコンプライアンスステータスが変化するような操作をして動作を確認してもいいのですが面倒なのでイベントパターンのテストを使います。
下記にサンプルのイベントを貼りますので14行目を書き換えてみながらテストしてみてください。
{
"version": "0",
"id": "fc5bfcd3-da3b-8148-75e1-ae90f920d89a",
"detail-type": "Config Rules Compliance Change",
"source": "aws.config",
"account": "444455556666",
"time": "2021-08-24T13:02:24Z",
"region": "us-east-1",
"resources": [],
"detail": {
"resourceId": "AIDA55T3CNJMZST6OJZK4",
"awsRegion": "us-east-1",
"awsAccountId": "444455556666",
"configRuleName": "guardrail-DisallowAccessIAMUsersWithoutMFA",
"recordVersion": "1.0",
"configRuleARN": "arn:aws:config:us-east-1:444455556666:config-rule/config-rule-oz5ib7",
"messageType": "ComplianceChangeNotification",
"newEvaluationResult": {
"evaluationResultIdentifier": {
"evaluationResultQualifier": {
"configRuleName": "guardrail-DisallowAccessIAMUsersWithoutMFA",
"resourceType": "AWS::IAM::User",
"resourceId": "AIDA55T3CNJMZST6OJZK4"
},
"orderingTimestamp": "2021-08-24T13:02:10.542Z"
},
"complianceType": "NOT_APPLICABLE",
"resultRecordedTime": "2021-08-24T13:02:23.481Z",
"configRuleInvokedTime": "2021-08-24T13:02:23.177Z"
},
"oldEvaluationResult": {
"evaluationResultIdentifier": {
"evaluationResultQualifier": {
"configRuleName": "guardrail-DisallowAccessIAMUsersWithoutMFA",
"resourceType": "AWS::IAM::User",
"resourceId": "AIDA55T3CNJMZST6OJZK4"
},
"orderingTimestamp": "2021-08-24T12:02:10.456Z"
},
"complianceType": "NON_COMPLIANT",
"resultRecordedTime": "2021-08-24T12:02:29.596Z",
"configRuleInvokedTime": "2021-08-24T12:02:28.987Z"
},
"notificationCreationTime": "2021-08-24T13:02:24.459Z",
"resourceType": "AWS::IAM::User"
}
}
マッチするパターン(独自の Config Rules)
マッチしないパターン(Security Hub によって展開された Config Rules)
以上です。