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

为什么我的S3存储桶策略会拒绝跨AWS账号的访问请求?

问题原因

  1. IAM策略评估优先级规则:AWS IAM的权限评估逻辑中,显式Deny(拒绝)的优先级高于所有Allow(允许)规则,你在桶策略中给账号B EC2角色的Allow规则,只要触发了后续的Deny条件,就会被直接拦截。
  2. Deny语句的条件逻辑问题:AWS IAM策略中,同一个Condition块下的多个条件默认为**逻辑与(AND)**关系,当前你的Deny规则触发条件为:同时满足「请求来源不是你指定的账号A下的VPC」+「请求来源IP不在你指定的公网IP列表」,两个条件都满足时就会拒绝所有访问。
    你账号B下的EC2实例天然不在账号A的指定VPC范围内,只要该EC2的出口公网IP也不在你设置的两个允许IP列表中,就会同时命中两个Deny触发条件,直接被拦截,哪怕之前的ACL授权、角色权限配置正确也无法访问。

修复方案

你可以在Deny语句的Condition中添加账号B EC2角色的豁免规则,修改后的Deny语句示例如下:

{
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": [
        "arn:aws:s3:::s3_bucket_name",
        "arn:aws:s3:::s3_bucket_name/*"
    ],
    "Condition": {
        "StringNotLike": {
            "aws:SourceVpc": "vpc_id"
        },
        "NotIpAddress": {
            "aws:SourceIp": [
                "67.100.20.15/32",
                "79.190.30.2/32"
            ]
        },
        "ArnNotEquals": {
            "aws:PrincipalArn": "arn:aws:iam::Account_B_Number:role/EC2_Role"
        }
    }
}

修改后,只要请求主体是账号B的EC2角色,就算不满足VPC和IP的要求,也不会触发Deny规则,之前配置的Allow规则就会正常生效。
如果业务允许,你也可以将账号B EC2的出口公网IP加到允许IP列表,或者将EC2所在的VPC加到允许VPC列表,也可以解决访问被拒的问题。

内容的提问来源于stack exchange,提问作者Dani Wol.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:04