Amazon Cognito 用户池的短信设置 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Cognito 用户池的短信设置

您的用户池的某些 Amazon Cognito 事件可能会导致 Amazon Cognito 向您的用户发送短信。例如,如果您将用户池配置为需要电话验证,则当用户在应用程序中注册新账户或重置其密码时,Amazon Cognito 会发送短信。根据发起短信的操作,短信中将包含验证码、临时密码或欢迎消息。

Amazon Cognito 使用 Amazon Simple Notification Service (Amazon SNS) 传送短信。如果这是您首次通过 Amazon Cognito 或 Amazon SNS 发送短信,Amazon SNS 会将您放在沙盒环境。在沙盒环境中,您可以对应用程序的 SMS 文本消息进行测试。在沙盒中,只能将消息发送给经过验证的电话号码。

Amazon SNS 对短信收取费用。有关更多信息,请参阅 Amazon SNS 定价

注意

由于全球范围内未经请求的短信流量巨大,一些政府在短信发送者和接收者之间设置了障碍。当您使用短信进行 MFA 和用户更新时,必须采取额外的步骤来确保您的短信已送达。您还必须监控您的用户可能居住的国家/地区的短信相关法规,并保持短信配置处于最新状态。有关更多信息,请参阅《Amazon Simple Notification Service 开发人员指南》中的移动文本消息(SMS)

使用短信对用户进行身份验证和验证不是安全最佳做法。电话号码可能会变更所有者,而可能无法可靠地代表您拥有的 用户 MFA 要素。而是在应用程序中或使用第三方 IdP 实现 TOTP MFA。您还可以使用自定义身份验证质询 Lambda 触发器创建其他自定义身份验证要素。

Amazon Cognito 会向您的用户发送带有他们可以输入的验证码的短信。下表显示了可以生成短信的事件。

消息选项

活动 API 操作 传递选项 格式选项 可自定义 消息模板
Forgot password ForgotPassword Email, SMS code No N/A
Invitation AdminCreateUser Email, SMS code Yes 邀请消息
Self-registration SignUp Email, SMS code, link Yes 验证消息
Email address or phone number verification UpdateUserAttributes Email, SMS code Yes 验证消息
Multi-factor authentication (MFA) AdminInitiateAuth, InitiateAuth SMS, authenticator app code Yes¹ MFA 消息

¹ 用于短信。

首次在 Amazon Cognito 用户池中设置 SMS 消息

Amazon Cognito 使用 Amazon SNS 向您的用户池发送短信。您还可以使用自定义 SMS 发件人 Lambda 触发器,通过自己的资源发送 SMS 消息。首次将 Amazon SNS 设置为在特定 Amazon Web Services 区域地区发送短信时,Amazon SNS 会将 Amazon Web Services 账户 您置于该地区的短信沙箱中。Amazon SNS 使用沙箱来防止欺诈和滥用行为并满足合规要求。当你进入沙箱 Amazon Web Services 账户 时,Amazon SNS 会施加一些限制。例如,您最多可以向 10 个已通过 Amazon SNS 验证的电话号码发送短信。在您 Amazon Web Services 账户 仍处于沙箱状态时,请勿将您的 Amazon SNS 配置用于生产中的应用程序。当您位于沙盒中时,Amazon Cognito 无法向用户的电话号码发送消息。

准备一个 IAM 角色,Amazon Cognito 可以使用该角色通过 Amazon SNS 发送 SMS 消息

当您从用户群体发送 SMS 消息时,Amazon Cognito 将代入您的账户中的 IAM 角色。Amazon Cognito 使用分配给该角色的 sns:Publish 权限向您的用户发送 SMS 消息。在 Amazon Cognito 控制台中,您可以从 SMS 下用户群体的 Messaging(消息收发)选项卡设置 IAM role selection(IAM 角色选择),或者在用户群体创建向导过程中进行此选择。

以下示例 IAM 角色信任策略授予 Amazon Cognito 用户群体有限代入角色的能力。Amazon Cognito 只能在代表 aws:SourceArn 条件中的用户群体和 aws:SourceAccount 条件中的 Amazon Web Services 账户 时代入角色。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "<your account number>" }, "ArnLike": { "aws:SourceArn": "<your user pool ARN>" } } }] }

