当AWS SNS主题订阅出现“死信队列(重试策略)权限被拒绝”错误时,可以尝试以下解决方法:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SNSPermissions",
"Effect": "Allow",
"Action": [
"sns:Subscribe",
"sns:SetTopicAttributes"
],
"Resource": "arn:aws:sns:region:account-id:topic-name"
},
{
"Sid": "SQSPemissions",
"Effect": "Allow",
"Action": [
"sqs:SendMessage",
"sqs:GetQueueAttributes"
],
"Resource": "arn:aws:sqs:region:account-id:queue-name"
}
]
}
请确保将上述资源ARN(Amazon Resource Name)中的region、account-id和topic-name、queue-name替换为实际的值。
确保你使用的IAM用户或角色具有访问SNS主题和SQS队列的权限。你可以在AWS控制台的IAM页面上编辑用户或角色的权限。
检查SNS主题和SQS队列的区域是否匹配。SNS主题和SQS队列必须位于相同的AWS区域。
确保你的代码正确设置SNS主题和SQS队列之间的订阅。以下是一个示例代码片段,展示了如何创建一个SNS主题和一个SQS队列,并将它们订阅起来:
import boto3
# 创建SNS客户端
sns = boto3.client('sns', region_name='us-west-2')
# 创建SNS主题
response = sns.create_topic(Name='my-topic')
topic_arn = response['TopicArn']
# 创建SQS客户端
sqs = boto3.client('sqs', region_name='us-west-2')
# 创建SQS队列
response = sqs.create_queue(QueueName='my-queue')
queue_url = response['QueueUrl']
# 将SQS队列订阅到SNS主题
response = sns.subscribe(
TopicArn=topic_arn,
Protocol='sqs',
Endpoint=queue_url
)
print(response)
请将上述示例代码中的region_name、Name、QueueName替换为实际的值。
如果上述解决方法无法解决问题,请检查AWS文档和错误日志以获取更多详细信息,并尝试进一步调试和排查问题。
上一篇:AWS SNS主题的初始值