特定IAM用户从外部IP读取S3存储桶遇403错误的排查与解决
S3 Block all public access配置说明与403访问错误排查
核心疑问解答
AWS S3的「public访问」定义
AWS S3定义的public访问,特指未经过AWS身份认证、或者通过公开ACL/公开策略授予了任意匿名用户可访问权限的访问请求,和请求来源IP是否为公网IP完全无关。只要访问请求携带了合法的AWS身份凭证(比如IAM用户的AK/SK),哪怕是从公网IP发起请求,也不属于public访问范畴。
四个Block public access配置项开关建议
你的场景下所有四个配置项全部建议开启,完全不会影响你指定的IAM用户访问,反而可以避免误配置ACL/策略导致存储桶内容被公开的风险,完全符合你仅允许指定IAM用户访问的需求:
- Block public access to buckets and objects granted through new access control lists (ACLs):开启,禁止后续新创建的ACL授予公开访问权限
- Block public access to buckets and objects granted through any access control lists (ACLs):开启,禁止所有现有和新增的ACL授予公开访问权限
- Block public access to buckets and objects granted through new public bucket or access point policies:开启,禁止后续新创建的存储桶/接入点策略授予公开访问权限
- Block public and cross-account access to buckets and objects through any public bucket or access point policies:开启,禁止所有现有和新增的存储桶/接入点策略授予公开访问权限
403错误根因说明
你遇到的403错误和Block all public access配置无关,属于IAM权限策略的常见配置错误:s3:GetObject是对象级别的操作,对应的资源ARN需要指定到存储桶下的对象路径,也就是arn:aws:s3:::存储桶名称/*,如果你只写存储桶根ARN arn:aws:s3:::存储桶名称,是无法匹配到对象级操作的,自然会触发权限拒绝。
提问者实际验证结果
最终排查发现是权限策略存在无关错误:我为IAM用户授予的权限资源是arn:aws:s3:::my-bucket,而非正确的arn:aws:s3:::my-bucket/*。
修复该问题后,保持block all public access开启的状态下,IAM用户已经可以从外部IP正常读取S3存储桶内容,确认该配置不会拦截来自外部IP的访问。
感谢Mark B的帮助!
内容的提问来源于stack exchange,提问作者RvPr
相关产品推荐
相关产品推荐

