以下アップデートを紹介します。
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に集約していいのではないでしょうか。
以上、参考になれば幸いです。