🙆

Route53で取得したドメインでSESのSPF、DKIM、DMARCを設定してみた

2024/02/09に公開

はじめに

Gmailでは2024年2月以降、ガイドラインが改定され、SPF、DKIMの設定が必須となりました。Gmailアカウントに1日あたり5000件以上のメールを送信する場合にはDMARCの設定までが必要となります。

本記事は、Route53で取得したドメインを用いて、Amazon SESのSPF、DKIM、DMARCの有効化した際に実施たした際の挙動をまとめていきます。(手順に関しては、参考にしたドキュメントを記載しております。)

ドメインの取得

Route53でドメインの取得をします。手順はドキュメントを参考にしてください。
※ドメインの取得には、15ドル程度かかるためご注意ください。

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/domain-register.html

IDの作成

SESを利用可能にするために、ドメインIDの作成とDKIMの検証を行います。

今回は、example.comのドメインを用い、region(us-east-1)に設定を実施したと仮定して、説明します。

手順は以下を参考にしてください。
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/creating-identities.html#verify-domain-procedure

DKIMの検証が終わると、DKIM setup SUCCESS for example.com in US East (N. Virginia) regionといった件名でメールが届きます。検証時は、数分程度でメールが届きました。

サンドボックスの解除

今回は、Gmailに送信した際の挙動を確認したいため、サンドボックスの解除を行います。

初期状態では、Amazon SESからメールを送信できる送信先は、検証したドメインのメールアドレスのみです。Route53で取得したドメインの、Gmailアドレスはもちろん存在しないため、サンドボックスの解除を行い、Gmailに対しメールを送信できるようにします。

手順は以下を参考にしてください。
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/request-production-access.html

筆者の環境では1日ほど待つと、申請が受理され、SES: Production Accessといった件名のメールが届きました。サンドボックス解除申請時に記載した内容によっては、申請受理までに時間がかかるかもしれません。

メールの送信 Part1

サンドボックスが解除され、SESからexample.com以外のドメインへメールを送信できるようになりました。
現段階では、DKIMの検証のみが完了した状態となりますが、SESからGmailに対して、メールを送信します。

Gmailに届いたメールのソースを確認するとSPFとDKIMをパスしていることが確認できます。
ドメイン部分はSESで登録したドメイン(example.com)が表示されていました。

実際メッセージのソースを確認すると、SPF、DKIMが、それぞれ以下のドメインで認証されていることがわかりました。

SPF DKIM
@amazonses.com @amazonses.com@example.com

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-spf.html

DMARC設定

続いて、DMARCの設定を行います。今回は、検証のためAWSのドキュメント上にあるレコードをRoute53にそのまま登録します。

名前 タイプ
_dmarc.example.com TXT "v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@example.com"

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-dmarc.html#send-email-authentication-dmarc-dns

メール送信 Part2

DMARC用のTXTレコードを登録し、しばらくしてからGmailにSESからメールを送信します。

Gmailに届いたメールのソースを確認するとSPF、DKIM、DMARCをパスしていることが確認できます。
ドメイン部分はSESで登録したドメイン(example.com)が表示されていました。

実際メッセージのソースを見ると、SPF、DKIM、DMARCが、それぞれ以下のドメインで認証されていることが確認できました。

SPF DKIM DMARC
@amazonses.com @amazonses.com@example.com @example.com

(参考)DMARCへの準拠

AWSのドキュメントでは、DMARCに準拠するためには、DKIMに基づく方法と、SPFに基づく方法の2つが紹介されています。

DKIMに基づく、DMARCの準拠

下記AWSのドキュメントを確認すると、メールがDKIMに基づいてDMARCに準拠するための条件が記載されています。

E メールが DKIM に基づいて DMARC に準拠するためには、次の両方の条件を満たすことが求められています。

  • 有効な DKIM 署名がメッセージに含まれている必要があります。
  • E メールヘッダーの From アドレスが DKIM 署名のドメインに合致すること。ドメインの DMARC ポリシーで DKIM に strict アラインメントが指定されている場合は、これらのドメインが完全に一致する必要があります。ドメインの DMARC ポリシーが DKIM に relaxed アラインメントを指定している場合、From ドメインのサブドメインを ドメインにすることができます。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-dmarc.html#send-email-authentication-dmarc-dkim

1つ目の条件の有効なDKIM署名に関しては、DKIMがPassしていることから達成しています。
2つ目の条件に関しては、SESで送信するEメールヘッダーのFromアドレスがexample.com、DKIM署名のドメインがexample.comもあることから達成しています。従って、現段階では、DKIM によって DMARCがPassしていることがわかります。

EメールヘッダーのFromアドレスとは、Gmailの受信トレイから確認できる送信元のメールアドレスのことです。

SPF による DMARC への準拠(参考)

下記AWSドキュメントを確認すると、メールがSPFに基づいてDMARCに準拠するための条件が記載されています。

