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

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

SMSAmazon Cognito 用户池的消息设置

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

Amazon Cognito 使用亚马逊简单通知服务 SNS (亚马逊) 发送SMS短信。如果您是首次通过亚马逊 Cognito 或亚马逊SNS发送短信,亚马逊会将您SNS置于沙盒环境中。在沙盒环境中,您可以测试应用程序是否有短SMS信。在沙盒中,只能将消息发送给经过验证的电话号码。

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

注意

由于全球范围内不请自来的SMS流量很大,一些政府在邮件的发件人和收件人之间设置了屏障。SMS当你使用SMS消息MFA和用户更新时,你必须采取其他措施来确保你的消息已送达。您还必须监控您的用户可能居住的国家/地区的SMS邮件相关法规,并使您的SMS消息配置保持最新状态。有关更多信息,请参阅《亚马逊简单通知服务开发者指南》中的移动短信 (SMS)

使用SMS消息对用户进行身份验证和验证并不是最佳安全实践。电话号码可能会更改所有者,并且可能无法可靠地代表MFA为用户考虑的问题。取而代之的是,TOTPMFA在您的应用程序中或使用第三方 IdP 实现。您还可以使用自定义身份验证质询 Lambda 触发器创建其他自定义身份验证要素。

Amazon Cognito 向您的用户发送带有他们可以输入的代码的SMS消息。下表显示了可以生成SMS消息的事件。

消息选项

活动 API操作 传递选项 格式选项 可自定义 消息模板
忘记密码 ForgotPassword, AdminResetUserPassword 电子邮件,SMS 代码 不适用
邀请 AdminCreateUser 电子邮件,SMS 代码 邀请消息
自行注册 SignUp, ResendConfirmationCode 电子邮件,SMS 代码,链接 验证消息
电子邮件地址或电话号码验证 UpdateUserAttributes, AdminUpdateUserAttributes, GetUserAttributeVerificationCode 电子邮件,SMS 代码 验证消息
多因素身份验证 () MFA AdminInitiateAuth, InitiateAuth SMS,身份验证器应用程序 代码 是¹ MFA消息

¹ 用于SMS留言。

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

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

准备一个 Amazon Cognito 可以用来向亚马逊发送SMS消息的IAM角色 SNS

当您从用户池中发送SMS消息时,Amazon Cognito 将在您的账户中IAM扮演一个角色。Amazon Cognito 使用分配给该角色的sns:Publish权限向您的用户发送SMS消息。在 Amazon Cognito 控制台中,您可以从用户池的 “消息” 选项卡中设置IAM角色选择SMS也可以在用户池创建向导中进行此选择。

以下示例IAM角色信任策略授予 Amazon Cognito 用户池担任该角色的有限能力。Amazon Cognito 只有在满足以下条件时才能担任该角色:

  • 假设角色操作代表条件下的用户池。aws:SourceArn

  • assume-role 操作代表条件 Amazon Web Services 账户 设定的用户池。aws:SourceAccount

  • 假设角色操作在条件中包含外部 ID。sts:externalId

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:cognito-idp:us-west-2:111122223333:userpool/us-west-2_EXAMPLE" } } } ] }

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

要发送用于多因素身份验证的SMS消息,您的IAM角色信任策略必须有一个sts:ExternalId条件。此条件的值必须与您的用户池SmsConfigurationExternalId属性相匹配。当您在 Amazon Cognito 控制台中创建用户池的过程中创建IAM角色时,Amazon Cognito 会在角色和用户池设置中为您配置外部 ID。当你使用现有IAM角色时,情况并非如此。

您必须更新UpdateUserPoolAPI请求中的用户池ExternalId参数,并使用具有相同值的sts:externalId条件更新IAM角色信任策略。要了解如何使用API以保留原始配置的方式更新用户池,请参阅更新用户群体配置

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

选择 A Amazon Web Services 区域 mazon SNS SMS 消息的

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

注意

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

在新建用户池向导的 “配置邮件传送” 步骤中为SMS资源选择区域。您也可以在现有用户池的 “消息” 选项卡下SMS选择 “编辑”。

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

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

