Amazon Cognito 用户池的短信设置 - Amazon Cognito

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

Amazon Cognito 用户池的短信设置

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

Amazon Cognito 使用 Amazon Simple Notification Service (Amazon SNS) 传送短信。反过来,Amazon SNS 会将短信交给。 AWS End User Messaging SMS如果您是首次通过 Amazon Cognito 发送短信,则会将您 AWS End User Messaging SMS 置于沙盒环境中。在沙盒环境中,您可以对应用程序的 SMS 文本消息进行测试。在沙箱中,您只能模拟消息的发送。

注意

2024 年 11 月, AWS 将 Amazon SNS 短信替换为。 AWS End User Messaging SMS目前,亚马逊 Cognito 控制台指的是亚马逊 SNS 资源。用户池通过 Amazon SNS 发布操作启动短信,该操作是直通的。 AWS End User Messaging SMS因此,您仍然必须为配置权限sns:Publish,而不是sms-voice:SendTextMessage

AWS End User Messaging SMS SMS 短信的费用。有关更多信息,请参阅AWS End User Messaging SMS 定价

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

消息选项

活动 API 操作 传递选项 格式选项 可自定义 消息模板
忘记密码 ForgotPassword, AdminResetUserPassword 电子邮件、短信 code 验证消息
邀请 AdminCreateUser 电子邮件、短信 code 邀请消息
自行注册 SignUp, ResendConfirmationCode 电子邮件、短信 代码,链接 验证消息
电子邮件地址或电话号码验证 UpdateUserAttributes, AdminUpdateUserAttributes, GetUserAttributeVerificationCode 电子邮件、短信 code 验证消息
多重身份验证 (MFA) AdminInitiateAuth, InitiateAuth 电子邮件¹、短信、身份验证器应用程序 code 是² MFA 消息
一次性密码认证 (OTP) AdminInitiateAuth, InitiateAuth 电子邮件¹、短信 code MFA 消息 ³

¹ 需要基本功能计划或更高版本以及 Amazon SES 电子邮件配置

² 用于短信和电子邮件消息。

³ 只有在用户池中必须使用 MFA 或可选 MFA 时,您才能自定义 MFA 消息模板。当 MFA 处于非活动状态时,Amazon Cognito 会使用默认模板发送一次性密码。

AWS End User Messaging SMS SMS 消息的费用。有关更多信息,请参阅AWS End User Messaging SMS 定价

要了解有关 MFA 的更多信息,请参阅 短信和电子邮件消息 MFA

Amazon Cognito 可能会在短时间内阻止向单个目的地发送额外的电子邮件或短信。如果您认为自己的用户群受到了影响,请配置并查看日志中是否存在消息传送错误,然后联系您的客户团队。

最佳实践

由于全球范围内未经请求的短信流量巨大,一些政府在短信发送者和接收者之间设置了障碍。当您使用短信进行 MFA 和用户更新时,必须采取额外的步骤来确保您的短信已送达。您还必须监控用户可能居住的国家/地区的 SMS-message-related法规,并保持您的 SMS 消息配置处于最新状态。有关更多信息,请参阅《AWS End User Messaging SMS 用户指南》中的短信和彩信国家/地区功能和限制

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

查看以下链接,了解有关保护 SMS 消息传送架构的信息。

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

Amazon Cognito AWS End User Messaging SMS间接使用亚马逊 SNS 从您的用户池中发送短信。您还可以使用自定义 SMS 发件人 Lambda 触发器,通过自己的资源发送 SMS 消息。首次在特定区域设置 SMS 短信时 AWS 区域,会将您 AWS End User Messaging SMS 置 AWS 账户 于该区域的 SMS 沙箱中。 AWS End User Messaging SMS 使用沙盒来防止欺诈和滥用行为并满足合规性要求。当你 AWS 账户 进入沙箱时,会 AWS End User Messaging SMS 施加一些限制。例如,如果您有发件人身份,则可以向最多 10 个经过验证的目标号码发送短信,也可以模拟发送没有发件人身份的消息。当你 AWS 账户 仍在沙箱中时,不要在生产环境中发送 SMS 消息。当您位于沙盒中时,Amazon Cognito 无法向用户的电话号码发送消息。

准备一个 Amazon Cognito 可以用来发送短信的 IAM 角色 AWS End User Messaging SMS

当您从用户群体发送 SMS 消息时,Amazon Cognito 将代入您的账户中的 IAM 角色。Amazon Cognito 使用分配给该角色的 sns:Publish 权限向您的用户发送 SMS 消息。在 Amazon Cognito 控制台中,您可以从用户池的 “身份验证方法” 菜单的 “短信” 下设置 IAM 角色选择,也可以在用户池创建向导期间进行此选择。

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

  • 代入角色操作是代表 aws:SourceArn 条件下的用户池来执行。

  • 代入角色操作是代表通过 aws:SourceAccount 条件设置的 AWS 账户 中的用户池来执行。

  • 代入角色操作在 sts:externalId 条件中包括外部 ID。

