Route53で取得したドメインをCognitoユーザープールの送信元アドレスに使う

サービスの認証にCognitoを使う際、サービスへの初回登録時の確認コード送信や、パスワード変更確認メールの送信などをする必要が出てくるかと思います。
そのような**システムメールの送信元メールアドレスをカスタマイズする方法**です。

方法としては、SESに送信元にしたいアドレスを登録し、それをCognitoから参照する形になります。

SESに登録したアドレスを送信元として使えるようにするためには、SES登録後、そのアドレスに送信される確認URLにアクセスする必要があります。

送信元に使いたいアドレスが既にメールを受信できる状態であればつまづくことはないかと思いますが、Route53でドメインを取得した時点ではメールを受信する手段がないためSESからの確認メールを確認する手段がないことになります。

今回はそんな場合の対処法です。
ちなみにドメインは取得済みの想定です。
SES、SNSはバージニアリージョンです。

# 設定値
- ドメイン：`ykarakita.com`
- Cognitoに設定する送信元メールアドレス ：`info@ykarakita.com`
- 確認メールが受信可能なメールアドレス：`xxx@gmail.com`

# 手順
1. SNSのトピックを作成し、受信可能なメールアドレス（gmailとか）をサブスクリプションとして登録する
2. ドメインをSESに登録する、同時にRoute53にMXレコードとTXTレコードを作成する
3. SESの受信ルールを作成し、1.で作成したSNSトピックを指定する
4. Cognitoで送信元にするメールアドレスをSESに登録する
5. 1.で登録したメールアドレスに確認メールが届くので承認リンクをブラウザで開く

# 1. SNSのトピックを作成し、受信可能なメールアドレス（gmailとか）をサブスクリプションとして登録する


