Amazon SES利用時に採用すべき送信ドメイン認証

今回はタイトル通り、Amazon SES(以下SES)利用時に採用する送信ドメイン認証の選び方についてです。
SESっていくつか送信ドメイン認証に対応してるけど、結局どこまで対応していればいいの？と思う人も多いと思います。
なので、とりあえずここまではやっておいた方が良いと思われる送信ドメイン認証とその理由について書いていきます。
各送信ドメイン認証の仕組みやSESへの設定方法についてはネットにたくさん転がっているので、本文ではあまり詳しく書きません。書いてあるサイトのリンクを載せていきます。
#送信ドメイン認証[^1]とは
[^1]: [SendGridからメール送信する場合のSPFとDKIMの認証の仕組み – 前編](https://sendgrid.kke.co.jp/blog/?p=10883)
メール送信元のなりすましを防ぐ仕組みです。
受信側のメールサーバは送信側DNSサーバから認証情報を取得し、メールがなりすまされていないかをチェックします。
また、認証方法にはSPF等いくつか種類があります。
![送信ドメイン認証.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266372/07be7d7d-c82c-533b-3c2b-f8b95b982efb.png)

#SESが対応している送信ドメイン認証

SESが対応している送信ドメイン認証は以下があります。
1. **SPF**
2. **DKIM**

また送信ドメイン認証失敗時の動作規格としてDMARCに対応しています。
####各送信ドメイン認証の仕組み
https://sendgrid.kke.co.jp/blog/?p=10121
https://sendgrid.kke.co.jp/blog/?p=1781

####SES利用時の設定方法
https://dev.classmethod.jp/cloud/amazon-ses-production/
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/dmarc.html

#SESでとりあえず対応させておくべき送信ドメイン認証
結論から言うと、
### カスタムMAIL FROMドメインを使用したSPF認証
### Easy DKIMを使用したカスタムドメインによるDKIM認証
### DMARCは対応しない
です。この選択肢が一番導入コストや手間が少なく、配信性能を確保することができます。
それぞれの理由について説明していきます。

####1. SPF認証
SESでSPFチェックに合格するための設定方法は2つあります。
1つはデフォルトのMAIL FROM(envelop from)ドメインを使用することです。
デフォルトのMAIL FROMドメインはamazonses.comかそのサブドメインになります。
こちらの場合は利用者側で設定等は必要ありません。デフォルトで有効になっています。
もう1つはカスタムMAIL FROMドメインを使用することです。
カスタムMAIL FROMドメインはFromアドレスドメインのサブドメインである必要があります。
こちらの場合はカスタムMAIL FROMドメインを管理するDNSサーバに指定されてMXレコードとTXTレコードを登録する必要があります。


公式ドキュメントにはDMARC認証を行う場合はカスタムMAIL FROMドメインでのSPF認証を使いなさいとだけ書いてありますが、そうとは限りません。
受信側のメールサーバの設定次第ではFromアドレスドメインにSPF認証用レコードが登録されていないと、SPFチェックが合格しない場合があります。
特に携帯キャリアの受信サーバはその傾向があります。

試しにgmail.comのメールアドレス宛にSPF認証方法でメール送信して、認証結果を確認してみます。



##gmail.com

####・デフォルトMAIL FROMドメイン

### <i class="fa fa-cube" style="font-size:1em;"></i> 記述例
~~~md
Received-SPF: pass (google.com: domain of 01000169fb770b0f-e4ef3cce-0d67-4f5f-b199-b954927b1395-000000@amazonses.com designates 54.240.8.25 as permitted sender) client-ip=54.240.8.25;
~~~

####・カスタムMAIL FROMドメイン

### <i class="fa fa-cube" style="font-size:1em;"></i> 記述例
~~~md
Received-SPF: pass (google.com: domain of 01000169fb7a0646-dbd56c3f-3751-4155-a0c4-c30a0cb3fbc8-000000@mail2.testdomain.com designates 54.240.8.27 as permitted sender) client-ip=54.240.8.27;
~~~

gmail.comであればどちらも認証成功となりました。

一般的にはカスタムMAIL FROMドメインを使用した方が、SPF認証ルールに合格する確率が上がると言えます。

今回はどちらもpassとなりましたが、受信サーバによってはFailやsoftfailになる場合もあります。
携帯キャリアの場合だとデフォルトMAIL FROMドメインのままだと受信できないという記事[^2]もあるため、極力カスタムMAIL FROMドメインを採用した方が良いと思われます。設定もDNSサーバにレコードを登録するだけなので。

[^2]: [AmazonSESから携帯キャリアメールに届く確率を上げる](https://qiita.com/shouta-dev/items/a33c55e0df154012c557)

####2.DKIM認証

SESのDKIM認証方法にはEasy DKIMと手動でのDKIM署名があります。

手動でのDKIM署名は利用者側でDKIM署名を生成して、メッセージに付与しますが、特別な理由が無い限りはEasy DKIMを使用すれば良いと思われます。

デフォルトでSESを使用して送信するメッセージにはamazonses.comドメインのDKIM署名が付与されます。

また、Easy DKIMを用いてカスタムドメインでのDKIM署名を付与することができます。その場合はDNSサーバにDKIM用のレコードを登録する必要があります。

DKIMもSPFと同様にカスタムドメインとDKIM署名のドメインが一致している方がDKIM認証が合格しやすいと言われます。

こちらも実際にgmail.comで認証結果を確認してみます。


##gmail.com

####・デフォルトドメインによるDKIM署名


### <i class="fa fa-cube" style="font-size:1em;"></i> 記述例
~~~md
Authentication-Results: mx.google.com; dkim=pass header.i=@amazonses.com header.s=6gbrjpgwjskckoa6a5zn6fwqkn67xbtw header.b=TgurOS1F;
~~~

####・カスタムドメインによるDKIM署名
### <i class="fa fa-cube" style="font-size:1em;"></i> 記述例
~~~md
Authentication-Results: mx.google.com; dkim=pass header.i=testdomain.com header.s=sceak63pov65lrpygtei3u4f4b7qf7gm header.b=MhhgNK4u; dkim=pass header.i=@amazonses.com header.s=6gbrjpgwjskckoa6a5zn6fwqkn67xbtw header.b=HL5XKTSY;
~~~

gmail.comはどちらも認証成功となりました。
しかし、gmailの場合はDKIM署名をカスタムドメインにしておくと、メール表示時に経由表示が無くなります。
https://www.cuenote.jp/library/marketing/gmail_dkim.html

このことからもカスタムドメインによるDKIM署名の方が信頼度も高いため、

極力カスタムドメインによるDKIM署名を採用した方が良いと思われます。設定もDNSサーバにレコードを登録するだけなので。

####3.DMARC

SESではSPFもしくはDKIMにおいてカスタムドメインを用いた認証を行っているとDMARCに準拠させることができます。

DMARCを用いることで、認証結果情報をドメイン所有者にレポートすることが可能です。

しかし、認証結果情報はXML形式で送付されるため、これらの認証結果情報を人間が理解できるよう可視化・集計するためには、

別途DMARCレポート解析用のツールを用意する必要があります。

 

ツールの用意やDMARCレポートの運用を考えることは敷居が高いため、とりあえずは対応しなくても良いと思われます。

 

#まとめ

SESで対応している送信ドメイン認証でどこまで対応すれば良いかについて書いてみました。

基本は

####・カスタムMAIL FROMドメインを使用したSPF認証

####・Easy DKIMを使用したカスタムドメインによるDKIM認証

####・DMARCは対応しない

が良いのかと思います。

 

DNSサーバへのレコード登録の調整が難しい、C向けのシステムじゃないからキャリアにメールなんて送らない、などがあればわざわざカスタムドメインを使用しなくても良いと思います。

以上です。

 

#TIPS:SESと日本携帯キャリアの相性

カスタムドメインを使用したSPF認証、DKIM認証に対応させていたとしても、携帯キャリアのメールアドレスで受信できない場合があるようです。

理由の1つとして、SESサーバのIPアドレスレンジが海外だからと自分は思っています。(東京リージョンにSESは来るのだろうか)

そのため、キャリアへのメール配信を行う場合はおとなしくsendgrid等の別メールサービスを採用するのが良いのかもしれません。