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

EC2实例绑定IAM角色后可列S3桶但无法下载文件如何解决?

问题根因

你当前EC2实例绑定的IAM内联策略资源范围配置错误:
你指定的资源arn:aws:s3:::mybuild仅对应S3存储桶本身,仅适配ListBucket等桶级操作,这也是你可以正常列出存储桶内容的原因。而GetObject属于对象级操作,需要匹配桶内对象的ARN格式arn:aws:s3:::mybuild/*,你的策略中没有覆盖该资源范围。
即使你已在存储桶侧配置了角色的全量S3权限,IAM侧的策略也需要覆盖对应操作的资源范围,二者同时满足权限才会生效。另外S3为了避免泄露桶内未授权对象的存在性,无权限访问对象时会返回404而非403,和你拿到的错误日志一致。

修复方案

将EC2实例的内联策略调整为如下内容,同时覆盖桶级和对象级资源:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "managebucketsid",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::mybuild",
                "arn:aws:s3:::mybuild/*"
            ]
        }
    ]
}

补充确认项

  • 存储桶侧的资源策略需确保Principal字段正确指向EC2绑定的IAM角色ARN,无额外Condition限制(如源IP、路径过滤)覆盖权限
  • 计划任务无需配置~/.aws目录,只要EC2实例角色配置正确,AWS CPP SDK会默认通过实例元数据服务自动获取临时凭证,不需要额外指定AWS profile
  • 权限调整后可以直接在EC2实例上执行aws s3 cp s3://mybuild/测试文件 ./验证权限是否生效,不需要手动配置任何凭证

内容的提问来源于stack exchange,提问作者zdenko.s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:48:01