AWS CloudTrail を使用した Amazon SES API コールのログ作成 - Amazon Simple Email Service

AWS CloudTrail を使用した Amazon SES API コールのログ作成

Amazon SES は、ユーザー、ロール、または AWS のサービスによって SES で実行されたアクションの記録を提供するサービスである AWS CloudTrail と統合されています。CloudTrail は、SES に対する API コールをイベントとしてキャプチャします。キャプチャされたコールには、SES コンソールからのコールと、SES API オペレーションへのコードのコールが含まれます。証跡を作成する場合は、SES のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [イベント履歴] で最新のイベントを表示できます。CloudTrail が収集した情報を使用して、SES に対して行われた要求、要求が行われた IP アドレス、要求を行ったユーザー、要求が行われた日時、および追加の詳細を判別できます。

設定や有効化の方法など、CloudTrail の詳細については、「AWS CloudTrail ユーザーガイド」を参照してください。

CloudTrail での SES 情報

CloudTrail は、AWS アカウントを作成すると、その中で有効になります。サポートされているイベントアクティビティが SES で発生すると、そのアクティビティは [イベント履歴] の他の AWS のサービスのイベントとともに、CloudTrail イベントに記録されます。最近のイベントは、AWS アカウント で表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

SES のイベントなど、AWS アカウントでのイベントの継続的な記録に関して、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべての AWS リージョン に適用されます。証跡は、AWS パーティションのすべてのリージョンからのイベントをログに記録し、指定した Amazon S3 バケットにログファイルを配信します。さらに、CloudTrail ログで収集したイベントデータをより詳細に分析し、それに基づいて対応するため、他の AWS サービスを構成できます。詳細については、次を参照してください:

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます:

  • リクエストが、ルート認証情報と AWS Identity and Access Management (IAM) ユーザー認証情報のどちらを使用して送信されたか。

  • リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。

  • リクエストが別の AWS サービスによって行われたかどうか。

詳細については、「CloudTrail userIdentity 要素」を参照してください。

CloudTrail の SES データイベント

データイベントでは、リソース上またはリソース内で実行されたリソースオペレーションについての情報が得られます。これらのイベントは、データプレーンオペレーションとも呼ばれます。データイベントは、多くの場合、高ボリュームのアクティビティです。デフォルトでは、CloudTrail はデータイベントをログ記録しません。CloudTrail のイベント履歴にはデータイベントは記録されません。

追加の変更がイベントデータに適用されます。CloudTrail の料金の詳細については、「AWS CloudTrail の料金」を参照してください。

注記

SES SMTP インターフェイスを介した E メール送信アクティビティは、CloudTrail イベントには記録されません。包括的なアクティビティログ記録を行うには、「SES API リファレンス」および「SES API v2 リファレンス」の最新の SES API を使用します。

次の表に、データイベントをログに記録できる SES リソースタイプを示します。データイベントタイプ (コンソール) 列には、CloudTrail コンソールの[データイベントタイプ]リストから選択する値が表示されます。[resources.type の値] 列には、AWS CLI または CloudTrail API を示す列を使用して高度なイベントセレクタを設定するときに指定する resources.type 値が表示されます。CloudTrail に記録されたデータ API 列には、リソース タイプの CloudTrail にログ記録された API コールが表示されます。

データイベントの SES リソースタイプ
データイベントタイプ (コンソール) resources.type 値 CloudTrail にログ記録されたデータ API
SES ID AWS::SES::EmailIdentity

SES:

SendEmail

SendRawEmail

SendTemplatedEmail

SendBulkTemplatedEmail

SES v2

SendEmail

SendBulkEmail

SES 設定セット

AWS::SES::ConfigurationSet

SES テンプレート AWS::SES::Template

SES:

SendTemplatedEmail

SendBulkTemplatedEmail

SES v2

SendEmail

SendBulkEmail

次の例は、--advanced-event-selectors パラメータを使用して、すべての SES E メール ID のすべてのデータイベントをログに記録する方法を示しています。

aws cloudtrail put-event-selectors \ --region Region \ --trail-name TrailName \ --advanced-event-selectors '[ { "Name": "Log SES data plane actions for all email identities", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::SES::EmailIdentity"] } ] } ]'

