You need to enable JavaScript to run this app. 使用CloudFormation部署预装Java的Windows EC2时从私有S3拉取文件报403求助
优惠活动
大模型
产品
解决方案
定价
更多

使用CloudFormation部署预装Java的Windows EC2时从私有S3拉取文件报403求助

S3拉取403错误的具体原因及修复方案

核心配置错误(最可能触发403)

  • IAM策略的资源范围不匹配:你当前配置的s3:GetObject权限对应Resource是arn:aws:s3:::windowsartifcats(桶本身的ARN),但该权限需要作用在桶内的对象资源上,正确的Resource必须加上/*后缀,即arn:aws:s3:::windowsartifcats/*。仅给桶本身的GetObject权限,无法访问桶内的任何文件,这是403的最高发原因。
  • CloudFormation认证配置冗余错误:你在AWS::CloudFormation::Authentication中手动指定了roleName: !Ref EC2S3Role,但cfn-init会自动读取EC2实例绑定的实例配置文件中的临时凭证,不需要手动指定角色名。且!Ref EC2S3Role返回的是CloudFormation生成的带随机后缀的角色物理ID,手动指定反而会导致凭证校验失败。

其他排查点

  • 桶名拼写一致性:你模板中所有位置使用的桶名为windowsartifcats(标准拼写应为artifacts),如果实际创建的桶名拼写不匹配,S3会对不存在的私有桶返回403(而非404,避免公开桶存在性)。
  • S3桶策略冲突:如果桶开启了「阻止所有公共访问」,且没有配置桶策略放行该IAM角色的访问请求,即使IAM角色本身有权限,桶侧也会拒绝请求。
  • 缺失必要权限:如果cfn-init需要批量拉取桶内文件,还需要为角色补充s3:ListBucket权限,该权限的Resource填写桶本身的ARN即可。

修正后的配置示例

IAM策略修正

将原权限段修改为:

Statement:
  - Action: 's3:GetObject'
    Resource: "arn:aws:s3:::windowsartifcats/*"
    Effect: Allow
  # 按需新增ListBucket权限
  - Action: 's3:ListBucket'
    Resource: "arn:aws:s3:::windowsartifcats"
    Effect: Allow

CloudFormation认证配置修正

删除手动指定的roleName,简化为:

AWS::CloudFormation::Authentication:
  S3AccessCreds:
    Type: "S3"
    buckets:
      - "windowsartifcats"
    roleBased: true

实例侧验证命令

在Windows EC2实例的PowerShell中运行以下命令,确认凭证和权限是否正常:

# 验证实例是否正常绑定IAM角色
(Invoke-WebRequest -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/ -UseBasicParsing).Content
# 直接测试S3对象拉取权限
Invoke-WebRequest -Uri "https://windowsartifcats.s3.us-east-1.amazonaws.com/jdk-11.0.9_windows-x64_bin.exe" -Method Head -UseBasicParsing

如果第二条命令仍返回403,可直接在IAM控制台的权限模拟器中,选择对应角色、S3服务、GetObject操作,填入对象ARN调试权限规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 21:54:01