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

部署CloudFormation栈时遭遇S3 GetObject权限拒绝问题

解决方案:CloudFormation部署API Gateway时S3访问被拒绝的问题

Alright, let's break down why you're hitting that API: s3:GetObject Access Denied error and fix it step by step.

核心问题分析

你的桶策略目前只包含一条Deny规则,但AWS的权限模型默认是拒绝所有请求,除非显式授予允许权限。虽然你把apigateway.amazonaws.com排除在了Deny规则之外,但没有添加明确的Allow语句授权API Gateway服务执行s3:GetObject操作,这就是访问被拦截的根本原因。

另外,如果你的CloudFormation模板需要直接读取S3对象(比如把文件内容作为参数传入),那么CloudFormation的执行角色也需要访问桶的权限——这一点在你当前的策略里也没有覆盖到。

修正后的桶策略

下面是更新后的策略,它既保留了你的IP过滤限制,又显式允许了API Gateway和CloudFormation执行角色的合法访问:

{
  "Version": "2012-10-17",
  "Statement": [
    // 1. 显式允许API Gateway拉取Swagger定义文件
    {
      "Sid": "AllowAPIGatewayGetObject",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-code-dev/*"
    },
    // 2. 允许CloudFormation执行角色访问(如果模板需要直接读取S3文件则保留)
    {
      "Sid": "AllowCloudFormationExecutionRole",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_CLOUDFORMATION_EXECUTION_ROLE_ARN"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-code-dev/*"
    },
    // 3. 保留IP过滤的Deny规则,拒绝不符合条件的请求
    {
      "Sid": "IpFilter",
      "Effect": "Deny",
      "NotPrincipal": {
        "Service": [
          "lambda.amazonaws.com",
          "apigateway.amazonaws.com"
        ],
        "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_CLOUDFORMATION_EXECUTION_ROLE_ARN"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::my-code-dev/*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "192.168.1.0/24", // 替换成你的允许IP段
            "203.0.113.0/24"
          ]
        }
      }
    }
  ]
}

关键注意事项

  • 策略版本:务必使用2012-10-17(最新标准版本)代替2008-10-17,它支持更多条件键和更清晰的权限逻辑。
  • 显式允许:Allow语句优先级高于默认拒绝,确保API Gateway/CloudFormation的合法请求能被正常授权。
  • CloudFormation角色:如果你的模板不需要直接读取S3文件(而是通过BodyS3Location让API Gateway自行拉取),可以删掉第二条Allow语句。
  • IP格式:确保aws:SourceIp的值是有效的CIDR范围(比如用x.x.x.x/24表示子网,单IP需要用/32后缀)。

额外排查步骤

  1. 确认API Gateway的区域和S3桶的区域是否一致(跨区域访问虽然可行,但偶尔会出现意想不到的权限边缘情况)。
  2. 检查CloudFormation执行角色是否拥有API Gateway相关操作的权限,比如apigateway:ImportRestApi或apigateway:CreateRestApi。
  3. 使用AWS Access Analyzer工具验证你的桶策略,它会标记出可能导致问题的权限冲突或遗漏。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:51