JSON
{ "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 AWS Management Console 或中查找您的用户池。

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

您必须更新 UpdateUserPoolAPI 请求中的用户池ExternalId参数,并使用相同值的sts:externalId条件更新 IAM 角色信任策略。要了解如何使用 API 来更新用户池,同时保持原有配置不变,请参阅 更新用户池和应用程序客户端配置

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

选择 SM AWS 区域 S 消息的

注意

现在可以在中管理中的 AWS SMS 消息AWS End User Messaging SMS

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

在新建用户池向导的 Configure message delivery(配置消息传输)步骤中,为 SMS 资源选择区域。您也可以在现有用户池的 “身份验证方法” 菜单中选择 “信” 下的 “编辑”。

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

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

Amazon SNS(通过 AWS End User Messaging SMS)将所有新账户的支出配额设置为每月 1.00 美元(美元)。在使用 Amazon Cognito 时 AWS 区域 ,你可能已经提高了支出限额。在更改 Amazon SNS 短信的配额之前,请在 AWS 支持中心提出增加配额的案例,以提高您在新区域的限额。 AWS 区域 有关更多信息,请参阅《AWS End User Messaging SMS 用户指南》中的 “从 AWS End User Messaging SMS 彩信和语音沙箱转移到生产环境”。

您可以使用相应短信区域中的 AWS End User Messaging SMS 资源向下表中的任何 Amazon Cognito 区域发送短信

Amazon Cognito 区域 短信区域

美国东部(俄亥俄州)

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

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

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

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

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

美国西部(俄勒冈州)

美国西部(俄勒冈州)

加拿大(中部)

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

加拿大西部(卡尔加里)

加拿大西部(卡尔加里)

墨西哥(中部)

墨西哥(中部)

欧洲地区(法兰克福)

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

欧洲地区(伦敦)

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

欧洲地区(爱尔兰)

欧洲地区(爱尔兰)

欧洲地区(巴黎)

欧洲地区(巴黎)

欧洲地区(斯德哥尔摩)

欧洲地区(斯德哥尔摩)

欧洲地区(米兰)

欧洲地区(米兰)

欧洲(西班牙)

欧洲(西班牙)

欧洲(苏黎世)

欧洲(苏黎世)

亚太地区(马来西亚) 亚太地区(新加坡)

亚太地区(泰国)

亚太地区(孟买)

亚太地区(孟买)

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

亚太地区(海得拉巴)

亚太地区(海得拉巴)

亚太地区(香港)

亚太地区(新加坡)

亚太地区(首尔)

亚太地区(东京)

亚太地区(新加坡)

亚太地区(新加坡)

亚太地区(悉尼)

亚太地区(悉尼)

亚太地区(东京)

亚太地区(东京)

亚太地区(雅加达)

亚太地区(雅加达)

亚太地区(大阪)

亚太地区(大阪)

亚太地区(墨尔本)

亚太地区(墨尔本)

中东(巴林)

中东(巴林)

中东(阿联酋)

中东(阿联酋)

南美洲(圣保罗)

南美洲(圣保罗)

以色列(特拉维夫)

以色列(特拉维夫)

非洲(开普敦)

非洲(开普敦)

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

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

美国运营商需要提供发件人身份才能向美国电话号码发送消息。如果您没有源身份,则必须获取一个。要了解如何获取来源身份,请参阅AWS End User Messaging SMS 用户指南中的申请电话号码

当同一身份中有多个发起身份时 AWS 区域,请按以下优先顺序 AWS End User Messaging SMS 选择发起身份类型:短码、10DLC、免费电话号码。无法更改此优先级。有关更多信息,请参阅 AWS End User Messaging SMS FAQs

确认您位于 SMS 沙盒中

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

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

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

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

  4. 选择 “身份验证方法” 菜单。

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

    配置 AWS 服务 依赖关系以完成 SMS 消息设置

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

  6. 在 “移至亚马逊 SNS 生产环境” 下选择 Amazon SNS 链接。这将在新选项卡中打开 Amazon SNS 控制台。

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

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

将您的账户移出沙箱

要在生产环境中使用您的应用程序,请将账户移出 SMS 沙盒并放入生产环境。在中配置了包含您希望 Amazon Cognito 使用的 AWS End User Messaging SMS 资源的原始身份后,您可以在留在 SMS 沙箱中时 AWS 账户 验证美国电话号码。 AWS 区域 当您的环境处于生产环境时,您无需在向用户发送 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 用户指南中的添加经过验证的目的地电话号码

您还可以使用模拟的发件人和目的地发送邮件。模拟器消息会生成日志,但不会通过运营商网络发送。从 “快捷方式” 菜单中,选择 “使用短信模拟器测试短信发送”。有关更多信息,请参阅《AWS End User Messaging SMS 用户指南》中的模拟器电话号码

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

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