超マニアックなAmazon SESのドメイン認証トラブルシューティング

はじめに

こんにちは!最近TechBlogを書けていなかった中山です!

前回のBlog投稿から期間が空きましたが、その間にAmazon SESを利用する機会があり、ドメイン認証の設定中に設定は正しく行っているはずなのに認証が通らない、事象にぶつかり詰まったことがあったのでその背景から解決手法までさらっと紹介します。

ただ、今回紹介するケースは少し特殊で、同じ問題に遭遇している(遭遇したことがある)方は少ないとは思います。しかし、特殊ゆえに参考になるドキュメントが確認できた範囲では存在しなかったので、そのような方の手助けになればと思います!
もしSESを触る機会がない方も「そんなことあるんだな~」ぐらいで流し読みしていただければ幸いです!

背景

メール配信をするためにAWS SESを利用することになり、その設定の一環でドメイン認証の設定をしていました。


SESではEasy DKIMというDKIMの一種があり、それを使用して設定しているところだったのですが、今回使用しようとしたドメインの扱いが少し特殊で…

今回利用するSES(画像のSES1)とは別に以前利用したSES(画像のSES2)が存在し、そこで使用・ドメイン認証を行ったドメイン(ここではexample.comと表記)と同一のものを今回利用するSESでも使う、名前解決をするDNSも同一というものです。
SESのサンドボックスを解除して利用するという時点でかなり絞られるというのに複数のSESに同一のドメインを登録し、同一のDNSでドメイン認証を行う、というのはこのTechBlogを読んでくださった方のうち何人経験があるのかわからないですね…笑

今回やりたいことの簡易図

実施したこと

背景で書いた通り、既に別のSESに登録されているドメインを新規作成したSESで利用するためにドメイン認証の設定を行いました。

作業内容については細かい部分は省略しますが、SESから生成されたCNAMEレコードをDNSへ登録するというシンプルなものになっています。

発生した問題

特に問題が起こることもなく、ドキュメント通りに設定を行ったはずだったのですが…
SESのページでドメイン認証の状態を示す項目を確認してもずーーーーーっとPending(保留中)のままになっていて困ってしまいました。

ドメインを登録したがEasy DKIM認証が通らない様子

解決手法

設定手順は間違っているはずがないのになぜかドメイン認証が通らないこの問題、原因は意外な場所にありました。

DKIMの設定の際にはRSA暗号が生成され、SESではこのRSA暗号の長さを1024bitと2048bitから指定することができるのですが…

なんと、このこのRSA暗号の長さに問題があったのです!

詳しく解説すると、同一ドメインで既にドメイン認証を通してあるSESの方ではこのRSA暗号が1024bitで生成されているのに対して、今回新規作成したSESでは2048bitで生成していたことが問題だったようです。

正直なところ、どうしてそのような問題が起きてしまうのかは推察の域を出ないのですが、徹底的にそれぞれのSESの設定を見直したところこのパラメータ以外に差異がありませんでした。

「まさかな…」と思いつつ新規作成したSESの方でRSA暗号の長さを1024bitにしたところ、一瞬で「Pending」だったものが「Successful」になりました!
この時は嬉しい反面、どうしてこうなったのかわからないので複雑な気持ちでしたね笑

生成されるRSA暗号のサイズを1024bitに変更したところドメイン認証が通った様子

さいごに

今回は、いままでの初学者向けの記事とは打って変わりマニアックなトラブルシューティングを紹介しましたがいかがだったでしょうか?

この問題に直面したときは原因もさっぱりわからず、手順を振り返っても問題になりそうな点がなかったのでやはり構成(同一のドメインを複数のSESで利用する状態)がまずいのかな…?というフワフワした気持ちを持ちながらドキュメントを漁っていました。しかしこのような限定的なケースの情報は存在せず、終わってみると単純なものでしたが当時はかなり苦心したのを覚えています。

こちらの現象はまだ検証ができていませんが、こんな状況でこんなことをしたら解決したよ、という共有レベルでBlogを執筆させていただきました。

もしこのBlogが同じ問題に直面している方の助けになれば幸いです。

FIXER Inc. 中山 翔馬
  • FIXER Inc. 中山 翔馬
  • (なかやま しょうま)
    温泉とラーメンが何よりも好きな駆け出しエンジニアです!初学者ですがなんでも挑戦して吸収・成長していきます!