当我将订阅者添加到我的 Amazon Simple Notification Service (Amazon SNS) 主题时,我收到 AWS Identity and Access Management (IAM) 授权错误。如何解决此错误?
简短描述
当 IAM 实体尝试在没有订阅 API 操作权限的情况下向 Amazon SNS 主题添加订阅时,SNS 会返回以下错误:
An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: sns:Subscribe on resource: YOUR_SNS_TOPIC_ARN
注意: IAM 实体可以是 IAM 用户或角色。
要解决此错误,请授予 IAM 实体在 Amazon SNS 主题上运行订阅 API 操作的权限。
如果您收到以 “显式拒绝” 结尾的类似错误
删除任何明确拒绝 IAM 实体访问 SNS 资源的策略语句。
解决方法
如果 IAM 实体和 SNS 主题位于不同的 AWS 账户中
请执行以下两项操作:
将 IAM 策略声明附加到允许实体运行“sns:Subscribe”操作的 IAM 实体
有关说明,请参阅添加和删除 IAM 身份权限。附上以下示例 IAM 策略声明:
重要提示:将**“YOUR_SNS_TOPIC_ARN”**替换为您的Amazon SNS 主题的Amazon Resource Name (ARN)。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SNSSubscribePermission",
"Effect": "Allow",
"Action": "sns:Subscribe",
"Resource": "YOUR_SNS_TOPIC_ARN"
}
]
}
将 Amazon SNS 策略声明附加到您主题的访问策略,以允许 IAM 实体运行“sns:Subscribe”操作
有关说明,请参阅如何编辑我的 Amazon SNS 主题的访问策略? 附上以下示例 Amazon SNS 策略声明:
重要提示:将**“YOUR_IAM USER/ROLE_ARN”替换为您的 IAM 实体的 ARN。将“YOUR_SNS_TOPIC_ARN”**替换为您的Amazon SNS 主题的 ARN。
{
"Sid": "AllowIAMEntity",
"Effect": "Allow",
"Principal": {
"AWS": "YOUR_IAM USER/ROLE_ARN "
},
"Action": "sns:Subscribe",
"Resource": "YOUR_SNS_TOPIC_ARN"
}
如果 IAM 实体和 SNS 主题在同一账户中
请执行以下任一操作,但不能同时执行两项操作:
将 IAM 策略声明附加到允许实体运行“sns:Subscribe”操作的 IAM 实体。
– 或 –
将 Amazon SNS 策略声明附加到您主题的访问策略,以允许 IAM 实体运行“sns:Subscribe”操作。
有关策略声明示例,请参阅本文的如果 IAM 实体和 SNS 主题位于不同的 AWS 账户中部分。
验证 IAM 实体的策略或 SNS 主题的访问策略均未明确拒绝访问 SNS 资源
查看 IAM 实体的策略和 SNS 主题的访问策略。然后,删除任何明确拒绝 IAM 实体访问 SNS 资源的策略语句。
有关更多信息,请参阅显式拒绝与隐式拒绝之间的区别。
相关信息
在 Amazon SNS 上使用基于身份的策略