![10.png](https://qiita-image-store.s3.amazonaws.com/0/99248/4460a85b-14c5-308f-4ada-745a19e813e6.png)
コンソールでSESを開き、**Topics**から**Create new topic**を開く。

![11.png](https://qiita-image-store.s3.amazonaws.com/0/99248/041bd502-384c-0b5d-def1-cf858ef557a2.png)
**Display name**はメール送信時の送信者名になる。
名前を入力して**Create Topic**

![12.png](https://qiita-image-store.s3.amazonaws.com/0/99248/eb8def25-ada4-390b-6ea8-004b73186140.png)
作成したTopicのARNのリンクからTopic詳細画面へ。

![13.png](https://qiita-image-store.s3.amazonaws.com/0/99248/15ddbc8c-5757-f137-494a-7d5aaa4e367c.png)
**Create subscription**をクリック

![14.png](https://qiita-image-store.s3.amazonaws.com/0/99248/b03c2ed1-acfa-f19e-629b-1f2d12fe52a2.png)
こんな感じで入力する。**Endpoint**はメール受信可能なメールアドレス。**Create subscription** する。

<img width="511" alt="スクリーンショット 2018-02-02 0.44.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/99248/b14e8a1e-857b-4331-2d62-2da89f08c0d5.png">
そうすると、登録されたメールアドレスに確認メールが届くので**Confirm subscription**のリンクへ行くと下のような画面が表示される。

<img width="557" alt="スクリーンショット 2018-02-02 0.44.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/99248/ed83ea87-c03b-079c-6f1d-40e9dbd14cb5.png">

これでこのSNSトピックにパブリッシュしたらgmailにメールが飛ぶようになっているはず。

# 2. ドメインをSESに登録する、同時にRoute53にMXレコードとTXTレコードを作成する
SESコンソール左側の**Domains**を選択。
![9.png](https://qiita-image-store.s3.amazonaws.com/0/99248/78d29bbc-a646-c7a6-a0cd-def15cfca4f5.png)
**Verify a New Domain**から、あらかじめRoute53で取得済みのドメイン名を入力。

![スクリーンショット 2018-02-01 23.52.52.png](https://qiita-image-store.s3.amazonaws.com/0/99248/c6a6fa53-2dee-86ee-9269-f428e8403868.png)
このドメイン所有者の確認としてDNSレコードを登録するように言われる。今回はホストゾーンもRoute53に作成しているためそのまま**Use Route53**へ。

![スクリーンショット 2018-02-01 23.52.56.png](https://qiita-image-store.s3.amazonaws.com/0/99248/40e17e34-9607-0e7c-a6fd-f00d69206a91.png)
すべてチェックを付けて**Create Record Sets**。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/99248/256c578e-7441-49ed-282e-1d6ccc06767e.png)
登録したドメインのステータスはpending verificationになっている。
1分くらいたつとverifiedになる。
![](https://qiita-image-store.s3.amazonaws.com/0/99248/15eb4862-a47d-51d0-6704-bf177659df9d.png)


# 3. SESの受信ルールを作成し、1.で作成したSNSトピックを指定する

SESのコンソールから**Rule Sets** → **View Active Rule Set** → **Create Rule**を開く。
![7.png](https://qiita-image-store.s3.amazonaws.com/0/99248/e42d7337-b795-267e-18cd-5bb48a5b6d66.png)

![8.png](https://qiita-image-store.s3.amazonaws.com/0/99248/13c11387-d0a3-da5e-0e3c-bf1425932ea3.png)

![スクリーンショット 2018-02-02 0.55.30.png](https://qiita-image-store.s3.amazonaws.com/0/99248/8b9e8890-c646-5027-be78-18c9c4318cfb.png)
ここにはCognitoの送信元にしたいメールアドレスを入力。**Add Recipient**で追加。

![スクリーンショット 2018-02-01 22.34.44.png](https://qiita-image-store.s3.amazonaws.com/0/99248/318716aa-e90d-1ec2-709c-492f186526e8.png)
**Next Step**へ。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/99248/05e83cd6-581e-c638-0c01-40226cec7931.png)
**Action**には先ほど作成したSNSトピックを選択する。

![スクリーンショット 2018-02-01 23.49.20.png](https://qiita-image-store.s3.amazonaws.com/0/99248/7fc98ab9-da97-2afe-4ec9-3ee706edb3a8.png)
![スクリーンショット 2018-02-01 23.50.33.png](https://qiita-image-store.s3.amazonaws.com/0/99248/bbf70509-094d-73a3-98c7-13a6d7b6197b.png)
![スクリーンショット 2018-02-01 23.50.39.png](https://qiita-image-store.s3.amazonaws.com/0/99248/e8c97b32-4022-2044-7524-d6caf373734b.png)
こんな感じ。

# 4. Cognitoで送信元にするメールアドレスをSESに登録する
SESコンソールの**Email Addresses**を開く。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/99248/a3963445-a878-2c67-7355-bf3d821efd65.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/99248/e61e4bb9-1470-af8f-0b17-73b74853c5b0.png)
**Verify a New Email Address**から送信元メールアドレスにしたいアドレスを入力。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/99248/37ea8c83-4372-f874-b97e-862b53b41879.png)


# 5. 1.で登録したメールアドレスに確認メールが届くので承認リンクをブラウザで開く
メールアドレスを登録すると、SNSサブスクリプションに登録したメールアドレスあてに確認メールが届くので、その中から下の方にある`https://email-verification.us-east-1.amazonaws.com`で始まるURLを探し出してブラウザで開く。

<img width="1478" alt="スクリーンショット 2018-02-02 1.10.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/99248/02b43e36-50c4-c2b8-f4ee-a29bb452b01b.png">
こんな画面が表示される！

![20.png](https://qiita-image-store.s3.amazonaws.com/0/99248/f3b50820-0853-7f63-e622-fabbb156731f.png)
ちゃんとverifiedになりました。

これでCognitoの送信元メールアドレスに指定する準備ができました。

![スクリーンショット 2018-02-02 10.15.52.png](https://qiita-image-store.s3.amazonaws.com/0/99248/422588bb-8b4b-f16f-5368-56bd1c16e72a.png)

Cognitoの設定画面で選択できる！

以上です。