You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:27:24