📚

SESの送信履歴を確認したい

2022/07/27に公開

このページについて

Amazon SESは、デフォルトではメールの送信履歴を確認することができません。
今回、Amazon SESの送信履歴を確認できるように Amazon Kinesis Data Firehose + Amazon S3 構成を設定してみました。
設定の流れをメモしておきます。

OpenSearch ServiceではなくS3を採用

AWSドキュメントには以下のサポートページがあり、 Amazon Kinesis Data Firehose + Amazon OpenSearch Service で構成することが記載されています。
しかし、OpenSearch Serviceの料金が高く、今回は不採用としています。

解決方法
Amazon OpenSearch Service と Amazon Kinesis を使用して、Amazon SES 送信履歴を保存および表示できます。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ses-email-sending-history/

OpenSearch Serviceの構成にすると、利便性(可読性)は良いですが、一方でコストがかかるので、とりあえずログを出しておきたい用途だけであれば、S3に出力しておくだけでも十分かと思います。

https://aws.amazon.com/jp/opensearch-service/pricing/

構成

設定概要

  • 送信履歴保管用S3バケット作成
  • 送信履歴転送用Firehose配信ストリーム作成
  • SES Configuration Sets用IAMロール作成
  • SES Configuration Sets設定
  • S3で確認

送信履歴保管用S3バケット作成

特にポイントはありません。
必要な設定でS3バケットを作成してください。

送信履歴転送用Firehose配信ストリーム作成

DestinationをS3にするだけで、基本的にはデフォルト設定でOKです。

設定項目 内容
Source Direct PUT
Destination Amazon S3
S3 bucket 作成したS3バケットを指定
S3 bucket prefix -
S3 bucket error output prefix error/{firehose:error-output-type}/

error-output-type は、失敗の理由に応じて、次の文字列のいずれかとして評価されるため、これだけ設定しておきます。

  • processing-failed
  • AmazonOpenSearchService-failed
  • splunk-failed
  • format-conversion-failed
  • http-endpoint-failed

https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/s3-prefixes.html

SES Configuration Sets用IAMロール作成

IAMポリシー

ポリシードキュメント

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "0",
            "Effect": "Allow",
            "Action": "firehose:ListDeliveryStreams",
            "Resource": "*"
        },
        {
            "Sid": "1",
            "Effect": "Allow",
            "Action": "firehose:*",
            "Resource": "arn:aws:firehose:*:{accountid}:deliverystream/{deliverystream_name}"
        }
    ]
}

IAMロール

アタッチするポリシー: 上記作成するIAMポリシー

信頼されたエンティティ

{
  "Version": "2012-10-17",
  "Statement": [
      {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ses.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceAccount": "{accountid}",
                    "AWS:SourceArn": "arn:aws:ses:ap-northeast-1:{accountid}:configuration-set/{configurationset_name}"
                }
             }
      }
    ]
}

SES Configuration Sets設定

SES Configuration Setを作成し、Destinationとして以下を設定する。

[SESコンソール]→[作成したSES Configration Set]→[Event destinations]の Add destination から設定していく。

Event typesについては、今回は全て選択しています。

- Sends
- Rendering failures
- Rejects
- Deliveries
- Hard bounces
- Complaints
- Delivery delays
- Subscriptions
- Opens
- Clicks

Destination Type は、上記作成したFirehose配信ストリームを選択し、IAMロールに上記作成したSES Configuration Sets用IAMロールを設定します。

設定完了したら、そのSES Configuration Setを、該当SES identityのDefault configuration setに設定します。

S3で確認

SESからテストメールしてみて、S3にSESの送信履歴が入ってくることを確認できればOKです。

以下のようなJSONが入ります。

{
	"eventType": "Delivery",
	"mail": {
		"timestamp": "2022-07-26T04:20:30.136Z",
		"source": "aaa@bbb.com",
		"sourceArn": "arn:aws:ses:ap-northeast-1:{accountid}:identity/bbb.com",
		"sendingAccountId": "{accountid}",
		"messageId": "0106018238bc2338-965619e3-c059-4dae-a52d-2e6cd435c974-000000",
		"destination": [
			"xxx@xxx"
		],
		"headersTruncated": false,
		"headers": [
			{
				"name": "Date",
				"value": "Tue, 26 Jul 2022 04:20:30 +0000 (UTC)"
			},
			{
				"name": "From",
				"value": "aaa@bbb.com"
			},
			{
				"name": "To",
				"value": "xxx@zzz"
			},
			{
				"name": "Message-ID",
				"value": "<268354222.10805.1658809230082@68756d9cfa11>"
			},
			{
				"name": "Subject",
				"value": "XXXXXXX"
			},
			{
				"name": "MIME-Version",
				"value": "1.0"
			},
			{
				"name": "Content-Type",
				"value": "multipart/mixed;  boundary=\"----=_Part_10803_1198066364.1658809230080\""
			}
		],
		"commonHeaders": {
			"from": [
				"aaa@bbb.com"
			],
			"date": "Tue, 26 Jul 2022 04:20:30 +0000 (UTC)",
			"to": [
				"xxx@zzz"
			],
			"messageId": "XXXXXX-965619e3-c059-4dae-a52d-2e6cd435c974-000000",
			"subject": "XXXXXXXXXXX"
		},
		"tags": {
			"ses:operation": [
				"SendRawEmail"
			],
			"ses:configuration-set": [
				"{configurationset_name}"
			],
			"ses:source-ip": [
				"xx.xx.xx.xx"
			],
			"ses:from-domain": [
				"bbb.com"
			],
			"ses:caller-identity": [
				"xxx"
			],
			"ses:outgoing-ip": [
				"xx.xx.xx.xx"
			]
		}
	},
	"delivery": {
		"timestamp": "2022-07-26T04:20:33.705Z",
		"processingTimeMillis": 3569,
		"recipients": [
			"xxx@zzz"
		],
		"smtpResponse": "250 2.6.0 <0106018238bc2338-965619e3-c059-4dae-a52d-2e6cd435c974-000000@ap-northeast-1.amazonses.com> [InternalId=7473243098079, Hostname=xxx] 17068 bytes in 0.146, 113.697 KB/sec Queued mail for delivery",
		"reportingMTA": "e234-51.smtp-out.ap-northeast-1.amazonses.com"
	}
}
GitHubで編集を提案
アイレット株式会社

Discussion