开启Block all public access后,S3桶策略多IP段组合报错原因咨询
AWS S3桶策略与Block Public Access冲突问题解析
问题背景
我有一个已开启Block all public access的AWS S3存储桶,尝试应用如下桶策略:
{ "Version": "2012-10-17", "Id": "Policy1702547312345", "Statement": [ { "Sid": "Stmt1702547293870", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::samples3-900-sample/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "10.0.0.0/8", "40.0.0.0/8", "146.111.111.0/23" ] } } } ] }
但收到报错:您没有编辑桶策略的权限,或者您的桶策略授予的公共访问权限与Block Public Access设置冲突。。我是基础设施管理员,不存在权限缺失问题。当移除10.和40.网段、或移除146.网段保留前两个网段时,策略均可成功应用。请问为何无法将三个网段组合在一起应用?
原因分析
AWS的Block all public access机制会自动校验桶策略是否存在授予公共互联网访问的风险,核心逻辑如下:
10.0.0.0/8是RFC 1918定义的私有IP网段,仅用于内部网络,属于AWS认可的可信访问范围;40.0.0.0/8是AWS专属的IP网段,仅由AWS官方服务使用,同样被视为可信访问范围;146.111.111.0/23是公开的可互联网路由的第三方IP网段,不属于AWS认定的可信实体范畴。
当三个网段组合在同一条策略语句中时,策略相当于允许了非可信的公共互联网用户(通过146网段)访问桶内对象,直接违反了Block all public access中「阻止通过桶策略授予公共访问权限」的规则,因此AWS会拒绝应用该策略。
而单独保留前两个网段时,策略仅允许私有网络或AWS内部服务访问,符合可信访问要求,所以能通过校验;单独使用146网段时,可能是AWS的检测逻辑对单一特定公网IP段的判定存在例外,或者你可以再次确认Block all public access是否完全启用了所有子项。
解决办法
如果确实需要同时允许这三个网段访问,可采取以下两种方式:
- 拆分策略语句:把三个网段分成两条独立的
Statement,一条包含10.0.0.0/8和40.0.0.0/8,另一条单独包含146.111.111.0/23; - 调整Block Public Access设置:临时关闭「Block public access to buckets and objects granted through bucket policies」子项(此操作会降低安全性,仅在必要时使用)。
内容的提问来源于stack exchange,提问作者user2700022
相关产品推荐
相关产品推荐