Amazon SNS 将所有新账户的支出配额设定为每月 1.00 美元 (USD)。在使用 Amazon Cognito 时 Amazon Web Services 区域 ,你可能已经提高了支出限额。在更改 Amazon SNS SMS 消息之前,请在 Amazon 支持中心提出增加配额的案例,以提高您在新区域的限额。 Amazon Web Services 区域 有关更多信息,请参阅《亚马逊简单通知服务开发者指南》SNS中的 “申请增加您的亚马逊月度SMS支出配额”。

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

Amazon Cognito 区域 亚马逊SNS地区

美国东部(俄亥俄州)

美国东部(俄亥俄)、美国东部(弗吉尼亚北部)

美国东部(弗吉尼亚州北部)

美国东部(弗吉尼亚北部)

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

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

美国西部(俄勒冈)

美国西部(俄勒冈州)

加拿大(中部)

加拿大(中部)、美国东部(弗吉尼亚北部)

加拿大西部(卡尔加里)

加拿大西部(卡尔加里)

欧洲地区(法兰克福)

欧洲(法兰克福)、欧洲(爱尔兰)

欧洲地区(伦敦)

欧洲(伦敦)、欧洲(爱尔兰)

欧洲地区(爱尔兰)

欧洲地区(爱尔兰)

欧洲地区(巴黎)

欧洲地区(巴黎)

欧洲地区(斯德哥尔摩)

欧洲地区(斯德哥尔摩)

欧洲地区(米兰)

欧洲地区(米兰)

欧洲(西班牙)

欧洲(西班牙)

欧洲(苏黎世)

欧洲(苏黎世)

亚太地区(孟买)

亚太地区(孟买)、亚太地区(新加坡)

亚太地区(海得拉巴)

亚太地区(海得拉巴)

亚太地区(香港)

亚太地区(新加坡)

亚太地区(首尔)

Asia Pacific (Tokyo)

亚太地区(新加坡)

亚太地区(新加坡)

亚太地区(悉尼)

亚太地区(悉尼)

亚太地区(东京)

Asia Pacific (Tokyo)

亚太地区(雅加达)

亚太地区(雅加达)

亚太地区(大阪)

亚太地区(大阪)

亚太地区(墨尔本)

亚太地区(墨尔本)

中东(巴林)

中东(巴林)

中东 (UAE)

中东 (UAE)

南美洲(圣保罗)

南美洲(圣保罗)

以色列(特拉维夫)

以色列(特拉维夫)

非洲(开普敦)

非洲(开普敦)

获取向美国电话号码发送SMS消息的发件人身份

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

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

如果您从事以下操作 Amazon Web Services 区域,则必须开 Amazon Web Services Support 票才能获得发件人身份。有关说明,请参阅《Amazon 简单通知服务开发者指南》中的 “请求SMS消息传送支持”。

  • 美国东部(俄亥俄州)

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

  • 欧洲地区(巴黎)

  • Europe (Milan)

  • Middle East (Bahrain)

  • 南美洲(圣保罗)

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

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

确认您已进入SMS沙箱

使用以下步骤确认您已进入SMS沙箱。对每个有正式版 Amazon Cognito 用户池 Amazon Web Services 区域 的地方重复此操作。

确认您已进入SMS沙箱
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

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

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

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

  5. SMS配置部分中,展开移至 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 使用的亚马逊SNS资源的原始身份后,您可以在 Amazon Web Services 账户 您仍处于沙箱中SMS时验证美国电话号码。 Amazon Web Services 区域 当您的亚马逊SNS环境投入生产时,您无需在亚马逊SNS中验证用户电话号码即可向用户发送SMS消息。

有关详细说明,请参阅Amazon 简单通知服务开发者指南》中的 “移出SMS沙箱”

在亚马逊中验证亚马逊 Cognito 的电话号码 SNS

如果您已将帐户移出SMS沙箱,请跳过此步骤。

当您在SMS沙箱中时,您可以向已通过 Amazon SNS 验证的任何电话号码发送消息。

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

  1. 在 Amazon SNS 控制台的短信 (SMS) 部分添加沙盒目标电话号码

  2. 通过您提供的电话号码接收带有验证码的SMS消息。

  3. 在 Amazon SNS 控制台中输入SMS消息中的验证码

有关详细说明,请参阅《亚马逊简单通知服务开发者指南》中的在SMS沙箱中添加和验证电话号码

注意

Amazon SNS 限制了您在SMS沙箱中可以验证的目标电话号码的数量。SMS参见《Amazon 简单通知服务开发者指南》中的沙盒

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

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