← 中文资源

简体中文版本

审计并关闭意外公开的存储桶

盘点存储桶、测试匿名访问、区分有意公开与意外暴露,并用阻止公共访问设置关闭风险。

阅读英文原文

目标

找出所有允许匿名读取或写入的存储桶,确认哪些公开是业务需要的,关闭意外暴露,同时不破坏确实需要公开访问的静态资源。

步骤

  1. 盘点所有账户中的存储桶,包括自动化创建的桶,记录账户、区域、创建时间、静态网站配置和公共访问阻止设置。
  2. 检查桶策略和 ACL 中是否存在通配符主体,然后从云网络之外发送匿名 GET 和 PUT,测试已知对象和不存在的键。
  3. 与归属团队确认公开访问是否必要、哪些路径需要公开、是否已有 CDN 或签名 URL;为每个有意公开的桶记录负责人和分发路径。
  4. 变更前导出桶策略和 ACL,对非有意公开的桶启用四项“阻止公共访问”设置,并保存备份:
aws s3api get-public-access-block --bucket acme-marketing-assets
aws s3api get-bucket-policy --bucket acme-marketing-assets > policy-backup.json
aws s3api put-public-access-block --bucket acme-marketing-assets \
  --public-access-block-configuration \
  BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
curl -s -o /dev/null -w "%{http_code}\n" \
  https://acme-marketing-assets.s3.amazonaws.com/index.html
  1. 对需要公开的资源改用 CDN 加源站访问控制,桶保持私有,并更新应用中的资源地址。
  2. 从外部重新执行匿名检查,开启访问日志,并对允许通配符主体的策略变更加告警。

验证

在云网络之外对每个桶执行匿名 GET 和 PUT,确认返回 403;检查公共访问阻止设置全部开启;通过 CDN 访问仍然正常;访问日志和策略告警能够产生记录。

回滚

恢复导出的策略并关闭公共访问阻止,即可在数秒内回到变更前状态。若发现匿名写入,应先保留日志和对象版本证据,再关闭访问,否则会破坏事件定级所需的证据;匿名写入应按安全事件处理。删除对象或对象版本才是不可逆步骤,不要把清理和暴露修复放在同一次变更中。重新开放公共访问只允许用于有负责人、有书面理由的桶,并在变更后重新测试。