云安全自查清单:用腾讯云助手 30 分钟完成一次权限与密钥体检
摘要:客户做云安全自查,最缺的不是工具,而是一份能真正跑起来、能交差的清单。本文把权限与密钥治理打包成五大域、30 项的自查体系,并给出 30 分钟执行流程和可直接复用的体检报告模板。
一、适用场景
这份清单适合:
- 政企/金融/事业单位做定期云安全自查 或上线前安全评估;
- 运维/安全工程师做季度安全巡检;
- 接手一个"历史包袱很重"的云账号,需要快速摸清底数;
- 应对合规检查,需要留下可追溯的自查记录。
设计原则:能自动跑的绝不人工,能产出报告的绝不止步于"看过了"。
二、五个域,30 项:自查总览
| 域 | 主题 | 项数 | 核心问题 |
|---|---|---|---|
| 一 | 账号与身份安全 | 6 | 谁能登进来 |
| 二 | 权限策略治理 | 8 | 进来能干什么 |
| 三 | 密钥与凭据 | 6 | 钥匙有没有被复制 |
| 四 | 审计与告警 | 5 | 干了什么留不留痕 |
| 五 | 数据与资源配置 | 5 | 有没有对外敞着 |
三、域一:账号与身份安全(6 项)
| # | 检查项 | 合格标准 | 检测方式 |
|---|---|---|---|
| 1.1 | 主账号 MFA | 已开启登录保护 + 敏感操作保护 | 控制台 → 安全设置 |
| 1.2 | 子账号 MFA | 全部子账号开启 MFA,支持邮箱/微信登录的强制二次验证 | CAM → 用户 |
| 1.3 | 主账号密钥 | 不存在主账号 AK | tccli cam ListAccessKeys |
| 1.4 | 身份分离 | 管理用户、管理权限、管理资源的职责由不同子账号承担 | 人工核查 |
| 1.5 | 控制台/编程分离 | 只做 API 的子账号不授予登录密码 | 人工核查 |
| 1.6 | 离职/闲置账号 | 无长期未登录、无离职未回收账号 | tccli cam ListUsers + CloudAudit 登录日志 |
官方访问控制最佳实践的第一条就是 开启 MFA 保护:为所有账号绑定 MFA,为根账号开启登录保护和敏感操作保护,为所有子账号开启敏感操作保护。这一条投入最小、收益最大,务必先做。
四、域二:权限策略治理(8 项)
| # | 检查项 | 合格标准 |
|---|---|---|
| 2.1 | 完全通配策略 | 不存在 "action":"*" + "resource":"*" |
| 2.2 | 预设高危策略 | 不存在 AdministratorAccess(除极少数特批账号,且必须开 MFA) |
| 2.3 | 提权类通配 | 不存在 cam:* / sts:* / kms:* 通配 |
| 2.4 | 服务级通配 | cos:* / cvm:* 等已收敛为具体操作 |
| 2.5 | 资源范围 | 无 resource:"*";资源收敛到六段式精确 ARN |
| 2.6 | 条件约束 | 敏感操作(删除/终止/改配/提权)配有 condition |
| 2.7 | 闲置宽权限 | 无"90 天零调用 + 宽权限"策略 |
| 2.8 | 策略变更管控 | 策略纳入版本管理,变更经过评审 |
一句话检测法:跑第 1 篇的审计脚本,看 P0/P1 条数是否为 0。
bash
python cam_policy_audit.py --out ./cam_audit
# 输出:cam_audit/权限整改清单.md
一项必查的坑 :审计时记得 GetPolicy 拉不到 CreateMode=1 的预设策略 ,所以 AdministratorAccess 这类必须按策略名称单独核对,别以为脚本没报就等于没有。
五、域三:密钥与凭据(6 项)
| # | 检查项 | 合格标准 | 检测方式 |
|---|---|---|---|
| 3.1 | 密钥数量 | 每把密钥都有明确用途与负责人 | 台账核查 |
| 3.2 | 权限体积 | 无密钥关联 AdministratorAccess 或通配策略 |
CAM 关联查询 |
| 3.3 | 存储方式 | 无明文落盘;使用 SSM + KMS 或环境变量注入 | 代码/配置扫描 |
| 3.4 | 密钥年龄 | 长期 AK ≤ 90 天,KMS CMK 已开启自动轮换 | CAM / KMS 控制台 |
| 3.5 | 泄露面 | 代码仓库无硬编码密钥(gitleaks 无告警) | gitleaks detect |
| 3.6 | 闲置密钥 | 无 90 天零调用密钥(已禁用或删除) | CloudAudit 调用统计 |
官方建议摘录 :定期轮换登录密码或云 API 密钥,可以让身份凭证泄露情况下的影响时间受限。密钥轮换不只是合规动作,它是把"泄露窗口"物理压缩的工程手段。
加分项:能用临时密钥(角色/STS)的地方,就别用长期 AK。角色没有关联的持久证书,代入时才动态创建临时证书,从根上消除了"长期凭据"这个攻击面。
六、域四:审计与告警(5 项)
| # | 检查项 | 合格标准 |
|---|---|---|
| 4.1 | 云审计开启 | CloudAudit 已开启日志采集且有跟踪集 |
| 4.2 | 日志留存 | 日志留存满足合规要求(建议 ≥ 180 天) |
| 4.3 | 敏感操作告警 | CreateUser / CreateAccessKey / AttachUserPolicy / AssumeRole 有实时告警 |
| 4.4 | 异常检测 | 有"非工作时间调用""境外 IP 调用"规则 |
| 4.5 | 应急可用 | 能按 SecretId / 用户名 / 源 IP 快速检索 |
关键能力验证------确认你真的能查到(很多团队开了审计但从没查过):
bash
# 按密钥查调用历史
tccli cloudaudit LookupEvents --LookupAttributes '{"AttributeKey":"SecretId","AttributeValue":"AKIDxxxx"}'
# 查敏感操作记录
tccli cloudaudit LookupSensitiveEvents --LookupAttributes '{"AttributeKey":"EventName","AttributeValue":"CreateUser"}'
CloudAudit 覆盖控制台、SDK、命令行工具及其他云服务的调用,能确定谁、从哪个源 IP、何时发起调用------这是出事时唯一能还原真相的证据源。
七、域五:数据与资源配置(5 项)
| # | 检查项 | 合格标准 |
|---|---|---|
| 5.1 | COS 权限 | 无公有读/公有写桶;桶 ACL 与桶策略无 * 主体 |
| 5.2 | 存储加密 | 敏感数据桶开启服务端加密 |
| 5.3 | 快照/镜像共享 | 无对外共享的快照、镜像、镜像分享 |
| 5.4 | 备份可用性 | 关键数据有备份,且做过恢复演练 |
| 5.5 | 网络暴露 | 安全组无 0.0.0.0/0 的高危端口(22/3389/6379 等) |
这几项看似与"密钥"无关,但泄露后的变现和扩散路径往往就在这:拿到宽权限密钥 → 找公有读桶 → 拖数据;找到共享镜像 → 提权进内网。
八、30 分钟执行流程
第 0~20 分钟:自动化(脚本跑)
bash
# 1) 权限策略审计(第 1 篇的脚本)
python cam_policy_audit.py --out ./cam_audit
# 2) 密钥清单与关联策略
tccli cam ListUsers > users.json
tccli cam ListPolicies --Scope ALL --Page 1 --Rp 200 > policies.json
# 3) 敏感操作与异常调用
tccli cloudaudit LookupSensitiveEvents --LookupAttributes '{"AttributeKey":"EventName","AttributeValue":"CreateAccessKey"}'
第 20~28 分钟:人工核对(表格打勾)
- 域一 6 项(控制台 + CAM)
- 域三 3.3 / 3.5(代码扫描)
- 域五 5 项(控制台)
第 28~30 分钟:出报告
把脚本产出的 权限整改清单.md 和上表勾选结果,套进下面的模板。
九、体检报告模板(可直接复制)
markdown
# 云账号安全自查报告
- 账号:xxx
- 自查时间:2026-XX-XX
- 自查人:xxx
- 使用工具:cam_policy_audit.py / tccli / CloudAudit
## 一、总体结论
- 检查项 30 项,通过 24 项,不通过 6 项
- 风险分布:P0 2 项 / P1 3 项 / P2 1 项
- 结论:存在高危风险,需在 X 个工作日内完成整改
## 二、风险明细
| 编号 | 风险项 | 等级 | 证据 | 整改建议 | 责任人 | 期限 |
| --- | --- | --- | --- | --- | --- | --- |
| R-01 | 3 个子账号挂 AdministratorAccess | P0 | 关联身份数=3 | 拆分为职能策略 | 张三 | X日 |
| R-02 | 存在 action=* 策略 | P0 | 策略ID=12345678 | 按服务枚举 | 李四 | X日 |
| R-03 | 1 把 AK 三年未轮换 | P1 | CloudAudit 无调用 | 先禁后删 | 王五 | X日 |
| R-04 | 代码仓库硬编码密钥 | P1 | gitleaks 告警 | 改环境变量注入 | 赵六 | X日 |
## 三、附件
- 附件1:权限整改清单.md
- 附件2:CloudAudit 检索截图
## 四、复检安排
- 首次复检:XX 日后
- 复检方式:重跑审计脚本 + 差异对比
十、整改闭环与复检机制
自查的价值在于闭环,不是出一份报告。
① 分级整改
| 等级 | 整改时限 | 要求 |
|---|---|---|
| P0 | 24~72 小时 | 立即止血,先禁用后删除 |
| P1 | 1~2 周 | 按迭代收敛,有回滚预案 |
| P2 | 1 个月 | 纳入日常运维 |
② 复检必须量化
复检不是"再看一眼",而是重跑脚本 + 与上次报告做 diff:
bash
python cam_policy_audit.py --out ./cam_audit_2026Q2
diff cam_audit_2026Q1/权限整改清单.md cam_audit_2026Q2/权限整改清单.md
新增风险必须解释,收敛项必须留痕。
③ 把自查变成机制
- 定时化:每周自动跑一次脚本,报告发安全群;
- 门禁化:CI 中出现 P0 直接阻断发布(策略即代码);
- 制度化:新增子账号/密钥必须经过本清单前两个域的检查。
十一、小结
- 自查体系:五大域 30 项------账号身份、权限策略、密钥凭据、审计告警、数据资源;
- 自动化优先:权限审计用脚本,密钥和调用溯源用 tccli + CloudAudit;
- 四条最容易踩的坑:
- 忘了
GetPolicy查不到预设策略,导致高危漏检; - 开了 CloudAudit 却从没查过,出事才发现不会用;
- 密钥轮换没有 SOP,一换就断业务;
- 只做一次性自查,没有复检和门禁,半年后全部反弹;
- 忘了
- 一句总结:自查的终点不是报告,而是"脚本化 + 定时化 + 门禁化"的闭环。
配合前四篇(权限审计、AI 密钥泄露防护、策略精细化改造、密钥全生命周期治理)一起用,就是一套完整的企业云安全治理方案。