可能的原因是您缺少与 SQS 访问授权相关的 IAM 权限。请确保以下 IAM 策略被授予使用 API Gateway 的角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sqs:DeleteMessage",
"sqs:ChangeMessageVisibility",
"sqs:GetQueueAttributes",
"sqs:GetQueueUrl",
"sqs:SendMessageBatch",
"sqs:SendMessage"
],
"Resource": "arn:aws:sqs:*:*:*"
}
]
}
如果您已经在服务器端配置了这个策略,而且还是无法访问 SQS,请确保以下条件符合:
aws = boto3.client('sqs')
policy = aws.get_queue_attributes(QueueUrl=queue_url, AttributeNames=['Policy'])['Attributes']['Policy']
policy = json.loads(policy)
policy['Statement'].append({
'Effect': 'Allow',
'Principal': {'AWS': ['arn:aws:iam::{}:role/{}'.format(account_number, role_name)]},
'Action': 'SQS:SendMessage',
'Resource': 'arn:aws:sqs:us-west-2:123456789012:my-queue',
'Condition': {'ArnEquals': {'aws:SourceArn': 'arn:aws:execute-api:us-west-