Amazon Cognitoの送信元のメールアドレスを Amazon SESの独自ドメインに変更してみた
はじめに
先日、ALB + EC2の構成に、CognitoのHosted UIを利用し、多要素認証(MFA)を実装しました。
その際、Cognitoから送信される送信元メールアドレスは、Cognitoのデフォルトであるno-reply@verificationemail.com
のままでした。
no-reply@verificationemail.com
では、1日の送信数に上限がありますので、SESの独自ドメインを利用する方法についてまとめます。
現状
Cognito UIの画面でサインアップをすると、
下記の確認コードが送られてきますが、メールアドレスの送信元は、Cognitoのデフォルトであるno-reply@verificationemail.com
です。
この送信元をSESで作成したドメインに変えたいと思います。
前提条件
- お名前ドットコムでドメインを取得し、Route53でホストを作成
- ALBのリスナールールでCognitoのHosted UIで認証する構成を構築済み
- 未構築の場合、こちらのブログを参照してください
- SESは未作成。(作成済みでも可)
- 構成図
SESのドメインの登録
Route53で設定したドメインを、SESでも登録します
次にサンドボックスの制限解除と送信制限緩和をします。(送信制限緩和は、しなくても可)
手順は、以前作成した記事がありますので、こちらをご参照ください
これでSESの方の設定は完了です。
Cognitoの送信元のメールアドレスをSESの独自ドメインに変更
CognitoのユーザープールのEメールを編集します。
下記の設定値を入れて変更します。
項目 | 設定値 | 備考 |
---|---|---|
SESリージョン | 東京リージョン | |
送信元 E メールアドレス | SESで登録したドメイン | |
送信者の名前 - オプション | 「 送信者名 」 の形式で入力 | オプションと書いてありますが、必須です |
「Invalid FROM email address ARN」
Cognitoの送信元のメールアドレスをSESの独自ドメインに変更する際、送信者の名前 - オプション
となっていたため、入力しないで変更すると、下記のエラーが出力されました。
code: InvalidParameterException message: Invalid FROM email address ARN
考えてみれば当たり前なのですが、SESではメールアドレスではなくドメインを登録しているので、送信元のメールアドレスを選択する必要があったため、エラーとなりました。
SESの承認ポリシー
Cognitoで設定後、SESの承認ポリシーが追加されていることを確認できました。
ポリシーは、CognitoがSESのEメールを送信するための許可をする内容でした。
{ "Version": "2008-10-17", "Statement": [ { "Sid": "stmnt1683615139116", "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": [ "ses:SendEmail", "ses:SendRawEmail" ], "Resource": "arn:aws:ses:ap-northeast-1:xxxxxxxxxxx:identity/ドメイン名" } ] }
追記(2024年9月24日)
Amazon Cognito は、IAM サービスリンクロールAWSServiceRoleForAmazonCognitoIdpEmailService
を使用して、ユーザーに代わって E メールを送信しますので、承認ポリシーはなくても問題ありませんでした。
テストしてみた
それでは、サインアップをして、送信元のメールアドレスが変わったか確認しましょう。
Cognito UIの画面でサインアップをすると、
送信元メールアドレスがSESの独自ドメインに変更されました!