【AWS備忘】Amazon SESのメール送信ログをS3に保存《いれ》る

# 1.目的

Amazon SESのメール送信ログをS3に保存《いれ》る


# 2.利用するAWSサービス
Amazon SES
Amazon Data Firehose
IAM
S3

# 3.構築
※SESは設定完了している前提

## 3.1.S3の作成
ログ格納先のS3バケットを作成する
特別なアクセス許可などの設定は必要なし


## 3.2.Amazon Data Firehose ストリームの作成
Amazon Data Firehose>Firehoseストリーム>Firehoseストリームを作成へ遷移する
画像赤枠について入力する
ソース：Direct PUT
送信先：Amazon S3
Firehoseストリーム名：任意のストリーム名
送信先の設定：作成したログを格納したいS3バケット
S3 バケットと S3 エラー出力プレフィックスタイムゾーン:Asia/Tokyo
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/5a816a33-8f30-48a3-bb9f-8a0001b68de5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/6b6db960-e06b-4955-92cb-723c9ec1b2f3.png)


## 3.3.SES設定セットで利用するIAMロールの作成
IAMロール、IAMポリシーを作成する

### IAMポリシー：json
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "【上記で作成したFirehoseストリームのarn】"
        }
    ]
}
```
### IAMロール：信頼されたエンティティ(デフォルトで存在しなかったのでカスタム)
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/eed1a83b-8b21-44ea-b40c-cd0a2df8f799.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/fcfa45b2-a077-4f83-9fb1-cda05fb71b61.png)



## 3.4.SES設定セットの作成
Amazon SES>設定セット>セットの作成から設定セットを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/53f99f77-a202-4dfa-a0e3-efc5e4cc98b0.png)


Amazon SES>設定セット>作成した設定セット>イベント送信先からイベント送信先を追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/30136422-8ecc-444a-8ce0-c98141ba5cac.png)


イベントタイプは開封数とクリック数以外チェックをつける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/e6c6c851-5f40-4522-ae15-f3d9e29a1606.png)


送信先の指定は以下のように設定する
送信先タイプ：Amazon Kinesis Data Firehose
名前：任意
配信ストリーム：作成したFirehoseストリーム
IAMロール：作成したIAMロール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/34079fa2-3781-40bb-88e6-e98244638853.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/e2f55d8a-a12c-4724-baa5-f3734914bb30.png)



## 3.5.デフォルト設定セットの設定
Amazon SES>設定：ID>ログを取りたいID>設定セット>デフォルト設定セットの編集からデフォルト設定セットを設定する
デフォルト設定セットの割り当て：チェック
デフォルト設定セット：作成した設定セット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/a5cc571e-a550-4d90-a86d-2ae1664b8d05.png)


# 4.動作確認
テストメールを送信してみる

テストメールが届き

S3を確認すると、送信ログが格納されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/cff069dc-ea2a-4480-be17-59e2b05410f9.png)


### ログ内容
```
{"eventType":"Delivery","mail":{"timestamp":"2025","source":"【送信元メールアドレス】","sourceArn":"【SESarn】","sendingAccountId":"【AWSアカウントID】","messageId":"【メッセージID】","destination":["【送信先メールアドレス】"],"headersTruncated":false,"headers":[{"name":"From","value":"【送信元メールアドレス】"},{"name":"To","value":"【送信先メールアドレス】"},{"name":"Subject","value":"【件名】"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"multipart/alternative;  boundary=\"----=_Part_41179\""}],"commonHeaders":{"from":["【送信元メールアドレス】"],"to":["【送信先メールアドレス】"],"messageId":"【メッセージID】","subject":"【件名】"},"tags":{"ses:source-tls-version":["TLSv1.3"],"ses:operation":["SendEmail"],"ses:configuration-set":["【設定セット名】"],"ses:outgoing-tls-version":["TLSv1.3"],"ses:source-ip":["【送信元IP】"],"ses:from-domain":["【送信元ドメイン】"],"ses:caller-identity":["【呼び出し元ID】"],"ses:outgoing-ip":["【送信IPアドレス】"]}},"delivery":{"timestamp":"2025Z","processingTimeMillis":870,"recipients":["【送信先メールアドレス】"],"smtpResponse":"250 2.6.0 <【メッセージID】@ap-northeast-1.amazonses.com> [InternalId=785, Hostname=OSOM] 14475 bytes in 0.048, 293.052 KB/sec Queued mail for delivery","remoteMtaIp":"【受信サーバーIP】","reportingMTA":"【送信サーバー名】"}}

{"eventType":"Send","mail":{"timestamp":"202Z","source":"【送信元メールアドレス】","sourceArn":"【SESarn】","sendingAccountId":"【AWSアカウントID】","messageId":"【メッセージID】","destination":["【送信先メールアドレス】"],"headersTruncated":false,"headers":[{"name":"From","value":"【送信元メールアドレス】"},{"name":"To","value":"【送信先メールアドレス】"},{"name":"Subject","value":"【件名】"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"multipart/alternative;  boundary=\"----=_Part""}],"commonHeaders":{"from":["【送信元メールアドレス】"],"to":["【送信先メールアドレス】"],"messageId":"【メッセージID】","subject":"【件名】"},"tags":{"ses:source-tls-version":["TLSv1.3"],"ses:operation":["SendEmail"],"ses:configuration-set":["【設定セット名】"],"ses:source-ip":["【送信元IP】"],"ses:from-domain":["【送信元ドメイン】"],"ses:caller-identity":["【呼び出し元ID】"]}},"send":{}}



```

### ログのイベントについて
sendイベント
メールが送信されたことを示す
送信時刻、送信元、宛先、メッセージIDなどを含む

Deliveryイベント
メールが正常に配信されたことを示す
配信時刻、処理時間、SMTPレスポンス、受信サーバーのIPアドレスなどの詳細を含む