您可以在 aws:SourceArn 条件的值中指定准确的用户群体 ARN 或通配符 ARN。使用 DescribeUserPoolAPI 请求在 Amazon Web Services Management Console 或中查找用户池的 ARN。

有关 IAM 角色和信任策略的更多信息,请参阅《Amazon Identity and Access Management 用户指南》中的角色术语和概念

选择 Amazon SNS 短信 Amazon Web Services 区域

在某些情况下 Amazon Web Services 区域,您可以选择包含要用于发送 Amazon Cognito 短信的 Amazon SNS 资源的区域。在任何提供 Amazon Cognito Amazon Web Services 区域 的地方,除了亚太地区(首尔)之外,您都可以在创建用户池的地方使用 Amazon SNS 资源。 Amazon Web Services 区域 在有多个区域可供选择时,为了使您的 SMS 消息收发更快且更可靠,请使用与您的用户池位于相同区域中的 Amazon SNS 资源。

注意

在中 Amazon Web Services Management Console,只有切换到新的 Amazon Cognito 控制台体验后,您才能更改短信资源的区域。

在新建用户池向导的 Configure message delivery(配置消息传输)步骤中,为 SMS 资源选择区域。您还可以在现有用户池的 Messaging(消息收发)选项卡中,在 SMS 下选择 Edit(编辑)。

对于某些人来说,在发布时 Amazon Web Services 区域,Amazon Cognito使用其他地区的Amazon SNS资源发送了短信。要设置您的首选区域,请使用您的用户池SmsConfigurationType对象的SnsRegion参数。当您通过下表以编程方式在 Amazon Cognito 区域中创建 Amazon Cognito 用户池资源并且您不提供 SnsRegion 参数时,您的用户池可以使用旧 Amazon SNS 区域中的 Amazon SNS 资源发送 SMS 消息。

亚太地区(首尔)的 Amazon Cognito 用户池 Amazon Web Services 区域 必须使用您在亚太地区(东京)地区的 Amazon SNS 配置。

Amazon SNS 将所有新账户的支出配额设定为每月 1.00 美元 (USD)。在使用 Amazon Cognito 时 Amazon Web Services 区域 ,你可能已经提高了支出限额。在更改 Amazon SNS 短信的配额之前,请在 Amazon 支持中心提出增加配额的案例,以提高您在新区域的限额。 Amazon Web Services 区域 有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的请求对 Amazon SNS 提升您的每月 SMS 支出配额

您可以使用相应 Amazon SNS 区域中的 Amazon SNS 资源为下表中的任何 Amazon Cognito 区域发送 SMS 消息。

Amazon Cognito 区域 Amazon SNS 区域
美国东部(俄亥俄州) 美国东部(俄亥俄)、美国东部(弗吉尼亚北部)
亚太地区(孟买) 亚太地区(孟买)、亚太地区(新加坡)
加拿大(中部) 加拿大(中部)、美国东部(弗吉尼亚北部)
欧洲地区(法兰克福) 欧洲(法兰克福)、欧洲(爱尔兰)
欧洲地区(伦敦) 欧洲(伦敦)、欧洲(爱尔兰)
亚太地区(首尔) 亚太地区(东京)
美国东部(弗吉尼亚州北部) 美国东部(弗吉尼亚北部)
美国西部(北加利福尼亚) 美国西部(北加利福尼亚)
美国西部(俄勒冈) US West(Oregon)
亚太地区(新加坡) 亚太地区(新加坡)
亚太地区(悉尼) 亚太地区(悉尼)
亚太地区(东京) 亚太地区(东京)
欧洲地区(爱尔兰) 欧洲地区(爱尔兰)
欧洲地区(巴黎) 欧洲地区(巴黎)
欧洲地区(斯德哥尔摩) 欧洲地区(斯德哥尔摩)
欧洲地区(米兰) Europe (Milan)
Middle East (Bahrain) 中东(巴林)
South America(São Paulo) South America(São Paulo)
亚太地区(大阪) 亚太地区(大阪)
以色列(特拉维夫) 以色列(特拉维夫)
非洲(开普敦) 非洲(开普敦)
亚太地区(雅加达) 亚太地区(雅加达)
中东(阿联酋) 中东(阿联酋)
欧洲(苏黎世) 欧洲(苏黎世)

获取源身份以将 SMS 消息发送到美国电话号码

无论您是构建 SMS 沙盒测试环境还是生产环境,如果您计划向美国电话号码发送短信,则必须获取源身份。

