AWS Config監査でNocompliantなリソースを検出時にSNS経由でメール通知する
以下のページで、AWS Configから発信されたイベントデータをEventBridgeで受け取り、ルールにマッチするものだけをSNS経由でメール通知する方法を取り上げました。
これと同様の構成で、AWS Config監査において、ルールに準拠していないリソースが検出された場合、SNS経由でメール通知することができます。
具体的には、以下のAWS公式ページで、設定方法が取り上げられています。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/config-resource-non-compliant/
今回は上記の構成をCloudFormationで構築します。
具体的には、AWS ConfigにS3バケットのSSEに関するルールを設定し、これに準拠しないバケットが検出された際は、メール通知されるように設定します。
構築する環境
冒頭でご紹介したページと概ね同様の構成です。
AWS Configで、S3バケットのSSEに関するルールを作成します。
SSEが無効になっているS3バケットが検出されると、非準拠リソースとしてイベントデータが生成されます。
EventBridgeルールで、上記を満たすデータを受け取った場合、SNSトピックにデータを送信します。
SNSトピックのサブスクライバーにメールアドレスを指定し、メール通知します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
https://github.com/awstut-an-r/awstut-fa/tree/main/104
テンプレートファイルのポイント解説
基本的には冒頭でご紹介したページと同様ですから、異なる箇所のみ取り上げます。
AWS Configルール
Resources:
S3BucketSSEEnabledConfigRule:
Type: AWS::Config::ConfigRule
DependsOn:
- ConfigurationRecorder
Properties:
ConfigRuleName: !Sub "${Prefix}-S3-Bucket-SSE-Enabled"
Scope:
ComplianceResourceTypes:
- AWS::S3::Bucket
Source:
Owner: AWS
SourceIdentifier: S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED
Code language: YAML (yaml)
S3バケットのSSEに関するルールを設定します。
今回はマネージドルール「s3-bucket-server-side-encryption-enabled」を使用します。
Sourceプロパティにこのルールを指定します。
AWS Configルールに関する詳細につきましては、以下のページもご確認ください。
EventBridgeルール
Resources:
EventsRule:
Type: AWS::Events::Rule
Properties:
EventBusName: !Ref EventBusName
EventPattern:
source:
- aws.config
detail-type:
- Config Rules Compliance Change
detail:
messageType:
- ComplianceChangeNotification
configRuleName:
- !Ref S3BucketSSEEnabledConfigRule
resourceType:
- AWS::S3::Bucket
newEvaluationResult:
complianceType:
- NON_COMPLIANT
Name: !Sub "${Prefix}-EventsRule"
State: ENABLED
Targets:
- Arn: !Ref TopicArn
Id: !Ref TopicName
InputTransformer:
InputPathsMap:
"awsRegion": "$.detail.awsRegion"
"resourceId": "$.detail.resourceId"
"awsAccountId": "$.detail.awsAccountId"
"compliance": "$.detail.newEvaluationResult.complianceType"
"rule": "$.detail.configRuleName"
"time": "$.detail.newEvaluationResult.resultRecordedTime"
"resourceType": "$.detail.resourceType"
InputTemplate: |
"On <time> AWS Config rule <rule> evaluated the <resourceType> with Id <resourceId> in the account <awsAccountId> region <awsRegion> as <compliance> For more details open the AWS Config console at https://console.aws.amazon.com/config/home?region=<awsRegion>#/timeline/<resourceType>/<resourceId>/configuration"
Code language: YAML (yaml)
AWS Configルールによってリソースが非準拠と判定された場合、EventBridgeにデータが送信されます。
S3バケットのSSEに関するEventBridgeルールを作成し、イベントを受信した場合は、SNSトピックにメッセージを送信するように設定します。
ポイントは2点です。
1点目はEventPatternプロパティです。
S3バケットのSSEに関するルールに、非準拠として判定された際に発生するデータパターンを指定します。
AWS公式ページで紹介されている通りに設定します。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/config-resource-non-compliant/
以下がデータのサンプルです。
{
"version": "0",
"id": "e1127974-86dd-69bb-649a-1416eaa3a14a",
"detail-type": "Config Rules Compliance Change",
"source": "aws.config",
"account": "[account-id]",
"time": "2022-12-02T14:39:46Z",
"region": "ap-northeast-1",
"resources": [],
"detail": {
"resourceId": "fa-104-encryption-enabled",
"awsRegion": "ap-northeast-1",
"awsAccountId": "[account-id]",
"configRuleName": "fa-104-S3-Bucket-SSE-Enabled",
"recordVersion": "1.0",
"configRuleARN": "arn:aws:config:ap-northeast-1:[account-id]:config-rule/config-rule-yt5uxw",
"messageType": "ComplianceChangeNotification",
"newEvaluationResult": {
"evaluationResultIdentifier": {
"evaluationResultQualifier": {
"configRuleName": "fa-104-S3-Bucket-SSE-Enabled",
"resourceType": "AWS::S3::Bucket",
"resourceId": "fa-104-encryption-enabled"
},
"orderingTimestamp": "2022-12-02T14:39:32.966Z"
},
"complianceType": "NON_COMPLIANT",
"resultRecordedTime": "2022-12-02T14:39:45.721Z",
"configRuleInvokedTime": "2022-12-02T14:39:45.437Z"
},
"oldEvaluationResult": {
"evaluationResultIdentifier": {
"evaluationResultQualifier": {
"configRuleName": "fa-104-S3-Bucket-SSE-Enabled",
"resourceType": "AWS::S3::Bucket",
"resourceId": "fa-104-encryption-enabled"
},
"orderingTimestamp": "2022-12-02T14:33:12.486Z"
},
"complianceType": "COMPLIANT",
"resultRecordedTime": "2022-12-02T14:38:39.897Z",
"configRuleInvokedTime": "2022-12-02T14:38:29.554Z"
},
"notificationCreationTime": "2022-12-02T14:39:46.796Z",
"resourceType": "AWS::S3::Bucket"
}
}
Code language: JSON / JSON with Comments (json)
2点目はTargetsプロパティです。
SNSトピックを指定します。
デフォルトですと、SNSトピックにパブリッシュするメッセージは、上記のJSONデータとなります。
InputTransformerプロパティを設定することで、メッセージを指定することができます。
こちらもAWS公式ページで紹介されている通りに設定します。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- SNSトピック:fa-104
- AWS Configルール:fa-104-S3-Bucket-SSE-Enabled
- EventBridgeルール:fa-104-EventRule
- 検証用バケット:fa-104-encryption-enabled
メールアドレスの認証
SNSトピックのサブスクライバーとしてメールアドレスを指定した場合、そのメールアドレスを認証する必要があります。
指定したメールアドレスに、以下のような認証メールが送られてきます。
「Confirm subscription」を押下して、認証を進めます。
上記のページが表示されて、認証が完了したことがわかります。
リソース確認
AWS Management Consoleから各リソースを確認します。
まずSNSトピックを確認します。
正常にSNSトピックが作成されていることがわかります。
加えて、サブスクライバーとして登録したメールアドレスが登録されていることもわかります。
またこのメールアドレスのStatusの値を見ると「Confirmed」とあり、認証が完了していることもわかります。
そしてアクセスポリシーを見ると、EventBridgeから本トピックに対するメッセージのパブリッシュが許可されていることがわかります。
検証用S3バケットを確認します。
確かにSSEが有効化されていることがわかります。
AWS Configの設定を確認します。
AWS Configが正常に動作し、データの収集が開始されていることがわかります。
AWS Configルールを確認します。
SSEに関するルールが作成されています。
そして先述のS3バケットを見ると、「Compliant」とありますので、現在は準拠していることがわかります。
EventBridgeルールを確認します。
EventBridgeルールが正常に作成されていることがわかります。
Targetを見ると、先ほどのSNSトピックが指定されていることがわかります。
つまりパターンを満たすイベントデータが送られた場合、SNS経由でメール通知されるということです。
Event Patternを見ると、CloudFormationテンプレート通りにパターンが定義されていることがわかります。
つまりS3バケットのSSE設定に関するAWS Configルールに準拠しないリソースが検出された場合、条件を満たすということになります。
Input transformerを見ると、メールで送る文字列のテンプレートと、埋め込むパラメータが定義されています。
動作確認
準備が整いましたので、実際の動作を確認します。
S3バケットのSSE設定を無効化します。
無効化の実施後、AWS Config側でルールの再評価を実施します。
ルールの再評価が実施されて、検証用バケットが「Nocompliant」となりました。
しばらく待つと、以下のメールが届きました。
メールの本文は、確かにInput Transformerで指定したテンプレートに、各種パラメータが埋め込まれた文字列です。
このようにEventBridgeルールを設定することによって、AWS Configルールに非準拠なリソースが検出された際に、SNS経由でメール通知することができました。
まとめ
AWS Config監査において、ルールに準拠していないリソースが検出された場合、SNS経由でメール通知する方法をご紹介しました。