AWS S3 公共访问阻止详解:别让存储桶变成数据泄露源
全球范围内因 S3 桶配置错误导致的数据泄露,每年都有知名案例。AWS 后来给 S3 加了 Block Public Access(阻止公共访问) 这个总闸,新桶默认全开。理解它,你的数据就不会「裸奔」。
四个开关是什么意思
Block Public Access 有四个子开关,简化理解:
| 开关 | 作用 |
|---|---|
| BlockPublicAcls | 阻止新增公开 ACL |
| IgnorePublicAcls | 无视已存在的公开 ACL |
| BlockPublicPolicy | 阻止新增公开桶策略 |
| RestrictPublicBuckets | 限制已有公开策略的桶 |
默认全开 = 无论谁怎么配 ACL 和策略,桶都不可能被公开访问。这是最安全的状态,绝大多数桶(备份、日志、内部文件)应该保持全开。
什么时候才需要放开
只有一种正当场景:桶内容本来就是给公众看的(静态网站、公开下载)。但即便如此,更推荐的做法是不放开,改用 CloudFront:
- 桶保持全部阻止公开
- 创建 CloudFront 分配,源站指向该桶
- 用 OAC(Origin Access Control)授权 CloudFront 读桶
- 用户只能通过 CloudFront 域名访问,桶本身仍然私有
好处:桶不暴露、可加 HTTPS 与缓存、可配 WAF,还比 S3 直连便宜。
自查现有的桶
- S3 控制台列表页看「访问权限」列:标着 Public 的桶逐个审查
- 每个 Public 的桶问一句:里面的每个文件都可以给全世界看吗?
- 不确定就先把 Block Public Access 打开,看什么业务报错——报错的才是真依赖公开的
程序访问的正确姿势
程序读写私有桶不需要任何公开设置:
- EC2 上的程序:给实例挂 IAM Role,授权该桶的最小操作
- 外部程序:IAM 用户密钥,策略只授权特定桶特定前缀
- 给第三方临时下载:生成预签名 URL(Presigned URL,带有效期),而不是把文件设公开
检查清单
- 所有桶默认 Block Public Access 全开
- 公开需求走 CloudFront + OAC
- 临时分享用预签名 URL
- 每季度扫一遍 Public 标记的桶
常见问题
AWS S3 公共访问阻止详解需要注意什么?
操作前先确认账号属于AWS对应站点,并备份关键数据或记录当前配置。按本文步骤完成后做一次验证。需要账号可申请账号,续费见自助充值。
出错后如何快速回滚或止损?
优先恢复到变更前的快照、镜像或原规则;若涉及计费或销毁类操作,先停止继续变更,再按官方控制台状态与工单路径处理。不确定时不要反复点击高危按钮。
没有对应云账号时怎么开始?
可先通过申请账号开通国际云账号,再用自助充值完成额度准备。新账号建议先完成 MFA、访问密钥收敛与费用告警,再部署业务。