Cognitoの送信元アドレスをRoute53のドメインアドレスにカスタマイズ

2018.10.03

はじめに

アプリケーションの認証にCognio User Poolを使っている場合、Cognitoから送信されるシステムメールの送信元はデフォルトだと no-reply@verificationemail.com になっています。
この送信元アドレスをRoute53で取得したドメインのメールアドレスにカスタマイズする方法をご紹介したいと思います。
変更するためには、まずAmazon SES(Simple Email Service)に変更後のアドレスを登録する必要があります。

しかし、単にRoute53で取得したドメインだと、メールサーバーがない為SESの検証メールを受信できずSESに登録できません。
なので今回はAmazon SNS(Simple Notification Service)を使ってSESの検証メールを別の受信アドレスに飛ばして進めたいと思います。

また、受信できるアドレスであれば以下の手順で変更することができます。

Cognitoによるユーザ登録時の検証コードの送信元アドレスをカスタマイズしてみる

シチュエーション

  • SESは東京リージョンでは使えないのでここではバージニアリージョンを使用
  • ドメインはRoute53で取得済み
  • ドメイン:okaharuna.ga
  • 変更後のアドレス:no-reply@okaharuna.ga
  • 検証メールを受け取るアドレス:test@gmail
  • DKIM認証

大まかな手順

  • ドメインの登録&検証(SES)
  • トピック&サブスクリプションの作成(SNS)
  • 受信ルールの設定(SES)
  • メールアドレスの登録&検証(SES)
  • 送信元アドレスの設定(Cognito)

手順

ドメインの登録&検証(SES)

  1. コンソールSESページの左ペインから Domains を選択します。
  2. Verify a New Domain をクリックします。

  3. ドメインを入力して Verify This Domain をクリックします。DKIM認証が必要な場合はチェックを入れましょう。

  4. ドメインの検証がpendingになったので次はDNSの設定です。ドメインがRoute53にある場合は Use Route53 のボタンが出てきます。これを押せば自動的にレコードを追加してくれるので楽チンです。

  5. MXレコードにもチェックを入れて、Create Recode Set をクリックします。

  6. pending verificationのステータスでドメインが追加されています。

  7. Route53の方を見てみると各レコードが自動的に追加されています。

トピック&サブスクリプションの作成(SNS)

SESの検証メールを受信するための設定を行います。
作成したトピックをSESから設定するため、バージニアリージョンを使用します。

  1. SNSコンソールを開き左ペインからトピックを選択します。
  2. 新しいトピックの作成 をクリックします。

  3. 任意のトピック名を入力して作成します。

  4. トピックが作成できたら実際に受信するメールアドレスを設定するサブスクリプションを作成します。トピックにチェックをつけて アクション のプルダウンを開いたら トピックへのサブスクリプション を選択します。

  5. プロトコルに Email を選択して、エンドポイントには実際に検証メールを受信するアドレスを入力します。

  6. サブスクリプションが作成されるとエンドポイントに設定したアドレスに検証メールが届いています。
    メール内の Confirm subscription のリンクをクリックします。

  7. リンクを踏むと Subscription confirmed! のページが開かれます。

これでエンドポイントの設定が完了です。
次に、SESで受信ルールを作成します。

受信ルールの設定(SES)

  1. SESコンソールを開き、左ペインから Rule Sets を選択します。開いたらCreate a Receipt Rule をクリックします。

  2. Receipient欄に送信元に設定したいアドレスを入力して、 Add Receipient をクリックします。

  3. statusがpendingの状態で追加されたら、Next Stepをクリックします。

  4. ここで先程作成したSNSトピックを設定します。Add actionSNSを選択し、プルダウンから作成したSNSトピックを選択したらNext Stepをクリックします。
    ※プルダウンに表示されない場合、別リージョンになっている可能性があります。

  5. 確認してCreate Rule

ここまでで、no-reply@okaharuna.ga宛のメールを test@gmailで受信できるようになりました。
次はSESにno-reply@okaharuna.gaを登録します。

メールアドレスの登録&検証(SES)

  1. SESコンソールのEmail Addressesを選択して、Verify This Email Addressをクリックします。

  2. 送信元アドレスを入力して Verify a New Email Address で登録します。

  3. 登録すると、test@gmail宛に検証メールが届いているかと思います。
    件名はAmazon SES Email Receipt Notificationです。
    メール内の https://email-verification.us-east-1.amazonaws.comで始まる検証リンクがあるはずなので、それをクリックしましょう。

クリックするとこんな画面になります。

メールアドレスのstatusもpendingからverifiedになっていることを確認します。

送信元アドレスの設定

ここでようやくno-reply@okaharuna.gaをCognitoの送信元アドレスに設定できるようになります。

テスト

試しにユーザーを作成してみましょう。

招待メールの送信元アドレスがきちんとRoute53のドメインのアドレスに変更できています。

まとめ

Cognitoのシステムメールの送信元アドレスをRoute53のドメインのアドレスに変更する方法をご紹介しました。
送信元に設定したいアドレスが、メールを受信できないアドレスであっても、SNSのトピックとSESの受信ルールを設定する事で検証することができました。

ちなみに今回使用したドメインはfreenomで取得したものです。
freenomで取得したドメインをRoute53で管理する方法は以下の記事で紹介されていますので参考にして下さい。

無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた