部署AWS SAM应用时S3 BucketPolicy报403权限拒绝的解决方法
解决AWS SAM部署中S3 BucketPolicy的403权限拒绝问题
问题详情
部署AWS SAM应用时触发CREATE_FAILED错误,目标资源为AWS::S3::BucketPolicy,具体错误提示:
Resource handler returned message: "Access Denied (Service: S3, Status Code: 403, Request ID: N8JK1SK...)"
相关配置文件
Template.yaml内容:
ImageS3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: !Sub 'my-public-bucket-${AWS::AccountId}-${AWS::Region}' ImageS3BucketPolicy: Type: 'AWS::S3::BucketPolicy' Properties: Bucket: !Ref ImageS3Bucket PolicyDocument: Version: '2012-10-17' Statement: - Sid: PublicReadGetObject Effect: Allow Principal: '*' Action: - 's3:GetObject' Resource: !Sub 'arn:aws:s3:::${ImageS3Bucket}/*' Outputs: BucketName: Description: 'Image S3 bucket' Value: !Ref ImageS3Bucket BucketURL: Description: 'URL of the S3 bucket' Value: !Sub 'https://${ImageS3Bucket}.s3.amazonaws.com'
已配置的IAM策略
该IAM用户已拥有AdministratorAccess权限,额外附加策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:PutBucketPolicy", "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:DeleteBucket" ], "Resource": [ "arn:aws:s3:::my-public-bucket-*", "arn:aws:s3:::my-public-bucket-*/*" ] }, { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:UpdateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate", "cloudformation:ValidateTemplate" ], "Resource": "*" } ] }
已确认信息
- SAM CLI使用的AWS凭证正确(已核对
.aws/credentials中的密钥与IAM用户匹配) - SAM CLI已更新至最新版本(1.118.0)
解决方案
1. 检查账户级S3公共访问阻止设置
AWS账户默认可能开启S3公共访问阻止,会直接拒绝创建允许公共访问的BucketPolicy:
- 登录AWS控制台进入S3服务
- 左侧导航栏选择「Block Public Access (account settings)」
- 确认是否开启了「Block public access to buckets and objects granted through any bucket policies」等相关选项
- 若开启,临时取消或为目标Bucket设置例外后重新部署
2. 验证IAM策略的资源匹配逻辑
虽然已附加自定义策略,但需确认:
s3:PutBucketPolicy操作对应的资源应为桶本身(你的现有策略已包含,但需排查是否有权限边界冲突)- 移除自定义策略,仅保留
AdministratorAccess托管策略测试部署,若成功则说明自定义策略存在逻辑问题
3. 排查组织级服务控制策略(SCP)
如果账户属于AWS组织,需检查应用于该账户的SCP:
- 登录AWS组织控制台,查看关联的SCP规则
- 确认是否存在拒绝
s3:PutBucketPolicy或限制公共访问的条目,如有则调整SCP
4. 跳过SAM CLI直接用CloudFormation部署
通过CloudFormation控制台直接上传Template.yaml部署,观察更详细的错误提示,排查是否是SAM CLI的额外处理导致问题:
- 进入CloudFormation服务,创建新栈并上传模板文件
- 查看部署过程中的具体错误细节
内容的提问来源于stack exchange,提问作者Wayne Silbermann
相关产品推荐
相关产品推荐

