Amazon Cognito ユーザープール用の SMS メッセージ設定
ユーザープールの Amazon Cognito イベントには、Amazon Cognito がユーザーに SMS テキストメッセージを送信する結果となるものがあります。例えば、電話番号の検証を必須とするようにユーザープールを設定している場合、ユーザーがアプリケーションの新しいアカウントにサインアップする、またはパスワードをリセットする場合に Amazon Cognito が SMS テキストメッセージを送信します。SMS テキストメッセージを開始するアクションに応じて、メッセージには検証コード、一時的なパスワード、またはウェルカムメッセージが含まれます。
Amazon Cognito は、SMS テキストメッセージの配信に Amazon Simple Notification Service (Amazon SNS) を使用します。Amazon SNS からは、SMS メッセージを AWS End User Messaging SMS に渡します。Amazon Cognito からテキストメッセージを初めて送信する場合、AWS End User Messaging SMS はサンドボックス環境を使用します。サンドボックス環境では、SMS テキストメッセージのアプリケーションをテストできます。サンドボックスでは、メッセージの送信をシミュレートすることだけができます。
注記
2024 年 11 月、AWS は Amazon SNS SMS メッセージングを AWS End User Messaging SMS に置き換えました。現在、Amazon Cognito コンソールは Amazon SNS リソースを参照しています。ユーザープールは、AWS End User Messaging SMS へのパススルーである Amazon SNS Publish オペレーションを使用して SMS メッセージを開始します。したがって、sms-voice:SendTextMessage ではなく、sns:Publish のアクセス許可を設定する必要があります。
AWS End User Messaging SMS では、SMS テキストメッセージに対して課金されます。詳細については、「AWS End User Messaging SMS 料金表
Amazon Cognito は、ユーザーが入力できるコードを含む SMS メッセージをユーザーに送信します。次の表は、SMS メッセージを生成できるイベントを示しています。
メッセージオプション
| アクティビティ | API オペレーション | 配信オプション | 形式オプション | カスタマイズ可能 | メッセージテンプレート |
|---|---|---|---|---|---|
| Forgot password | ForgotPassword, AdminResetUserPassword | Email, SMS | code | Yes | 検証メッセージ |
| Invitation | AdminCreateUser | Email, SMS | code | Yes | 招待メッセージ |
| Self-registration | SignUp, ResendConfirmationCode | Email, SMS | code, link | Yes | 検証メッセージ |
| Email address or phone number verification | UpdateUserAttributes, AdminUpdateUserAttributes, GetUserAttributeVerificationCode | Email, SMS | code | Yes | 検証メッセージ |
| Multi-factor authentication (MFA) | AdminInitiateAuth, InitiateAuth | Email¹, SMS, authenticator app | code | Yes² | MFA メッセージ |
| One-time password authentication (OTP) | AdminInitiateAuth, InitiateAuth | Email¹, SMS | code | Yes | MFA メッセージ³ |
¹ エッセンシャル以上の機能プランと Amazon SES E メール設定が必要です。
² SMS メッセージおよび E メールメッセージの場合。
³ ユーザープールで MFA が必須またはオプションである場合にのみ、MFA メッセージテンプレートをカスタマイズできます。MFA が非アクティブの場合、Amazon Cognito はデフォルトのテンプレートを使用してワンタイムパスワードを送信します。
AWS End User Messaging SMS では、SMS メッセージに対して課金されます。詳細については、「AWS End User Messaging SMS 料金表
MFA の詳細については、「 SMS メッセージ MFA と E メールメッセージ MFA」を参照してください。
Amazon Cognito は、1 つの送信先に対する短期間での E メールや SMS メッセージの追加配信を防止する場合があります。ユーザープールが影響を受けていると思われる場合は、メッセージ配信エラーのログを設定および確認してから、アカウントチームにお問い合わせください。
ベストプラクティス
世界中で一方的な SMS トラフィックの量が多いため、一部の政府は SMS メッセージの送信者と受信者の間に障壁を課しています。SMS メッセージを MFA やユーザーアップデートに使用する場合は、メッセージが確実に送られるように追加の手順を踏む必要があります。また、ユーザーが住んでいる可能性のある国の SMS メッセージ関連の規制を監視し、SMS メッセージの設定を最新の状態に保つ必要があります。詳細については、「AWS End User Messaging SMS ユーザーガイド」の「SMS および MMS の国別の機能と制限」を参照してください。
SMS メッセージを使用してユーザーを認証および検証することは、セキュリティ上のベストプラクティスではありません。電話番号は所有者が変わる場合があり、ユーザーの MFA の所有している要素を確実に表さないかもしれません。代わりに、アプリまたはサードパーティーの IdP で TOTP MFA を実装してください。また、カスタム認証チャレンジの Lambda トリガー を使って、追加のカスタム認証要素を作成することもできます。
SMS メッセージ配信アーキテクチャの保護については、以下のリンクを参照してください。
Amazon Cognito ユーザープールでの SMS メッセージングの初回セットアップ
Amazon Cognito は、Amazon SNS および間接的に AWS End User Messaging SMS を使用して、ユーザープールから SMS メッセージを送信します。カスタム SMS 送信者の Lambda トリガー を使用して、独自のリソースを使用し、SMS メッセージを送信することもできます。特定の AWS リージョンで SMS テキストメッセージを初めて設定すると、AWS End User Messaging SMS は AWS アカウント をそのリージョンの SMS サンドボックスに配置します。AWS End User Messaging SMS はサンドボックスを使用して、不正使用と悪用を防止し、コンプライアンス要件を満たします。AWS アカウント がサンドボックス内にある場合、AWS End User Messaging SMS はいくつかの制限を課します。例えば、発信元 ID がある場合、最大 10 個の検証済み送信先番号にテキストメッセージを送信したり、発信元 ID なしでメッセージの送信をシミュレートしたりできます。AWS アカウントがサンドボックス内に残っている間は、本番環境で SMS メッセージを送信しないでください。サンドボックスに置かれている間、Amazon Cognito はユーザーの電話番号にメッセージを送信できません。
トピック
Amazon Cognito が AWS End User Messaging SMS で SMS メッセージを送信するために使用できる IAM ロールを準備する
ユーザープールから SMS メッセージを送信すると、Amazon Cognito はアカウントの IAM ロールを引き受けます。Amazon Cognito は、そのロールに割り当てられた sns:Publish アクセス許可を使用して、ユーザーに SMS メッセージを送信します。Amazon Cognito コンソールでは、ユーザープールの [認証方法] メニューの [SMS] の下で [IAM ロールの選択] を設定するか、この選択をユーザープール作成ウィザードで行うことができます。
次の IAM ロール信頼ポリシーの例では、Amazon Cognito ユーザープールに、ロールを引き受ける制限付きの機能を付与しています。Amazon Cognito は、次の条件を満たす場合にのみロールを引き受けることができます。
-
assume-role オペレーションは、
aws:SourceArn条件のユーザープールに代わって行われます。 -
assume-role オペレーションは、
aws:SourceAccount条件によって設定された AWS アカウント のユーザープールに代わって行われます。 -
assume-role オペレーションには、
sts:externalId条件の外部 ID が含まれます。
条件 aws:SourceArn の値には、正確なユーザープール ARN またはワイルドカード ARN を指定できます。AWS マネジメントコンソール または DescribeUserPool API リクエストを使用して、ユーザープールの ARN を検索します。
多要素認証用の SMS メッセージを送信するには、IAM ロールの信頼ポリシーに sts:ExternalId 条件が含まれている必要があります。この条件の値は、ユーザープールの SmsConfiguration の ExternalId プロパティと一致する必要があります。Amazon Cognito コンソールでユーザープールの作成プロセス中に IAM ロールを作成すると、Amazon Cognito は、ロールとユーザープール設定で外部 ID をセットアップします。これは、既存の IAM ロールを使用する場合には適用されません。
UpdateUserPool API リクエストのユーザープール ExternalId パラメータを更新したうえで、IAM ロールの信頼ポリシーを同じ値の sts:externalId 条件で更新する必要があります。API を使用して元の設定を保持するようにユーザープールを更新する方法については、「ユーザープールとアプリケーションクライアントの設定更新」を参照してください。
IAM ロールおよび信頼ポリシーの詳細については、「AWS Identity and Access Management ユーザーガイド」の「ロールに関する用語と概念」を参照してください。
SMS メッセージの AWS リージョンを選択する
注記
AWS の SMS メッセージが AWS End User Messaging SMS
一部の AWS リージョン では、Amazon Cognito SMS メッセージに使用する Amazon SNS リソースを含むリージョンを選択できます。Amazon Cognito が利用可能な AWS リージョン では、(アジアパシフィック (ソウル) を除く) では、Amazon SNS リソースを、ユーザープールを作成した AWS リージョン で使用できます。リージョンを選択したときに SMS メッセージングを高速かつ信頼性の高いものにするには、ユーザープールと同じリージョンの Amazon SNS リソースを使用します。
新規ユーザープールウィザードのメッセージ配信の設定ステップで、SMS リソースのリージョンを選択します。既存のユーザープールの [認証方法] メニューで [SMS] の下にある [編集] を選択することもできます。
開始時は、一部の AWS リージョン では、Amazon Cognito が代替リージョンにある Amazon SNS リソースを使用して SMS メッセージを送信していました。希望するリージョンを設定するには、ユーザープールの SmsConfigurationType オブジェクトの SnsRegion パラメータを使用します。次の表から Amazon Cognito リージョン に Amazon Cognito ユーザープールリソースをプログラムによって作成し、SnsRegion パラメータを提供しない場合、ユーザープールはレガシー Amazon SNS 代替リージョンで Amazon SNS リソースを使用して SMS メッセージを送信します。
アジアパシフィック (ソウル) AWS リージョン の Amazon Cognito ユーザープールは、アジアパシフィック (東京) リージョンの Amazon SNS 設定を使用する必要があります。
Amazon SNS (AWS End User Messaging SMS 経由) は、すべての新規アカウントの支出クォータを 月額 1.00 USD に設定します。AmazonCognito で使用する AWS リージョン での支出制限を引き上げた可能性があります。Amazon SNS SMS メッセージの AWS リージョン を変更する前に、AWS サポートセンターでクォータ増加ケースを開いて、新しいリージョンでの制限を引き上げてください。詳細については、「AWS End User Messaging SMS ユーザーガイド」の「AWS End User Messaging SMS MMS および音声サンドボックスから本番環境への移行」を参照してください。
次の表の任意の Amazon Cognito リージョンに対し、対応する SMS メッセージリージョンで AWS End User Messaging SMS リソースを使用して、SMS メッセージを送信できます。
| Amazon Cognito リージョン | SMS メッセージリージョン |
|---|---|
|
米国東部 (オハイオ) |
米国東部 (オハイオ)、米国東部 (バージニア北部) |
|
米国東部 (バージニア北部) |
米国東部 (バージニア北部) |
|
米国西部 (北カリフォルニア) |
米国西部 (北カリフォルニア) |
|
米国西部 (オレゴン) |
米国西部 (オレゴン) |
|
カナダ (中部) |
カナダ (中部)、米国東部 (バージニア北部) |
|
カナダ西部 (カルガリー) |
カナダ西部 (カルガリー) |
|
メキシコ (中部) |
メキシコ (中部) |
|
欧州 (フランクフルト) |
欧州 (フランクフルト)、欧州 (アイルランド) |
|
欧州 (ロンドン) |
欧州 (ロンドン)、欧州 (アイルランド) |
|
欧州 (アイルランド) |
欧州 (アイルランド) |
|
欧州 (パリ) |
欧州 (パリ) |
|
欧州 (ストックホルム) |
欧州 (ストックホルム) |
|
欧州 (ミラノ) |
欧州 (ミラノ) |
|
欧州 (スペイン) |
欧州 (スペイン) |
|
欧州 (チューリッヒ) |
欧州 (チューリッヒ) |
| アジアパシフィック (マレーシア) | アジアパシフィック (シンガポール) |
|
アジアパシフィック (タイ) |
アジアパシフィック (ムンバイ) |
|
アジアパシフィック (ムンバイ) |
アジアパシフィック (ムンバイ)、アジアパシフィック (シンガポール) |
|
アジアパシフィック (ハイデラバード) |
アジアパシフィック (ハイデラバード) |
|
アジアパシフィック (香港) |
アジアパシフィック (シンガポール) |
|
アジアパシフィック (ソウル) |
アジアパシフィック (東京) |
|
アジアパシフィック (シンガポール) |
アジアパシフィック (シンガポール) |
|
アジアパシフィック (シドニー) |
アジアパシフィック (シドニー) |
|
アジアパシフィック (東京) |
アジアパシフィック (東京) |
|
アジアパシフィック (ジャカルタ) |
アジアパシフィック (ジャカルタ) |
|
アジアパシフィック (大阪) |
アジアパシフィック (大阪) |
|
アジアパシフィック (メルボルン) |
アジアパシフィック (メルボルン) |
|
中東 (バーレーン) |
中東 (バーレーン) |
|
中東 (アラブ首長国連邦) |
中東 (アラブ首長国連邦) |
|
南米 (サンパウロ) |
南米 (サンパウロ) |
|
イスラエル (テルアビブ) |
イスラエル (テルアビブ) |
|
アフリカ (ケープタウン) |
アフリカ (ケープタウン) |
米国の電話番号に SMS メッセージを送信するための発信元 ID を取得する
米国の電話番号に SMS テキストメッセージを送信する場合は、SMS サンドボックステスト環境または本番環境を構築するかどうかにかかわらず、発信元 ID を取得する必要があります。
米国の通信事業者は、米国の電話番号にメッセージを送信する場合に発信元 ID を義務付けています。発信元 ID をまだ取得していない場合は、取得する必要があります。発信元 ID を取得する方法については、「AWS End User Messaging SMS ユーザーガイド」の「電話番号をリクエストする」を参照してください。
同じ AWS リージョンに複数の発信元 ID がある場合、AWS End User Messaging SMS は、ショートコード、10DLC、通話料無料番号の優先順で発信元 ID タイプを選択します。この優先順位を変更することはできません。詳細については、「AWS End User Messaging SMS に関するよくある質問
SMS サンドボックスに置かれていることを確認する
次の手順を使用して SMS サンドボックスに移動していることを確認します。Amazon Cognito の本番稼働用ユーザープールがある各 AWS リージョン で繰り返します。
SMS サンドボックスに置かれていることを確認する
-
Amazon Cognito コンソール
に移動します。プロンプトが表示されたら、AWS 認証情報を入力します。 -
[User Pools] (ユーザープール) を選択します。
-
リストから存在するユーザープールを 1 つ選択します。
-
[認証方法] メニューを選択します。
-
[SMS configuration] (SMS 設定) セクションで、[Move to Amazon SNS production environment] (Amazon SNS 本番環境に移行する) を展開します。アカウントが SMS サンドボックスに置かれている場合は、以下のメッセージが表示されます。
AWS のサービスの依存関係を設定して SMS メッセージの設定を完了する
このメッセージが表示されない場合は、アカウント内での SMS メッセージのセットアップが既に実行されています。「Amazon Cognito でユーザープールのセットアップを完了する」へ進んでください。
-
[Amazon SNS 本番環境に移行] で [Amazon SNS]
リンクを選択します。これにより、新しいタブで Amazon SNS コンソールが開きます。 -
サンドボックス環境に置かれていることを確認します。コンソールメッセージには、以下のようにサンドボックスのステータスと AWS リージョン が示されます。
This account is in the SMS sandbox in US East (N. Virginia).
アカウントをサンドボックスから移動する
本番稼働でアプリを使用するには、アカウントを SMS サンドボックスから本番環境に移動します。Amazon Cognito で使用する AWS End User Messaging SMS リソースがある AWS リージョンに発信元 ID を設定すると、AWS アカウントが SMS サンドボックス内に残っている間は、米国の電話番号を検証できます。本番環境にいる場合は、SMS メッセージを送信する前にユーザーの電話番号を検証する必要はありません。
サンドボックスから退出するリクエストは、AWS End User Messaging SMS コンソールまたは Amazon SNS コンソールから作成できます。詳細な手順については、「AWS End User Messaging SMS ユーザーガイド」の「SMS サンドボックスからの移動」を参照してください。
AWS End User Messaging SMS でシミュレーター番号または検証済み電話番号を使用する
SMS サンドボックスからアカウントを移動した場合は、このステップをスキップします。
サンドボックス内に残っていて、発信元番号を設定している場合は、検証済みの送信先番号にメッセージを送信できます。検証済みの送信先を設定するには、「AWS End User Messaging SMS ユーザーガイド」の「検証済みの送信先電話番号を追加する」を参照してください。
シミュレートした送信元と送信先を使用してメッセージを送信することもできます。シミュレーターメッセージはログを生成しますが、通信事業者ネットワーク経由で送信されることはありません。[ショートカット]
Amazon Cognito でユーザープールのセットアップを完了する
ユーザープールを作成または編集していたブラウザタブに戻ります。手順を完了します。ユーザープールに SMS 設定を正常に追加すると、Amazon Cognito は内部の電話番号にテストメッセージを送信して、設定が機能することを確認します。Amazon SNS は、テスト SMS メッセージごとに料金を請求します。