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

通过EC2实例IP而非AssumeRole访问S3遇权限拒绝问题求助

解决EC2实例通过IP访问S3存储桶的403权限问题

问题背景

我尝试让EC2实例通过IP而非IAM角色访问S3存储桶,已在存储桶策略中添加EC2的公网IP和内网IP,但通过纯HTTP地址(如http://s3.amazonaws.com/test-bucket1/somefile.txt)访问时仍返回AccessDenied错误。使用IAM角色和AWS CLI可正常访问,非云服务器(如个人笔记本)添加公网IP后也能正常访问,仅EC2实例按此配置无法访问。查看访问日志发现,EC2的内网IP被记录且返回403。

当前存储桶策略片段:

{
    "Sid": "Statement1",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": "arn:aws:s3:::test-bucket1/*",
    "Condition": {
        "IpAddress": {
            "aws:SourceIp": [
                "EC2-public-ip-address/32",
                "EC2-private-ip-address/32"
            ]
        }
    }
}

排查与解决步骤

  • 检查VPC端点配置:
    如果EC2所在VPC配置了S3网关端点,EC2访问S3会走内网路由,此时AWS识别的源IP是EC2的内网IP。需确认:

    1. VPC端点的端点策略未添加比桶策略更严格的限制(比如拒绝该IP访问),可暂时将端点策略设为允许所有访问来测试。
    2. 确认VPC路由表中,S3的路由条目指向网关端点而非互联网网关(这是日志显示内网IP的原因)。
  • 强制匿名访问请求:
    EC2实例若关联了IAM角色,部分工具(如curl)可能自动携带角色的临时凭证,此时AWS会优先用IAM权限评估,而非桶策略的IP限制。可通过以下命令强制发送匿名请求:

    curl -H "Authorization:" http://s3.amazonaws.com/test-bucket1/somefile.txt
    
  • 验证IP与策略格式:
    确认桶策略中的公网/内网IP为EC2实例的实际IP,格式为x.x.x.x/32,无网段或掩码错误。

  • 排查冲突权限:
    检查是否存在其他拒绝类的桶策略、账户级IAM策略,AWS权限评估遵循拒绝优先原则,任何匹配的拒绝策略都会导致403。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:36:23