Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

存储桶ACL验证

404tk edited this page May 6, 2026 · 1 revision

场景定位

bucket-acl-check授权环境内审计 / 切换 / 撤回存储桶(或 Blob container)的公开访问 ACL,用于验证防御平台对存储暴露面类信号的检测能力:

  • CSPM 是否能识别"private → public"的 ACL 变化并实时告警
  • DLP / 数据安全平台能否在桶被设为 public-readpublic-read-write 后立刻触发关注
  • 调查工作流能否根据 ACL 变更事件还原"谁 / 何时 / 改成什么级别 / 影响哪些对象"

⚠️ 责任使用:expose 会真实把桶切到公开级 ACL,仅对自有 / Lab / 显式授权的桶执行,验证完成后立刻 unexpose 撤回。生产桶的任何公开切换都需要数据 owner 显式同意。

支持范围

全部 9 家通用:

厂商 服务 level 可选值(典型)
alibaba OSS public-read / public-read-write / private / 友好别名
aws S3 public-read / public-read-write / authenticated-read / aws-exec-read
tencent COS public-read / public-read-write / 友好别名
azure Blob containers Blob(对象级公开)/ Container(容器级公开)/ None
gcp GCS(IAM allUsers:objectViewer) public-read / 友好别名
huawei OBS OBS canned ACL(public-read / public-read-write / *-delivered)/ 友好别名
volcengine TOS public-read / public-read-write
jdcloud OSS S3 风格 canned ACL
ucloud UFile 桶可见性切换(public / private)

各云的 ACL 模型差异较大,driver 内部用 Normalize<X>ACL 把"友好别名"映射到目标云的 canned ACL。Azure 没有 canned ACL,仅 Blob / Container / None 三档。

metadata 语法

set metadata <action> [container] [level]
  • action:audit / expose / unexpose
  • container:桶名 / container 名;audit 不带参数 = 审计 scope 下所有桶
  • level:仅 expose 用,按各云的 canned ACL 选

示例:

set metadata audit # 审计所有桶当前 ACL 状态
set metadata audit ctk-demo # 仅审计单桶
set metadata expose ctk-demo public-read # AWS / 阿里 / 腾讯:公开读
set metadata expose ctk-demo Blob # Azure:对象级公开
set metadata unexpose ctk-demo # 撤回 private

执行示例

审计:

ctk > aws > set payload bucket-acl-check
payload => bucket-acl-check
ctk > aws > set metadata audit
metadata => audit
ctk > aws > run
Account 	Container 	Level
------- 	--------- 	-----
 	ctk-validation-logs	private
 	ctk-validation-public	public-read
 	ctk-validation-archive	private

切公开:

ctk > aws > set metadata expose ctk-validation public-read
metadata => expose ctk-validation public-read
ctk > aws > run
[!] About to run: bucket-acl-check (sensitive)
 Provider: aws
 Resource: ctk-validation
Proceed? [y/N]: y
[+] 12:00:00 bucket ctk-validation set to public-read

撤回:

ctk > aws > set metadata unexpose ctk-validation
metadata => unexpose ctk-validation
ctk > aws > run
[+] 12:01:30 bucket ctk-validation reverted to private

expose / unexpose 都需要 y/N 确认(敏感动作)。audit 是只读,不弹确认。

AWS S3 的 expose 路径会顺带尝试清除目标桶的 Public Access Block(best-effort),让公开 canned ACL 真实生效;unexpose 不会自动恢复 BPA,请按需手工配置。

无人值守编排

ctk aws bacl -P lab-aws --json # 审计当前 ACL
ctk aws expose ctk-validation public-read -P lab-aws -y # 切公开(仅 Lab 桶)
ctk aws unexpose ctk-validation -P lab-aws -y # 撤回 private

预期遥测(供防御方对照)

  • AWS:CloudTrail PutBucketAcl / PutPublicAccessBlock(管理面)+ S3 Server Access Log(数据面,若启用)
  • 阿里 OSS:ActionTrail PutBucketAcl
  • 腾讯 COS:CloudAudit PutBucketAcl
  • Azure:Activity Log Microsoft.Storage/storageAccounts/blobServices/containers/write 携带 publicAccess 字段
  • GCP:Cloud Audit storage.setIamPermissions(对象级 IAM 写入 allUsers)
  • 华为 OBS:CTS canned ACL 设置事件
  • 火山 TOS / 京东 OSS / UCloud UFile:各家审计中的桶 ACL 设置事件

平台若无法在切公开后立即告警(CSPM 检测窗口超过 N 分钟即视为延迟过大),或缺少"是否包含 allUsers / AllUsers"的判定逻辑,都属于可验证的覆盖缺口。

demo 回放

bucket-acl-checkdemo 回放模式下 9 家全部可跑通 audit / expose / unexpose

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /