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

AWS技术求助:EC2 Windows实例无法访问已授权的S3桶

排查EC2 Windows实例通过IAM角色访问S3桶失败的问题

看起来你已经把IAM角色的基础配置做对了——能成功获取到实例元数据里的有效凭证,说明角色和EC2实例的关联是正常的!那访问S3桶文件失败大概率是其他环节出了问题,我给你列几个常见的排查方向,你一步步来试试:

1. 检查S3桶的权限设置(桶策略+ACL)

虽然你的EC2角色附带着S3FullAccess权限,但如果目标S3桶本身的桶策略设置了拒绝规则(比如明确阻止了该角色的请求),或者**访问控制列表(ACL)**没有给对应实体开放读取权限,那还是会触发访问拒绝。

  • 登录AWS控制台找到目标桶,进入「权限」标签页:
    • 查看桶策略,确认没有类似"Effect": "Deny"且针对该角色的语句;
    • 检查ACL,确保桶的所有者或者你的IAM角色对应的实体拥有读取权限。

2. 确认你使用的访问方式正确(Windows环境重点)

如果你是直接用EC2实例的浏览器访问S3对象的URL(比如https://your-bucket.s3.amazonaws.com/your-file.txt),这种方式默认是匿名访问,不会自动调用EC2实例的IAM角色凭证!哪怕角色有权限,私有桶的文件也会直接拒绝访问。
正确的访问方式应该用AWS官方工具:

  • 安装AWS CLI for Windows,然后在PowerShell里直接运行命令:
    # 列出桶内文件
    aws s3 ls s3://your-bucket-name
    # 下载文件到本地
    aws s3 cp s3://your-bucket-name/your-file.txt C:\Local\Save\Path\
    
    CLI会自动从实例元数据获取凭证,不需要手动配置AccessKey和SecretKey。
  • 如果是代码开发(比如PowerShell脚本、Python等),一定要用AWS SDK(比如AWS Tools for PowerShell、boto3),SDK会自动获取角色凭证,不要手动拼接签名或者用匿名请求。

3. 验证凭证有效性与权限范围

  • 先确认你获取的凭证在有效期内:你拿到的元数据里有Expiration字段,要是当前时间已经超过这个时间,重新请求元数据地址就能拿到新的有效凭证。
  • 可以用AWS CLI模拟角色权限,确认是否真的能访问目标文件:
    aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::你的AWS账号ID:role/EC2-S3-access --action-names s3:GetObject --resource-arns arn:aws:s3:::your-bucket-name/your-file.txt
    
    如果返回的EvaluationResult是Allowed,说明权限本身没问题,问题出在其他环节。

4. 检查EC2实例的网络连通性

  • 先测试实例能不能连接到S3服务:在PowerShell里运行Test-NetConnection s3.amazonaws.com -Port 443,如果显示无法连通,可能是:
    • EC2实例的安全组没有开放出站的HTTPS(443端口)流量;
    • VPC的网络访问控制列表(NACL)阻止了出站请求;
    • 如果实例是私有子网的无公网IP实例,需要配置VPC的S3网关端点,否则无法通过私网访问S3。

5. 收集具体错误信息定位问题

不管是用CLI还是代码访问,把完整的错误信息记录下来(比如AccessDenied、NoSuchBucket、NetworkError等):

  • 要是AccessDenied:优先排查桶策略、ACL或者角色权限的冲突;
  • 要是NoSuchBucket:检查桶名是否拼写错误,或者是否和实例不在同一个AWS区域;
  • 要是网络类错误:重点排查安全组、NACL或者S3端点配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:23:41