E メールが SPF に基づいて DMARC に準拠するためには、次の両方の条件を満たすことが求められています。

  • E メールが SPF チェックに合格する必要があります。
  • メールヘッダーに含まれる From アドレスのドメインは、送信側メールサーバーが受信側メールサーバーに指定する MAIL FROM ドメインと合致する必要があります。ドメインの DMARC ポリシーが SPF で strict アラインメントを指定している場合、From ドメインと MAIL FROM ドメインが完全に一致する必要があります。ドメインの DMARC ポリシーが SPF で relaxed アラインメントを指定している場合、From ヘッダーに指定されたドメインのサブドメインを MAIL FROM ドメインにすることができます。

1つ目の条件に関しては、SPFがPassしていることから達成しています。
2つ目の条件に関しては、amazonses.comがMAIL FROMドメインとなっており、Eメールヘッダーに含まれるFromアドレスが、example.comであることから、不一致となっています。従って、現段階では、SPFによるDMARCへの準拠は行われていません。(DKIMによるDMARCへの準拠がされているため、DMARCがPassしている状態です。)

MAIL FROMのメールアドレスは、メールヘッダにあるReturn-Pathの部分と考えてください。

カスタム MAIL FROM設定

現状でもDMARCはPassしておりますが、今回は検証として、SPFによるDMARCへの準拠も実施します。

先述したようにDKIMと、DMARCの設定が完了した状態では、SPFの認証元ドメインが@amazonses.comであり、カスタムMAIL FROMドメインが@amazonses.comとなっています。
これを自身が持っているドメイン@example.comになるようカスタムMAIL FROMドメインの設定を行います。

サブドメインの追加

カスタムMAIL FROMドメインの設定には、example.comのサブドメインが必要となるため、Route53でサブドメインの設定追加を行います。

詳しい手順は下記ドキュメントを参照してください。
https://repost.aws/ja/knowledge-center/create-subdomain-route-53

今回は、mail.example.comというサブドメインを作成しました。

カスタム MAIL FROM設定実施

詳しい手順は下記ドキュメントを参照してください。
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/mail-from.html#mail-from-set

発行されるDNSレコードは以下のようになります。

タイプ 名前
MS mail.example.com 10 feedback-smtp.us-east-1.amazonses.com
TXT mail.example.com "v=spf1 include:amazonses.com ~all"

このレコードをサブドメイン(mail.example.com)側のホストゾーンに追加します。

しばらく待つとカスタム MAIL FROM ドメインが正常に設定されたことを通知するメールが届きます。
件名は、Amazon SES Custom MAIL FROM Domain Setup SUCCESS in AWS Region US East (N. Virginia)でした。
なお、筆者の環境では、レコード追加からメール受信まで6時間程度かかりました。

同一ドメインで複数リージョンのSESを使用したい場合、下記ドキュメントを参照してください。
MAIL FROMドメインのDNSサーバーにMXレコードを1件しか公開することができないことに注意が必要です。

異なる複数の AWS 地域内の検証済みのアイデンティティに対して、同じカスタムの MAIL FROM ドメインを使用することができます。このように使用する場合も、MAIL FROM ドメインの DNS サーバーに MX レコードを 1 件のみ公開する必要があります。このような状況では、バウンス通知は MX レコードで最初に指定された地域の Amazon SES フィードバックエンドポイントに送信されます。次に、Amazon SES はバウンスを E メールの送信元の地域内の検証済みアイデンティティにリダイレクトします。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/regions.html#region-mail-from

メール送信 Part3

カスタム MAIL FROMの設定が完了したので、再度Gmail宛にSESからメールを送信します。

Gmailに届いたメールのソースを確認するとSPF、DKIM、DMARCをパスしていることが確認できます。
ドメイン部分はSESで登録したドメイン(example.com)が表示されていました。

実際メッセージのソースを見ると、SPF、DKIM、DMARCが、それぞれ以下のドメインで認証されていることが確認できました。
カスタムMAIL FROMの設定時に指定したドメイン(mail.example.com)でSPFが認証されています。

SPF DKIM DMARC
@mail.example.com @amazonses.com@example.com @example.com

これにより、カスタムMAIL FROMが、mail.example.com、Fromアドレスのドメインが、example.comとなりました。mail.example.comexample.comのサブドメインであるため、DMARCのポリシーをstrictアライメントを指定していなければ、SPF による DMARC への準拠するための条件も満たしたことになります。

(再喝)SPF による DMARC への準拠するための条件

E メールが SPF に基づいて DMARC に準拠するためには、次の両方の条件を満たすことが求められています。

  • E メールが SPF チェックに合格する必要があります。
  • メールヘッダーに含まれる From アドレスのドメインは、送信側メールサーバーが受信側メールサーバーに指定する MAIL FROM ドメインと合致する必要があります。ドメインの DMARC ポリシーが SPF で strict アラインメントを指定している場合、From ドメインと MAIL FROM ドメインが完全に一致する必要があります。ドメインの DMARC ポリシーが SPF で relaxed アラインメントを指定している場合、From ヘッダーに指定されたドメインのサブドメインを MAIL FROM ドメインにすることができます。

まとめ

今回は、Route53で取得したドメインを使って、SESのSPF、DKIM、DMARCを設定しました。SESを用いるためには、ドメインを取得する必要があったり、サンドボックスを解除するなどの手間がかかるため、この記事が誰かの検証がわりになれば幸いです。

本記事の内容に関しては、検証内容をまとめただけであるため、使用する場合は自己責任でお願いいたします。

Discussion