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

使用CloudFormation访问S3桶模板遇权限被拒,请求排查建议

让我帮你排查下这个CloudFormation访问S3模板时的权限问题,我之前也碰到过类似情况,大概率是这几个容易忽略的配置点没做好:

可能的遗漏配置排查

1. S3存储桶的阻止公共访问设置

很多人容易踩这个坑:就算你配置了正确的桶策略,如果桶的「阻止公共访问」(Block Public Access)里的关键选项处于开启状态,会直接覆盖桶策略的允许规则。你需要:

  • 进入S3桶的权限页面,找到「阻止公共访问」设置
  • 确保阻止所有公共访问没有勾选,或者至少关闭覆盖公共桶策略这个选项(如果你的桶策略是专门允许CloudFormation访问的话)

2. CloudFormation服务角色的权限

别搞混了:你创建桶和上传模板用的是用户凭证,但CloudFormation本身是用服务角色(或默认临时凭证)去访问S3的,不是用你操作的用户权限。你需要:

  • 确认启动CloudFormation栈时指定的服务角色(如果有的话)是否拥有s3:GetObject权限,且资源范围覆盖你的S3桶和模板文件
  • 如果没指定服务角色,CloudFormation会使用调用它的用户权限,但要注意:用户权限必须明确允许访问该S3对象,而不仅仅是桶级权限

3. S3对象的ACL权限

你上传模板文件时,默认的对象ACL可能是「私有」(只有上传者能访问),哪怕桶策略开了权限,对象级的ACL也会限制访问。解决方法:

  • 上传文件时,设置对象ACL为bucket-owner-full-control,比如用AWS CLI上传时加参数:aws s3 cp your-template.yaml s3://your-bucket/ --acl bucket-owner-full-control
  • 或者上传后手动修改对象权限,给CloudFormation使用的角色/用户添加「读取」权限

4. 桶策略的正确性检查

不少人写桶策略时会犯主体错配或资源范围不对的问题。这里给你一个允许CloudFormation服务角色访问的示例模板:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::你的AWS账号ID:role/你的CloudFormation服务角色名"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::你的桶名/*"
    }
  ]
}

如果是允许调用CloudFormation的用户访问,把Principal里的ARN换成用户的ARN即可。

5. 跨区域或签名版本问题

如果你的S3桶在特殊区域(比如AWS中国区),CloudFormation需要使用V4签名才能正常访问。你可以:

  • 确保CloudFormation栈所在区域和S3桶区域一致,避免跨区域访问的签名问题
  • 如果用AWS CLI上传模板,执行aws configure set s3.signature_version s3v4强制使用V4签名

快速测试方法

你可以先用CloudFormation使用的角色/用户执行CLI命令测试权限:

aws s3 cp s3://你的桶名/模板文件名 .

如果这个命令返回「Access denied」,说明问题出在权限配置上;如果能正常下载,再去排查CloudFormation的栈配置(比如模板路径是否写错)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:08:12