自 2021 年 6 月 1 日起,美国运营商要求提供源身份才能向美国电话号码发送短信。如果您没有源身份,则必须获取一个。请参阅《Amazon Pinpoint 用户指南》中的申请号码了解如何获取源身份。

如果您从事以下操作 Amazon Web Services 区域,则必须开 Amazon Web Services Support 票才能获得发件人身份。有关说明,请参阅《Amazon Simple Notification Service 开发人员指南》中的针对 SMS 消息收发请求支持

  • 美国东部(俄亥俄州)

  • 欧洲地区(斯德哥尔摩)

  • 欧洲地区(巴黎)

  • Europe (Milan)

  • Middle East (Bahrain)

  • South America(São Paulo)

  • 美国西部(北加利福尼亚)

当您的同一个来源身份有多个时 Amazon Web Services 区域,Amazon SNS 会按以下优先顺序选择来源身份类型:短码、10DLC、免费电话号码。无法更改此优先级。有关更多信息,请参阅 Amazon SNS 常见问题

确认您位于 SMS 沙盒中

按照以下过程确认您是否在 SMS 沙盒中。对每个有正式版 Amazon Cognito 用户池 Amazon Web Services 区域 的地方重复此操作。

确认您位于 SMS 沙盒中
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择 User Pools(用户池)。

  3. 从列表中选择现有用户池。

  4. 选择 Messaging(消息收发)选项卡。

  5. SMS configuration(SMS 配置)部分,展开 Move to Amazon SNS production environment(迁移到 Amazon SNS 生产环境)。如果您的账户位于 SMS 沙盒中,您将看到以下消息:

    You are currently in the SMS Sandbox and cannot send SMS messages to unverified numbers.

    如果您没有看到此消息,则表明有人已经在您的账户中设置了 SMS 消息。跳至在 Amazon Cognito 中完成用户群体设置

  6. 选择消息中的 Amazon SNS 链接。这将在新选项卡中打开 Amazon SNS 控制台。

  7. 验证您是否位于沙盒环境中。控制台消息会显示您的沙箱状态 Amazon Web Services 区域,如下所示:

    This account is in the SMS sandbox in US East (N. Virginia).

将您的账户移出 Amazon SNS 沙盒

如果正在测试应用程序,并且只需向管理员可以验证的电话号码发送 SMS 消息,请跳过此步骤。

要在生产环境中使用您的应用程序,请将账户移出 SMS 沙盒并放入生产环境。在中配置了包含您希望 Amazon Cognito 使用的 Amazon SNS 资源的原始身份后,您可以在留在 SMS 沙箱中时 Amazon Web Services 账户 验证美国电话号码。 Amazon Web Services 区域 当您的 Amazon SNS 环境投入生产时,您无需在 Amazon SNS 中验证用户电话号码即可向用户发送 SMS 消息。

有关详细说明,请参阅《Amazon Simple Notification Service 开发人员指南》中的移出 SMS 沙盒

在 Amazon SNS 中验证 Amazon Cognito 的电话号码

如果您已将账户移出 SMS 沙盒,则跳过此步骤。

当您位于 SMS 沙盒中时,您可以使用 Amazon SNS 向任何已验证的号码发送消息。

要验证电话号码,请执行以下操作:

  1. 在 Amazon SNS 控制台的 Text messaging (SMS)(文本消息 (SMS))部分,添加 Sandbox destination phone number(沙盒目标电话号码)。

  2. 在您提供的电话号码上接收带有密码的 SMS 消息。

  3. 在 Amazon SNS 控制台上,输入 SMS 消息中的 Verification code(验证代码)。

有关详细说明,请参阅《Amazon Simple Notification Service 开发人员指南》中的在 SMS 沙盒中添加并验证电话号码

注意

当您在 SMS 沙盒中时,Amazon SNS 限制可以验证的目标电话号码的数量。请参阅《Amazon Simple Notification Service 开发人员指南》中的 SMS 沙盒

在 Amazon Cognito 中完成用户群体设置

返回您在其中创建或者编辑用户池的浏览器选项卡。完成过程。当您成功将 SMS 配置添加到用户群体后,Amazon Cognito 会向内部电话号码发送测试消息,以验证您的配置有效。Amazon SNS 会对每条测试 SMS 消息收费。