eventNamereadOnly、および resources.ARN フィールドでフィルタリングして、自分にとって重要なイベントのみをログに記録するように高度なイベントセレクタをさらに絞り込むことができます。これらのフィールドの詳細については、「AWS CloudTrail API リファレンス」の「AdvancedFieldSelector」を参照してください。データイベントのログ記録方法のその他の例については、証跡の「データイベントをログ記録する」を参照してください。

SES ログ記録の CloudTrail ログ配信シナリオ

CloudTrail は、アカウントとリソースの所有権、ID タイプ、リージョンなどの要因に基づいてログを配信します。次のマトリックスで、これらの要因の特定の組み合わせに基づいて、ログを誰にどこで配信するかについて説明します。

シナリオタイプ アカウントのロール リソース リクエストフロー ログ配信
単一クロスアカウント

アカウント A: リソース所有者

アカウント B: リクエスタ

E メール ID B → A の E メール ID ログは A と B の両方に配信される
フィードバック転送 E メール B → A のフィードバックメール ログは A と B の両方に配信される
複数のクロスアカウント

アカウント A: フィードバック E メール所有者

アカウント B: E メール ID 所有者

アカウント C: リクエスタ

フィードバック E メール (A)

E メール ID (B)

C → A のフィードバック E メール + B の E メール ID ログは A、B、C に配信される
グローバルエンドポイント (単一アカウント) アカウント A: 所有者とリクエスタ グローバルエンドポイント (プライマリ: eu‑west‑1 およびセカンダリ: us‑west‑2) A → グローバルエンドポイント リクエストを処理したリージョンの A に配信されたログ (eu‑west‑1 または us‑west‑2)
グローバルエンドポイント (クロスアカウント)

アカウント A: E メール ID 所有者

アカウント B: リクエスタ

E メール ID (A)

グローバルエンドポイント (B) (eu‑west‑1 および us‑west‑2)

B → グローバルエンドポイントを介した A の E メール ID ログはリクエストを処理したリージョンの A と B の両方に配信される (eu‑west‑1 または us‑west‑2)
注記
  • CloudTrail は、常にログをリクエスタアカウントに配信します。

  • リソース所有者は、オペレーションを実行しなかった場合でもログを受け取ります。

  • グローバルエンドポイントの場合、両方のアカウントには、設定されたすべてのリージョンで CloudTrail サブスクリプションが必要です。

  • リージョンの障害が発生すると、すべてのログが正常なリージョンに表示されます。

CloudTrail の SES 管理イベント

SES は、管理イベントを CloudTrail に提供します。管理イベントには、AWS アカウント 内のリソースの作成と管理に関連するアクションが含まれます。Amazon SES で、管理イベントには、ID や受信ルールの作成および削除などのアクションが含まれます。SES API オペレーションの詳細については、「SES API リファレンス」および「SES API v2 リファレンス」を参照してください。

SES の CloudTrail ログファイルエントリ

「トレイル」は、指定した Amazon S3 バケットにイベントをログファイルとして配信するように設定できます。CloudTrail のログファイルは、単一か複数のログエントリを含みます。イベントは任意ソースからの単一リクエストを表し、リクエストされたアクション、アクションの日時、リクエストパラメータなどの情報を含みます。CloudTrail ログファイルは、パブリック API 呼び出しの順序付けられたスタックトレースではないため、特定の順序では表示されません。

以下の例は、これらのイベントタイプの CloudTrail ログを示しています。

DeleteIdentity

