[アップデート] Amazon SES が CloudTrail にメール送信イベントを記録できるようになりました
いわさです。
Amazon SES ではメール送信を行うことが出来ますが、CloudTrail で送信履歴を確認したいと考えたことのある方は多いのではないでしょうか。
AWS CloudTrail は AWS API の操作を証跡として残すことができるのですが全ての API が記録されるわけではありません。従来 Amazon SES のメール送信 API は記録されないイベントでした。
先日のアップデートで、このメール送信イベントが CloudTrail で記録できるようになるアップデートが来ました。ついに。
CloudTrail にはコントロールプレーン操作を記録する「管理イベント」と、データプレーン操作を記録する「データイベント」の 2 つのイベントがあり、後者のデータイベントはオプションで記録を有効化できるイベントです。
今回のメール送信イベントはデータイベントになります。
本日は実際に有効化してログ内容を確認してみました。ログ内容からどういう時に使えるイベントデータなのか考察したのでそのあたりを紹介します。
データイベントの有効化
データイベントはイベントレコード数に応じて追加の料金が発生します。[1]
証跡ごとに有効化が可能で、今回のイベントはマネジメントコンソールだと高度なイベントセレクターから選択が可能な次の 3 つのデータイベントタイプです。
SES には v1 と v2 の 2 つの API が現役で使えるのですが、以下の公式ドキュメントによるとどちらの API もサポートされています。
SendRawEmail も使えることから SMTP 経由での送信でも問題なく記録されそうに見受けられるのですが、公式ドキュメントには次のように記載されており、SMTP 送信の場合の記録はサポートされていないようです。
Email sending activity via SES SMTP Interface is not logged to CloudTrail events. For comprehensive activity logging, use the latest SES APIs in the SES API Reference and SES API v2 Reference.
ログを確認してみる
上記データイベントを有効化し、次のようにテスト送信してみました。
受信したイベントデータ全文がこちらです。
{
"eventVersion": "1.11",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AKIAIOSFODNN7EXAMPLE:hoge-iwasa",
"arn": "arn:aws:sts::123456789012:assumed-role/hoge-iwasa/hoge-iwasa",
"accountId": "123456789012",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AKIAIOSFODNN7EXAMPLE",
"arn": "arn:aws:iam::123456789012:role/hoge-iwasa",
"accountId": "123456789012",
"userName": "hoge-iwasa"
},
"attributes": {
"creationDate": "2025-04-14T19:33:52Z",
"mfaAuthenticated": "true"
}
}
},
"eventTime": "2025-04-14T20:02:52Z",
"eventSource": "ses.amazonaws.com",
"eventName": "SendEmail",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "203.0.113.1",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
"requestParameters": {
"fromEmailAddress": "hoge0415sender@mail1.tak1wa.com",
"configurationSetName": "hoge-config",
"destination": {
"toAddresses": [
"HIDDEN_DUE_TO_SECURITY_REASONS"
],
"bccAddresses": [
"HIDDEN_DUE_TO_SECURITY_REASONS"
],
"ccAddresses": [
"HIDDEN_DUE_TO_SECURITY_REASONS"
]
},
"content": {
"simple": {
"body": {
"text": {
"data": "HIDDEN_DUE_TO_SECURITY_REASONS",
"charset": "UTF-8"
},
"html": {
"data": "HIDDEN_DUE_TO_SECURITY_REASONS",
"charset": "UTF-8"
}
},
"subject": {
"data": "HIDDEN_DUE_TO_SECURITY_REASONS",
"charset": "UTF-8"
}
}
}
},
"responseElements": null,
"requestID": "9f1f3fa6-17d7-4568-a825-ea717abe7477",
"eventID": "951c9085-80c2-4dad-913a-cb3a4d5ef73a",
"readOnly": true,
"resources": [
{
"accountId": "123456789012",
"type": "AWS::SES::EmailIdentity",
"ARN": "arn:aws:ses:ap-northeast-1:123456789012:identity/hoge0415sender@mail1.tak1wa.com"
},
{
"accountId": "123456789012",
"type": "AWS::SES::ConfigurationSet",
"ARN": "arn:aws:ses:ap-northeast-1:123456789012:configuration-set/hoge-config"
}
],
"eventType": "AwsApiCall",
"managementEvent": false,
"recipientAccountId": "123456789012",
"eventCategory": "Data",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "email.ap-northeast-1.amazonaws.com"
},
"sessionCredentialFromConsole": "true"
}
まず、送信元以外の送信先や件名や本文などほぼ全てがHIDDEN_DUE_TO_SECURITY_REASONS
で記録されていました。本文が取れないのは SES の通知機能でも同じですが、送信先などもマスクの対象になってますね。なるほど。
ちなみに、次のようにサプレッションリストに登録されているメールアドレスへも送信してみましたが、その場合もメール送信 API の実行自体は成功したものとして記録されます。
さいごに
本日は Amazon SES が CloudTrail にメール送信イベントを記録できるようになったので使ってみました。
フィールドがマスクされているので、通常のメールログを残す目的で使うには色々と不足していそうな気がします。
使い方を考えてみましたが、メール送信がなぜか行われない時など、必要な時だけデータイベントを有効化し SES のメール送信 API がそもそも呼び出されているのかを確認する用途では使う感じになると思います。
それ以外では引き続き従来の通知機能を使い SNS など経由でメール送信アクティビティを記録しておくほうが使い勝手が良さそうだなと思いました。