-
Notifications
You must be signed in to change notification settings - Fork 12
存储桶ACL验证
404tk edited this page May 6, 2026
·
1 revision
bucket-acl-check在授权环境内审计 / 切换 / 撤回存储桶(或 Blob container)的公开访问 ACL,用于验证防御平台对存储暴露面类信号的检测能力:
- CSPM 是否能识别"private → public"的 ACL 变化并实时告警
- DLP / 数据安全平台能否在桶被设为
public-read或public-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 三档。
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"的判定逻辑,都属于可验证的覆盖缺口。
bucket-acl-check 在 demo 回放模式下 9 家全部可跑通 audit / expose / unexpose。