AWS S3存储桶仅指定用户写入及SNS通知配置报错求解
报错根因
- 第一个报错「API response: Action does not apply to any resource(s) in statement」:原策略第二条Statement中包含
s3:GetBucketPolicy动作,该动作属于桶级操作,适用资源应为存储桶ARN(arn:aws:s3:::protected-configurations),但你配置的资源是对象级路径arn:aws:s3:::protected-configurations/*,动作与资源范围不匹配导致报错。 - 第二个报错「Unable to validate the following destination configurations」:两个诱因,一是原策略给所有主体开放了
s3:PutBucketNotification权限,但你配置的全局Deny规则未覆盖该动作,权限逻辑冲突导致S3无法验证通知配置的权限合法性;二是你配置事件通知时使用的操作账号如果不是指定的editor用户,会被隐式阻止修改通知配置。
精简修复策略
以下是符合需求的最小可用策略,同时修复所有报错:
{ "Version": "2012-10-17", "Id": "ProtectedBucketPolicy", "Statement": [ { "Sid": "AllowPublicRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectAcl", "s3:GetBucketPolicy", "s3:GetBucketNotification" ], "Resource": [ "arn:aws:s3:::protected-configurations", "arn:aws:s3:::protected-configurations/*" ] }, { "Sid": "DenyAllWriteExceptEditor", "Effect": "Deny", "NotPrincipal": { "AWS": "arn:aws:iam::15436577732:user/editor" }, "Action": [ "s3:DeleteObject*", "s3:PutObject*", "s3:PutBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketNotification" ], "Resource": [ "arn:aws:s3:::protected-configurations", "arn:aws:s3:::protected-configurations/prod/*" ] } ] }
策略修改说明
- 合并了原两条Allow语句,统一适配桶级和对象级资源,解决动作与资源不匹配的报错
- 补充了
s3:DeleteBucketPolicy、s3:PutBucketNotification到Deny规则中,避免非指定用户删除策略、修改通知配置,完全匹配写保护的核心需求 - 用通配符简化了动作配置,大幅减少冗余规则
- 如果你不需要所有主体都能读对象和桶配置,可直接删除第一条Allow语句,单独给需要读权限的主体配置授权即可
SNS通知报错补充验证
如果修改策略后仍然出现通知配置报错,再确认两点:
- 配置通知时使用的账号为指定的editor用户
- SNS主题的访问策略中已添加允许S3服务主体
s3.amazonaws.com执行sns:Publish动作的规则
内容的提问来源于stack exchange,提问作者Don Giulio
相关产品推荐
相关产品推荐

