阿里云云安全中心多账号管理与基线报告导出
使用阿里云 CLI 和 Python 脚本管理资源目录中的多个阿里云账号,并为每个账号批量导出云安全中心基线报告。
前提条件和环境设置
1. 安装阿里云 CLI
# macOS
brew install aliyun-cli
# Or download from GitHub: https://github.com/aliyun/aliyun-cli/releases
检查凭证:
aliyun sts get-caller-identity
如果调用失败,请指示用户运行 aliyun configure 并配置凭证(交互步骤,必须由用户完成)。
1.1 配置 AI 模式和插件模式(必须)
此 skill 要求使用阿里云 CLI 插件模式命令(kebab-case)以及固定的 User-Agent 声明。
# Keep plugins up to date
aliyun plugin update
# Install required product plugins if missing
aliyun plugin install --names aliyun-cli-sts,aliyun-cli-sas
# Enable AI mode and set required UA segment
aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent AlibabaCloud-Agent-Skills
# Optional checks / rollback
aliyun configure ai-mode show
aliyun configure ai-mode disable
2. 安装 Python ≥ 3.6
# Check version
python3 --version # Requires 3.6+, 3.9+ recommended
3. 创建虚拟环境并安装依赖项
在 <skill-path>/scripts/ 中创建虚拟环境,并安装 pyproject.toml 中声明的依赖项:
cd scripts/
# Option A: use venv
python3 -m venv .venv
.venv/bin/pip install -e .
# Option B: use uv (optional)
uv sync
# Option C: if current Python version is unsupported, install as system dependencies
pip install -r requirements.txt
4. 运行命令
所有脚本都必须使用虚拟环境中的 Python执行(无论该虚拟环境是通过 venv、uv、conda 等创建)。本文示例使用 .venv/bin/python;请将其替换为实际的虚拟环境路径。
---
工作目录
accounts.json 和导出的 Excel 文件保存在 agent 的当前工作目录中(即执行命令的目录)。脚本文件本身位于 <skill-path>/scripts/ 中。运行命令时不得切换到 scripts 目录,否则 accounts.json 的位置可能发生意外变化。
# Example: run from any directory
.venv/bin/python /path/to/scripts/accounts.py refresh
功能 1:账号管理(accounts.py)
工作流
- 首次使用:运行
refresh,从资源目录获取账号列表。 - 按需筛选:使用
search查找目标账号并获取 AccountId。 - 启用/禁用控制:使用
enable/disable决定哪些账号参与批量导出。
快速开始
刷新账号列表
从阿里云资源目录获取最新账号列表并写入 accounts.json。保留现有的 enable 状态;新账号默认启用。
.venv/bin/python accounts.py refresh
列出所有账号
.venv/bin/python accounts.py list
示例输出:
1225574417218097 cwx [enabled]
1234567890123456 prod-account [disabled]
搜索账号
根据 DisplayName 进行模糊搜索,并返回 AccountId 和启用状态。
.venv/bin/python accounts.py search cwx
.venv/bin/python accounts.py search prod
启用 / 禁用账号
控制账号是否参与后续批量导出。
.venv/bin/python accounts.py enable 1225574417218097
.venv/bin/python accounts.py disable 1234567890123456
accounts.json 结构
[
{
"AccountId": "1225574417218097",
"DisplayName": "cwx",
"FolderId": "r-1Q4pqB",
"IsMaAccount": "NO",
"SasVersion": "0",
"enable": true
}
]
---
功能 2:批量导出基线(baseline.py)
为所有 enable=true 的账号并发启动导出任务。轮询完成后,下载并解压文件,然后将其合并为一个 Excel 文件。
工作流
- 并发提交:为所有已启用的账号提交
export-record请求(QPS ≤ 5)。 - 并发轮询:为每个账号轮询
describe-export-info,直至导出完成。 - 下载并解压:下载 zip 文件并解压出 xlsx 文件。
- 合并输出:通过
merge.py将所有账号的 xlsx 文件合并为一个文件,并添加“资源目录账号”列。 - 清理临时文件:合并后删除各账号的临时 xlsx 文件。
前提条件
- 已执行
accounts.py refresh,且账号启用/禁用配置已完成。 - 阿里云 CLI 已配置有效凭据,并具有 SAS 的
export-record和describe-export-info权限。 - 账号必须已购买云安全中心(免费版账号会自动跳过)。
导出云平台配置检查结果(CSPM)
导出所有已启用账号的 baselineCspm 结果,并合并到 baseline-cspm-merged-{date}.xlsx 中。
# Export for all enabled accounts
.venv/bin/python baseline.py export-cspm
# Export for one specific account
.venv/bin/python baseline.py export-cspm --account-id 1225574417218097
导出系统基线风险列表
导出所有已启用账号的 exportHcWarning 风险列表(高/中/低,所有状态),并合并到 system-warning-merged-{date}.xlsx 中。
# Export for all enabled accounts
.venv/bin/python baseline.py export-system-warning
# Export for one specific account
.venv/bin/python baseline.py export-system-warning --account-id 1225574417218097
输出文件
| 文件 | 说明 | |------|------| | baseline-cspm-merged-{date}.xlsx | 合并后的云平台配置检查结果,包含“资源目录账号”列 | | system-warning-merged-{date}.xlsx | 合并后的系统基线风险列表,包含“资源目录账号”列 |
错误处理
| 场景 | 处理方式 | |------|------| | FreeVersionNotPermit | 静默跳过此账号并继续处理其他账号 | | NoPermission / Forbidden | 静默跳过此账号 | | 导出失败(服务端错误) | 打印 [failed] 消息并继续处理其他账号 | | 所有账号均被跳过 | 打印消息并退出,不生成输出文件 |
---
功能 3:批量漏洞导出(vuln.py)
为所有满足 enable=true 的账号并发启动漏洞导出任务。支持四种漏洞类型。轮询完成后,将自动下载、解压并合并文件。
工作流
- 并发提交:为所有已启用账号提交
export-vul --force请求(QPS ≤ 5)。 - 并发轮询:针对每个账号轮询
describe-vul-export-info --force,直至导出完成。 - 下载并解压:下载 zip 文件并解压出 xlsx 文件。
- 合并输出:通过
merge.py将所有账号的 xlsx 文件合并为一个文件,并追加“资源目录账号”列。 - 清理临时文件:合并后删除各账号的临时 xlsx 文件。
当前账号与调用方的主账号相同时,将自动省略 --ResourceDirectoryAccountId。
前提条件
- 已执行
accounts.py refresh,且账号启用/禁用配置已完成。 - 阿里云 CLI 已配置有效凭据,并具有 SAS 的
export-vul和describe-vul-export-info权限。 - 账号必须已购买云安全中心(免费版账号会被自动跳过)。
导出 Linux 软件漏洞(CVE)
导出所有已启用账号中未修复的 Linux 软件漏洞(高/中/低优先级),并合并为 vul-cve-merged-{date}.xlsx。
# Export for all enabled accounts
.venv/bin/python vuln.py export-cve
# Export for one specific account
.venv/bin/python vuln.py export-cve --account-id 1225574417218097
导出 Windows 系统漏洞
导出所有已启用账号中未修复的 Windows 系统漏洞(高/中/低优先级),并合并为 vul-sys-merged-{date}.xlsx。
.venv/bin/python vuln.py export-sys
.venv/bin/python vuln.py export-sys --account-id 1225574417218097
导出应用漏洞(包括 SCA)
导出所有已启用账号中未修复的应用漏洞(ECS 和容器,包括软件成分分析),并合并为 vul-app-merged-{date}.xlsx。
.venv/bin/python vuln.py export-app
.venv/bin/python vuln.py export-app --account-id 1225574417218097
导出应急漏洞
导出所有已启用账号的应急漏洞(风险状态为存在风险),并合并为 vul-emg-merged-{date}.xlsx。
.venv/bin/python vuln.py export-emg
.venv/bin/python vuln.py export-emg --account-id 1225574417218097
输出文件
| 文件 | 说明 | |------|------| | vul-cve-merged-{date}.xlsx | 合并后的 Linux 软件漏洞列表,包含“资源目录账号”列 | | vul-sys-merged-{date}.xlsx | 合并后的 Windows 系统漏洞列表,包含“资源目录账号”列 | | vul-app-merged-{date}.xlsx | 合并后的应用漏洞列表(包括 SCA),包含“资源目录账号”列 | | vul-emg-merged-{date}.xlsx | 合并后的应急漏洞列表,包含“资源目录账号”列 |
导出参数详情
| 类型 | export-vul 参数 | |------|----------------| | export-cve | --Type cve --Necessity asap,later,nntf --Dealed n | | export-sys | --Type sys --Necessity asap,later,nntf --Dealed n | | export-app | --Type app --Necessity asap,later,nntf --AttachTypes sca --AssetType ECS,CONTAINER --Dealed n | | export-emg | --Type emg --RiskStatus y --Dealed n |
错误处理
| 场景 | 处理方式 | |------|------| | FreeVersionNotPermit | 静默跳过此账号并继续处理其他账号 | | NoPermission / Forbidden | 静默跳过此账号 | | 导出失败(服务端错误) | 打印 [failed] 消息并继续处理其他账号 | | 所有账号均被跳过 | 打印消息并退出,不生成输出文件 |
---
注意事项
- 脚本必须在虚拟环境中运行。示例使用
.venv/bin/python;请替换为实际的虚拟环境路径。 - 使用
aliyun configure管理阿里云 CLI 凭证;不得硬编码 AK/SK。 - SAS API 仅支持两个端点:
cn-shanghai(中国内地)和ap-southeast-1(中国内地以外)。