Amazon Cognitoの送信元のメールアドレスを Amazon SESの独自ドメインに変更してみた

Amazon Cognitoの送信元のメールアドレスを Amazon SESの独自ドメインに変更してみた

Cognitoのデフォルトのメールアドレスの場合、送信上限がありますので、送信元をSESの独自ドメインに変更する方法をまとめました。また、「Invalid FROM email address ARN」というエラーで詰まったため、その部分も記載します
Clock Icon2023.05.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

先日、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の独自ドメインに変更されました!

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.