如何获取Cognito发送SMS消息所使用的SNS主题ARN
问题解答
1. 为什么查询不到SMS相关的SNS主题ARN
AWS Cognito发送验证短信的默认逻辑,是直接调用SNS的点对点短信发送能力,不需要预先在你的账号下创建SNS主题,也不会自动生成对应的主题资源,所以你在控制台、CLI里检索不到相关主题是正常现象。
只有当你手动在Cognito用户池配置中指定了自定义SNS主题作为SMS发送通道时,才会用到你自行创建的主题ARN,默认配置下不存在这类专属主题。
2. 如何对Cognito的IAM角色做最小权限限制
不需要通过SNS主题ARN限制权限,你可以通过IAM策略的条件字段实现权限收敛,以下是可用的最小权限策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "*", "Condition": { "StringEquals": { "sns:SMSType": "Transactional" } } } ] }
说明:
sns:SMSType是SNS的专用条件键,值设为Transactional对应Cognito发送身份验证类短信的场景,避免该角色被用于发送营销类(Promotional)短信- 如果你还需要进一步限制短信的发送范围,可以追加
StringLike条件匹配接收方号码前缀,比如仅允许发送给中国内地号码可以添加条件:"StringLike": { "sns:Endpoint": "+86*" }
3. 如果你确实需要使用指定SNS主题发送短信
可以按以下步骤操作:
- 自行在SNS控制台创建专用的SMS主题,记录其ARN
- 进入Cognito用户池的消息定制配置页,找到SMS发送配置项,选择使用自定义SNS主题,填入你创建的主题ARN
- 此时就可以将IAM策略的Resource字段修改为你创建的主题ARN,移除通配符即可
内容的提问来源于stack exchange,提问作者Nevo
相关产品推荐
相关产品推荐

