AWS SESでのメール送信時にSPFの設定は必要だよ！

# AWS SESでのSPFのについて

SESを利用してSPFの検証用にDNSの設定はいらないよ！と複数の人がpostをしてる。
どう考えてもそうなるはずないのにな―と言う気持ちがこのpostになりました。

AWSのSESでメールを送る際のSPF設定についてまとめておきます。（2016/09/16時点）

同じ用途で利用されるがDKIMについては特に触れない。設定したらいいと思う。

# とりあえず結論

過去にはAWSでSESでメール送信するときにSPFのためのDNS設定は不要だった、**2016年の現在は送信ドメイン認証のために、SPFのDNS設定を実施すべき**。

## いままでのSES

現在もデフォルトでは MAIL FROM: をSESが書き換えて送信ドメインをSESのものとしています。
※試したときには amazonses.com になってました。

2014-10-15時点でのAmazon SES Blogにpostされた["SPF and Amazon SES"](http://sesblog.amazon.com/post/Tx3IREZBQXXL8O8/SPF-and-Amazon-SES)では以下の記載があります。

> If you are using Amazon SES to send from your domain, you need to know that the current SES implementation involves sending emails from an SES-owned MAIL-FROM domain. This means that you do not need to make any changes to your DNS records in order for your emails to pass SPF authentication.

意訳すると
> 自ドメインからメールを送信するためにはAmazon SESを使用している場合、現在のSESの実装では、 SESの所有する MAIL FROMドメインからメールを送信することすることを知っておく必要があります。これは、あなたのメールがSPF認証をpassするために、 DNSレコードを変更する必要がないことを意味します。

と、この時点ではDNSの設定変更がいらないことは明示されていたようです。

しかし、この設定が不要であることと関連して以下のような記述もあります。
> As explained above, your MAIL-FROM domain is currently an SES domain, which doesn’t match your sending domain (From header). As a result, SPF authentication will be misaligned for DMARC purposes.

適当に意訳すると、

> MAIL-FROMドメインはSESのドメインになっているため、自身の送信ドメインとマッチしない。その結果SPFはDMARCの目的では使えない。

とかかれており、DMARCとやらの目的で利用できないようです。

DMARCとは[AWSのドキュメント](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/dmarc.html)から引用すると以下のようなものです。

> DMARC (Domain-based Message Authentication, Reporting and Conformance) は、SPF (Sender Policy Framework) およびドメインキーアイデンティファイドメール (DKIM) を使用してメールスプーフィングを検出するためのメール認証プロトコルです。

要するに、メールの受診時に送信元のドメインが正しいか検証する枠組みです。
検証結果が正しければそのドメインからのメールだとみなし、検証結果が正しくなければ送信ドメインを詐称したメールとして検出できる。と言うものです。

SESを用いてメールを送信した際には、受信側からみるとamazonses.comからのメールであるとSPFの検証をpassできていたがDMARC目的では価値をなしません。（実際の送信者（SESの利用者）とSPFの検証先（SESそのもの）が一致しないため）
本来やるべきは、SESのサービスを利用してメールを送ろうとしたドメインに対してSPF検証を実施しpassすることです。

SES利用時にDMARC目的でのSPFを設定しなければ、メールの配信元はamazonses.com とみなされ、他のSES利用者と同じ配信元と受信側MTAに判断されるため、それにより意図しないメール受信時のフィルタリングを受ける恐れ等が出てきます。


自分はSPFと言うものはそもそもDMARCの目的を達成することが必須と思っていたので、なんかおかしいな？と思っていたようです。

##  進化してたSES

2016-03-16にpostされた[Amazon SES Now Supports Custom MAIL FROM Domains](
http://sesblog.amazon.com/post/TxZAFC38KWZ1FE/Amazon-SES-Now-Supports-Custom-MAIL-FROM-Domains) によるとDMARCの目的でのSPFが設定可能になったようです。

日本語で記載されている[AWSのドキュメント](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/dmarc.html)の"SPFによるDMARC準拠"によると

1. SPFチェックに合格すること（送信ドメインと送信元IPアドレスによる通常の検証）
2. メールヘッダのFromとSMTPのMAIL FROMを一致させる、あるいはメールヘッダのFromのサブドメインをMAIL FROMに設定する。

を満たすことでメール送信にSESを利用したときもDMARC目的でのSPFの検証が成功する。
※2はだいぶ端折ってるのでちゃんとドキュメントを見たほうが良いです。

この場合、SESが送信元MTAとして利用されることをDNSにSPFレコード/TXTレコードで公開しなければならないためDNS設定を実施する必要がでてきます。

# まとめ

メールの送信ドメイン認証はメールを確実に届けることを支える技術なのでちゃんと設定したほうがいいとおもうよ。

# ソース

[Amazon Simple Email Service ドキュメント]
(https://aws.amazon.com/jp/documentation/ses/)

Amazon SES Blog

[SPF and Amazon SES](http://sesblog.amazon.com/post/Tx3IREZBQXXL8O8/SPF-and-Amazon-SES)

[Amazon SES Now Supports Custom MAIL FROM Domains](http://sesblog.amazon.com/post/TxZAFC38KWZ1FE/Amazon-SES-Now-Supports-Custom-MAIL-FROM-Domains)