S3桶配置SQS事件通知的权限问题及报错排查
问题:S3配置事件通知到SQS时持续权限报错
我有一个存储日志的S3桶,正在配置事件通知,每当有新日志生成时向SQS发送消息。按照官方指南配置时首次碰到权限错误,添加提示的权限时系统说该权限不存在,于是我加了s3:PutBucketNotification权限,但重试还是报错。我的SQS访问策略如下:
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "SQS-queue-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }
可能的原因及解决办法
- 替换策略中的占位符:你当前的SQS策略里
SQS-queue-ARN、awsexamplebucket1、bucket-owner-account-id都是示例占位符,必须替换成实际的队列ARN、你的S3桶名称、桶所属的AWS账号ID。占位符不替换会导致S3无法匹配到合法的资源和账号,直接触发权限拒绝。 - 补全配置操作的IAM权限:除了
s3:PutBucketNotification,执行配置事件通知的IAM用户/角色还需要sqs:GetQueueAttributes和sqs:ListQueues权限——S3在保存通知配置前会验证目标队列的可访问性,缺这两个权限会导致配置失败。 - 检查SQS加密权限(如果开启SSE):如果你的SQS队列开启了服务器端加密(SSE-KMS),必须给S3服务主体
arn:aws:iam::aws:service/s3.amazonaws.com添加KMS密钥的kms:GenerateDataKey和kms:Decrypt权限,否则S3无法向加密队列发送消息。 - 确认区域一致性:S3事件通知要求目标SQS队列和桶在同一个AWS区域,跨区域配置会直接报错,检查两者的区域是否一致。
- 验证JSON策略语法:仔细检查你的SQS策略JSON是否存在语法错误,比如逗号遗漏、括号不配对等问题——语法错误会导致策略完全不生效,看起来就像权限不足。
内容的提问来源于stack exchange,提问作者IsNotMyIp
相关产品推荐
相关产品推荐