{ "Records":[ { "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "AROA4DO2KAWIPZEXAMPLE:myUserName", "arn": "arn:aws:sts::111122223333:assumed-role/users/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROA4DO2KAWIPZEXAMPLE", "arn": "arn:aws:iam::111122223333:role/admin-role", "accountId": "111122223333", "userName": "myUserName" }, "attributes": { "creationDate": "2025-02-27T09:53:35Z", "mfaAuthenticated": "false" } } }, "eventTime": "2025-02-27T09:54:31Z", "eventSource": "ses.amazonaws.com", "eventName": "DeleteIdentity", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/2.23.4", "requestParameters": { "identity": "sender@example.com" }, "responseElements": null, "requestID": "50b87bfe-ab23-11e4-9106-5b36376f9d12", "eventID": "0ffa308d-1467-4259-8be3-c749753be325", "readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "email.us-east-1.amazonaws.com" } } ] }

VerifyEmailIdentity

{ "Records":[ { "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "AROA4DO2KAWIPZEXAMPLE:myUserName", "arn": "arn:aws:sts::111122223333:assumed-role/users/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROA4DO2KAWIPZEXAMPLE", "arn": "arn:aws:iam::111122223333:role/admin-role", "accountId": "111122223333", "userName": "myUserName" }, "attributes": { "creationDate": "2025-02-27T09:53:35Z", "mfaAuthenticated": "false" } } }, "eventTime": "2025-02-27T09:56:20Z", "eventSource": "ses.amazonaws.com", "eventName": "VerifyEmailIdentity", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/2.23.4", "requestParameters": { "emailAddress": "sender@example.com" }, "responseElements": null, "requestID": "eb2ff803-ac09-11e4-8ff5-a56a3119e253", "eventID": "5613b0ff-d6c6-4526-9b53-a603a9231725", "readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "email.us-east-1.amazonaws.com" } } ] }

シンプルなコンテンツを含む SendEmail

{ "Records":[{ "eventTime": "2025-01-24T11:43:00Z", "eventSource": "ses.amazonaws.com", "eventName": "SendEmail", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/2.23.4 md/awscrt#0.23.4", "requestParameters": { "destination": { "bccAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"], "toAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"], "ccAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"] }, "message": { "subject": { "charset": "UTF-8", "data": "HIDDEN_DUE_TO_SECURITY_REASONS" }, "body": { "html": { "charset": "UTF-8", "data": "HIDDEN_DUE_TO_SECURITY_REASONS" }, "text": { "charset": "UTF-8", "data": "HIDDEN_DUE_TO_SECURITY_REASONS" } } }, "source": "sender@example.com" }, "responseElements": null, "additionalEventData": { "sesMessageId": "01000100a11a11aa-00aa0a00-00a0-48a8-aaa7-a174a83b456a-000000" }, "requestID": "ab2cc803-ac09-11d7-8bb8-a56a3119e476", "eventID": "eb834e01-f168-435f-92c0-c36278378b6e", "readOnly": true, "resources": [{ "accountId": "111122223333", "type": "AWS::SES::EmailIdentity", "ARN": "arn:aws:ses:us-east-1:111122223333:identity/sender@example.com" }], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "111122223333", "eventCategory": "Data", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "email.us-east-1.amazonaws.com" } } ] }

テンプレートに基づくコンテンツを含む SendEmail

{ "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "AROA4DO2KAWIPZEXAMPLE:myUserName", "arn": "arn:aws:sts::111122223333:assumed-role/users/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROA4DO2KAWIPZEXAMPLE", "arn": "arn:aws:iam::111122223333:role/admin-role", "accountId": "111122223333", "userName": "admin-role" }, "attributes": { "creationDate": "2025-03-05T18:51:06Z", "mfaAuthenticated": "false" } } }, "eventTime": "2025-03-05T19:16:29Z", "eventSource": "ses.amazonaws.com", "eventName": "SendEmail", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/2.23.4", "requestParameters": { "fromEmailAddress": "sender@example.com", "destination": { "toAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"], "bccAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"], "ccAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"] }, "emailTags": [{ "value": "test", "name": "campaign" }, { "value": "cli-test", "name": "sender" }], "replyToAddresses": ["HIDDEN_DUE_TO_SECURITY_REASONS"], "content": { "template": { "templateData": "HIDDEN_DUE_TO_SECURITY_REASONS", "templateName": "TestTemplate" } } }, "responseElements": null, "additionalEventData": { "sesMessageId": "01000100a11a11aa-00aa0a00-00a0-48a8-aaa7-a174a83b456a-000000" }, "requestID": "50b87bfe-ab23-11e4-9106-5b36376f9d12", "eventID": "0ffa308d-1467-4259-8be3-c749753be325", "readOnly": true, "resources": [{ "accountId": "111122223333", "type": "AWS::SES::EmailIdentity", "ARN": "arn:aws:ses:us-east-1:111122223333:identity/sender@example.com" }, { "accountId": "111122223333", "type": "AWS::SES::Template", "ARN": "arn:aws:ses:us-east-1:111122223333:template/TestTemplate" }], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "111122223333", "eventCategory": "Data", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "email.us-east-1.amazonaws.com" } }