[アップデート] EventBridge イベントバスが CloudTrailからの read-only API アクションを監視できるようになりました
以下アップデートを紹介します。
EventBridge で CloudTrailからの 読み取り専用のAPIイベント(List, Get, Describe など) を監視できるようになりました。
何が嬉しいか
CloudTrailイベントの全て一式 を EventBridge から監視できるようになりました。
もともと EventBridge には 「CloudTrail経由のAPI呼び出しイベント」 ( AWS API Call via CloudTrail
) を監視する機能がありましたが、更新APIのみでした。 つまり Create や Update, Delete などはEventBridge で監視できていましたが、 読み取り専用APIはサポート外でした。
今回のアップデートで List や Get, Describe などの 読み取り専用APIもサポートされました。
単一の読み取りイベントを監視するために、 わざわざ CloudTrail → CloudWatch Logs → CloudWatch Alarm
のような構成を取る必要がなくなりました。やったね。
どうやって設定するか
「読み取り専用APIも監視する」設定はオプトインする必要があります。
具体的にはEventBridgeルールのステータスを ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS にします。 オプトインしたルールは、マネコン上では 有効 (CloudTrail 読み取り専用 MGMT イベントあり)
と表示されます。
2023/11/24時点では、この設定はマネジメントコンソール上ではできないようです。
やってみる
Secrets Manager の特定シークレットの取得 (GetSecretValue) を検知してメール通知する仕組みを展開してみます。
以下のような CFnテンプレートを展開しました。
AWSTemplateFormatVersion: 2010-09-09 Parameters: Email: Type: String SecretArn: Type: String Resources: SNSTopic: Type: AWS::SNS::Topic Properties: TopicName: detect-get-secret-value SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Statement: - Sid: AllowServices Effect: Allow Principal: Service: - events.amazonaws.com Action: - sns:Publish Resource: - !Ref SNSTopic Topics: - !Ref SNSTopic SNSSubscription: Type: AWS::SNS::Subscription Properties: TopicArn: !Ref SNSTopic Endpoint: !Ref Email Protocol: email EventBridgeRule: Type: AWS::Events::Rule Properties: Name: detect-get-secret-value State: ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS EventPattern: !Sub | { "source": ["aws.secretsmanager"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["secretsmanager.amazonaws.com"], "eventName": ["GetSecretValue"], "requestParameters": { "secretId": [ "${SecretArn}" ] } } } Targets: - Id: sns-topic Arn: !Ref SNSTopic
ハイライト部分が EventBridgeルールです。 State: ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS
を指定する点に注意してください。
展開後に特定シークレットの値を取得しました。
すぐにメールが通知されました。 以下、整形したものを記載します。
{ "version": "0", "id": "09c00000-9999-2222-2222-example", "detail-type": "AWS API Call via CloudTrail", "source": "aws.secretsmanager", "account": "111111111111", "time": "2023-11-24T08:29:48Z", "region": "ap-northeast-1", "resources": [], "detail": { "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAEXAMPLE:cm-kawahara.masahiro", "arn": "arn:aws:sts::111111111111:assumed-role/cm-kawahara.masahiro/cm-kawahara.masahiro", "accountId": "111111111111", "accessKeyId": "ASIAEXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAEXAMPLE", "arn": "arn:aws:iam::111111111111:role/cm-kawahara.masahiro", "accountId": "111111111111", "userName": "cm-kawahara.masahiro" }, "webIdFederationData": {}, "attributes": { "creationDate": "2023-11-24T07:56:38Z", "mfaAuthenticated": "true" } } }, "eventTime": "2023-11-24T08:29:48Z", "eventSource": "secretsmanager.amazonaws.com", "eventName": "GetSecretValue", "awsRegion": "ap-northeast-1", "sourceIPAddress": "2222:4444:bbbb:3333:aaaa:3333:5555:bbbb", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", "requestParameters": { "secretId": "arn:aws:secretsmanager:ap-northeast-1:111111111111:secret:sample/secret-wPvfcr" }, "responseElements": null, "requestID": "620effff-2222-4444-9999-example", "eventID": "903caaaa-7777-4444-9999-example", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111111111111", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "secretsmanager.ap-northeast-1.amazonaws.com" }, "sessionCredentialFromConsole": "true" } }
今回は簡易的なフィルターで試しましたが、IAMロールやユーザーエージェントで絞ると、「想定外のプリンシパルからアクセスされたこと」を通知することにも活用できそうです。
おわりに
以上、EventBridgeイベントバスのアップデート紹介でした。
楽ちんに読み取りイベントを監視できるようになったのは嬉しいですね。 単一のCloudTrailイベント監視は全てEventBridgeに集約していいのではないでしょうか。
以上、参考になれば幸いです。