AWS SES

執筆者:

カテゴリ:

AWS の SES でのメール受信について。まず、SES がメールを受信して S3 に保存するまでをやっつける。

仕様

Amazon SES で以下のドメイン宛メールをすべて受信し、raw MIME のまま S3 へ保存する。

  • sampledomain.com
  • sub.sampledomain.com

保存先は共通の S3 バケットとし、ドメインごとに prefix を分離する。

s3://mail-in-bucket/
├── sampledomain/
│   └── raw/
└── sub-sampledomain/
    └── raw/

前準備

リージョン ap-northeast-1 に以下の Identity を作成するが、先にドメインの MX レコードを変更しておく。今回 Route 53 で行っているが、BIND のゾーンファイルなら以下のような感じになるはず。

@    300    IN    MX    10 inbound-smtp.ap-northeast-1.amazonaws.com.
sub    300    IN    MX    10 inbound-smtp.ap-northeast-1.amazonaws.com.

mail-in-bucket バケットも以下のような設定で作成しておく。

  • Bucket type: General purpose
  • Object Ownership: Bucket owner enforced
  • ACL: Disabled
  • Block Public Access: All enabled
  • Versioning: Disabled
  • Default encryption: SSE-S3
  • Object Lock: Disabled

ID の作成 < SES

前に挙げた sampledomain.com と sub.sampledomain.com の ID を作成する。

ID の作成画面で ID タイプでドメインを選択すると、以下の内容を入力できる。

  • Domain: ドメイン名
  • Assign a default configuration set: OFF ← 送信時に使用
  • Assign to a tenant: OFF ← 送信時に使用
  • Use a custom MAIL FROM domain: OFF ← 送信時に使用

ドメインの検証は Easy DKIM で行った。

  • DKIM signing key length: RSA_2048_BIT
  • Publish DNS records to Route53: ON
  • DKIM signatures: ON

しばらくすると ID ステータスが検証済みになるはず。

Receipt Rule Set < SES

Receipt Rule Setとして mail-in を作成し、Active に設定した。

sampledomain.com

  • Rule name: sampledomain
  • Recipient condition: sampledomain.com
  • TLS: Optional
  • Spam/virus scanning: Enabled

S3 Action も設定する。

  • Bucket: mail-in-bucket
  • Object key prefix: sampledomain/raw/
  • Message encryption: OFF
  • IAM role: mail-in-bucket-ses-role
  • SNS: なし

sub.sampledomain.com

  • Rule name: sub-sampledomain
  • Recipient condition: sub.sampledomain.com
  • TLS: Optional
  • Spam/virus scanning: Enabled

S3 Action も設定する。

  • Bucket: mail-in-bucket
  • Object key prefix: sub-sampledomain/raw/
  • Message encryption: OFF
  • IAM role: mail-in-bucket-ses-role
  • SNS: なし

Role < IAM

SES から S3 に書き込むためのロール mail-in-bucket-ses-role を作成した。

S3 書込権限

インラインポリシー mail-in-bucket-s3-put を作成。s3:PutObject を許可した。

対象リソースは以下の 2 つ。

  • arn:aws:s3:::mail-in-bucket/sampledomain/raw/*
  • arn:aws:s3:::mail-in-bucket/sub-sampledomain/raw/*

SES によるメール保存には不要なため、s3:GetObject や s3:DeleteObject、s3:ListBucket は設定していない。

信頼ポリシー

Principal は ses.amazonaws.com で、許可するアクションは sts:AssumeRole で、AWS:SourceAccount は自分のアカウント ID。AWS:SourceArn は arn:aws:ses:ap-northeast-1:<アカウントID>:receipt-rule-set/mail-in:receipt-rule/sampledomain と arn:aws:ses:ap-northeast-1:<アカウントID>:receipt-rule-set/mail-in:receipt-rule/sub-sampledomain に。* でまるっと括らずつくった 2 つのルールセットを指定している。

受信テスト

これで外部からメールを送信して、S3 にオブジェクトができていることを確認する。

わかったこと

SES で受信したメールには Delivered-To ヘッダが付加されていない。しかし、SES 受信時のイベントには envelope recipient が含まれている。

通常 foo@sampledomain.com と bar@sampledomain.com 宛のメールというのは、それぞれのメールボックスに配送される。受信時に RCPT TO が foo@sampledomain.com と bar@sampledomain.com の 2 回あったときに S3 に保存されるメールとしてはいくつになるのかがまだ不明。

コメント

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です