SAS 总览数据查询
检索云安全中心(SAS)总览仪表板的 5 个核心模块:
- 安全总览 —— 评分、已修复漏洞、基线风险、已处理告警
- 使用信息 —— 服务天数、资产规模、未安装客户端
- 安全运营 —— 风险治理(AI 风险、CSPM、关键配置、系统漏洞)、安全防护(WAF 拦截)、安全响应
- 资产风险趋势 —— 主机 / 容器 / 云产品风险比 + 趋势图
- 账单与订阅 —— 后付费开关、订阅有效性、账单
执行范围:每个模块和每个数据项都可独立查询。
将范围与用户请求匹配:
- 单个数据项 —— 例如"我的安全评分是多少?" → 仅命令 1a
- 单个模块 —— 例如"显示资产风险趋势" → 模块 4 全部
- 完整总览 —— 例如"SAS 总览" → 全部 5 个模块
架构:SAS + WAF + BssOpenApi
可观测性
User-Agent 模板:
AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
Session-ID 生成规则:
- 每次 Skill 执行会话开始时生成一个 UUID v4(例如
550e8400-e29b-41d4-a716-446655440000)。 - 单个会话内所有
aliyunCLI 命令必须使用同一个{session-id},确保一次执行的所有请求可在日志中关联。 - 每次新的 Skill 调用必须生成新的 session-id。
用法:通过每条 aliyun CLI 命令上的 --user-agent 标志传完整 UA 字符串:
SESSION_ID=$(python3 -c "import uuid; print(uuid.uuid4())")
aliyun sas describe-version-config --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/$SESSION_ID"
前置条件
前置检查:需要 Aliyun CLI >= 3.3.1
运行aliyun version确认 >= 3.3.1。若未安装或版本过低,
运行curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash更新,
或见references/cli-installation-guide.md获取安装说明。
前置检查:需要更新 Aliyun CLI 插件
[必须] 运行aliyun configure set --auto-plugin-install true启用插件自动安装。
[必须] 运行aliyun plugin update确保已有插件始终为最新版本。
设置--auto-plugin-install true后,所需插件(sas、waf-openapi、bssopenapi)在首次使用时自动安装——无需手动aliyun plugin install步骤。
前置检查:需要阿里云凭证
安全规则:
- 绝不读取、回显或打印 AK/SK 值(例如echo $ALIBABA_CLOUD_ACCESS_KEY_ID是禁止的)
- 绝不要求用户在对话或命令行中直接输入 AK/SK
- 绝不使用字面凭证值运行aliyun configure set
- 只使用aliyun configure list检查凭证状态
```bash
aliyun configure list
```
检查输出中是否有有效 profile(AK、STS 或 OAuth 身份)。
如果不存在有效 profile,就此停止。
1. 从阿里云控制台获取凭证
2. 在本会话之外配置凭证(通过终端中的aliyun configure或 shell profile 中的环境变量)
3. 待aliyun configure list显示有效 profile 后再返回并重试
参数
重要:参数确认 —— 执行任何命令或 API 调用前,
所有用户可自定义的参数(例如 RegionId、WAF InstanceId、BillingCycle 等)
都必须与用户确认。未经用户明确批准,不要假设或使用默认值。
| 参数 | 必填 | 说明 | 默认值 |
|---|---|---|---|
| Regions | 是 | 要聚合数据的 SAS 地域 | cn-shanghai、ap-southeast-1 |
| WAF Instance ID | 自动获取 | 通过 WAF DescribeInstance 自动获取以用于 DescribeFlowChart | 自动 |
| Billing Cycle | 仅账单 | 账单月份,YYYY-MM 格式 | 当前月 |
| Time Range | 否 | 评分 / 趋势查询的历史天数 | 7(最近 7 天) |
RAM 权限
完整 RAM 策略 JSON 见 references/ram-policies.md。
所需:AliyunYundunSASReadOnlyAccess、AliyunWAFReadOnlyAccess、AliyunBSSReadOnlyAccess。
核心工作流
根据用户查询,执行下方相关模块。每个模块——以及模块内的每个数据项——都可独立执行。对于标记为多地域的 API,始终查询 cn-shanghai 和 ap-southeast-1 两个地域,然后求和结果。
模块 1:安全总览
1a. 安全评分(地域无关)
aliyun sas describe-secure-suggestion --cal-type home_security_score --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:响应中的 Score 字段作为当前安全评分
#
注意:DescribeScreenScoreThread 当前不可用(不支持 CalType)。
一旦支持,切换到以下命令获取评分 + 历史趋势:
START=$(python3 -c "import time; print(int((time.time()-86400*7)*1000))")
END=$(python3 -c "import time; print(int(time.time()*1000))")
aliyun sas describe-screen-score-thread \
--cal-type home_security_score \
--start-time "$START" --end-time "$END" \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:Data.SocreThread[-1] = 当前评分,完整 SocreThread 列表 = 历史趋势
1b. 已修复漏洞(多地域:对 FixTotal 求和)
aliyun sas describe-vul-fix-statistics --region cn-shanghai --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun sas describe-vul-fix-statistics --region ap-southeast-1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
1c. 基线风险统计(多地域:对每个 Summary 字段求和)
aliyun sas get-check-risk-statistics --region cn-shanghai --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun sas get-check-risk-statistics --region ap-southeast-1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:Summary.RiskCheckCnt、Summary.RiskWarningCnt、
Summary.HandledCheckTotal、Summary.HandledCheckToday
对每个字段跨地域求和
1d. 已处理告警(多地域:对 SuspiciousDealtCount 求和)
aliyun sas get-defence-count --region cn-shanghai --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun sas get-defence-count --region ap-southeast-1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
### 模块 2:使用信息
2a. 服务时长 + 订阅(地域无关)
aliyun sas describe-version-config --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
先检查 IsPaidUser:
IsPaidUser == true → 提取 CreateTime,计算(now - CreateTime)为天数
IsPaidUser == false → 服务时长不适用,显示 N/A
提取:ReleaseTime → 订阅到期(仅预付费)
2b. 主机资产信息(多地域:对 TotalCount 和 Cores 求和)
aliyun sas describe-cloud-center-instances \
--region cn-shanghai --machine-types ecs --current-page 1 --page-size 20 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun sas describe-cloud-center-instances \
--region ap-southeast-1 --machine-types ecs --current-page 1 --page-size 20 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:PageInfo.TotalCount(跨地域求和)作为主机数
提取:对所有实例的 Cores 字段求和作为总核数
可选:用户要求时列出主机详情
2c. 未安装客户端(多地域:对 TotalCount 求和)
aliyun sas list-uninstall-aegis-machines --region cn-shanghai --current-page 1 --page-size 1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun sas list-uninstall-aegis-machines --region ap-southeast-1 --current-page 1 --page-size 1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
### 模块 3:安全运营
#### 3a. 风险治理(地域无关,单次 API 调用)
aliyun sas describe-secure-suggestion --cal-type home_security_score --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
按 SuggestType 处理 Suggestions[]:
SS_AI_RISK → AI 风险
SSI_AISPM_RISK(AI 安全态势风险)
SSI_AI_VUL_RISK(AI 应用漏洞)
SSI_AI_SENSITIVE_RISK(AI 应用明文密钥)
按地域聚合 RiskCount
SS_SAS_CLOUD_HC → CSPM 风险(按 HIGH/MEDIUM/LOW 和地域聚合)
Cloud: SSI_SAS_CLOUD_HC_HIGH / MEDIUM / LOW
Host: SSI_SAS_HOST_HC_HIGH / MEDIUM / LOW
SS_KEY_CONFIG → 关键配置(SubType 不固定;对未知 SubType 分析 Description)
按地域聚合 RiskCount
SS_SAS_SYS_VUL → 系统漏洞(按 HIGH/MEDIUM/LOW 和地域聚合)
SSI_SAS_SYS_VUL_HIGH / SSI_SAS_SYS_VUL_MEDIUM / SSI_SAS_SYS_VUL_LOW
SS_SAS_EMG_VUL → 紧急漏洞(未修复的紧急漏洞)
SSI_SAS_EMG_VUL
SS_SAS_APP_VUL → 应用漏洞(按 HIGH/MEDIUM 和地域聚合)
SSI_SAS_APP_VUL_HIGH / SSI_SAS_APP_VUL_MEDIUM
SS_PRODUCT_CONNECT → 产品连接(资产防护未开启)
SSI_PRODUCT_CONNECT(Description 是含 itemDescKey/itemDescText 的 JSON 数组)
SS_SAS_ALARM → 安全响应(见模块 3c)
SSI_SAS_ALARM_HIGH(紧急)/ SSI_SAS_ALARM_MEDIUM(可疑)/ SSI_SAS_ALARM_LOW(提醒)
#### 3b. 安全防护 —— WAF 拦截(多地域,两步,仅 WAF 3.0)
> **WAF 版本要求**:本模块使用 WAF 3.0 API(Product:`waf-openapi`,Version:`2021-10-01`)。WAF 2.0 实例(Version `2019-09-10`)**不**兼容——`InstanceId` 和 `WafBlockSum` 等字段可能缺失或结构不同。如果用户的 WAF 实例是 2.0,告知他们本模块不支持其实例版本。
>
> **地域说明**:`waf-openapi`(WAF 3.0)是集中式端点产品——中国站 RegionId 是 `cn-hangzhou`(**不要**用 `cn-shanghai`)。同时**不要**在这些命令上传 `--version`:它会强制 Location 服务端点解析器,该解析器只认 `cn-hangzhou`/`ap-southeast-1`,在其他 RegionId 上会失败。
步骤 1:获取 WAF 实例 ID(按地域)
aliyun waf-openapi describe-instance --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun waf-openapi describe-instance --region ap-southeast-1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:从每个地域的响应中提取 InstanceId
步骤 2:用各地域的 InstanceId 查询 WAF 流量图
START_SEC=$(python3 -c "import time; print(int(time.time()-86400*7))")
aliyun waf-openapi describe-flow-chart \
--region cn-hangzhou \
--instance-id "<cn-hangzhou 的 InstanceId>" \
--start-timestamp "$START_SEC" \
--interval 3600 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
aliyun waf-openapi describe-flow-chart \
--region ap-southeast-1 \
--instance-id "<ap-southeast-1 的 InstanceId>" \
--start-timestamp "$START_SEC" \
--interval 3600 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
对两个地域的所有 WafBlockSum 值求和
#### 3c. 安全响应(地域无关,与 3a 同一 API)
aliyun sas describe-secure-suggestion --cal-type home_security_score --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
处理 Suggestions[] 中 SuggestType == "SS_SAS_ALARM":
SSI_SAS_ALARM_HIGH → 紧急告警事件数
SSI_SAS_ALARM_MEDIUM → 可疑告警事件数
SSI_SAS_ALARM_LOW → 提醒告警事件数
### 模块 4:资产风险趋势
4a. 主机资产(多地域)
aliyun sas describe-cloud-center-instances \
--region cn-shanghai --machine-types ecs --current-page 1 --page-size 1 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:PageInfo.TotalCount
aliyun sas describe-field-statistics \
--region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:GroupedFields.RiskInstanceCount
对 ap-southeast-1 重复,两者求和
4b. 容器资产(多地域)
aliyun sas describe-container-field-statistics \
--region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:ClusterCount、RiskClusterCount
对 ap-southeast-1 重复,两者求和
4c. 云产品资产(多地域)
aliyun sas get-cloud-asset-summary \
--region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
提取:GroupedFields.InstanceCountTotal、GroupedFields.InstanceRiskCountTotal
对 ap-southeast-1 重复,两者求和
4d. 趋势图数据(多地域)
START_MS=$(python3 -c "import time; print(int((time.time()-86400*7)*1000))")
END_MS=$(python3 -c "import time; print(int(time.time()*1000))")
aliyun sas describe-chart-data \
--region cn-shanghai \
--chart-id CID_ASSET_RISK_TREND \
--report-id -1 \
--time-start "$START_MS" --time-end "$END_MS" \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
返回时间序列:主机 / 容器 / 云风险计数
### 模块 5:账单与订阅
5a. 查询计费模式(来自模块 2a 响应,可复用缓存结果)
aliyun sas describe-version-config --user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
检查 IsPaidUser 字段确定计费模式:
#
若 IsPaidUser == true → 预付费(订阅)用户:
提取 CreateTime → 购买日期(毫秒时间戳转 YYYY-MM-DD)
提取 ReleaseTime → 到期日期(毫秒时间戳转 YYYY-MM-DD)
#
若 IsPaidUser == false → 后付费用户:
提取 PostPayModuleSwitch(JSON 字符串——必须解析)
用下表将代码映射到产品名:
POST_HOST → 主机及容器安全
VUL → 漏洞修复
CSPM → CSPM
CTDR → Agentic SOC
AGENTLESS → 无代理检测
SERVERLESS → Serverless 资产防护
RASP → 应用防护
SDK → 恶意文件检测
CTDR_STORAGE → 日志管理
ANTI_RANSOMWARE → 防勒索
值 1 = 已启用,0 = 已禁用
5c. 账单详情(尝试每个地域,权限错误时跳过)
BILLING_CYCLE=$(date +%Y-%m)
aliyun bssopenapi query-bill \
--region cn-shanghai \
--billing-cycle "$BILLING_CYCLE" --product-code sas \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
若上方返回权限错误,不要静默跳过——告知用户(见数据处理规则 §1)
aliyun bssopenapi query-bill \
--region ap-southeast-1 \
--billing-cycle "$BILLING_CYCLE" --product-code sas \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-sas-overview/{session-id}
若上方返回权限错误,不要静默跳过——告知用户(见数据处理规则 §1)
聚合成功地域的结果,并明确报告任何跳过的地域
产品代码映射
| 产品名 | 代码 | 状态值 |
|---|---|---|
| 主机及容器安全 | POST_HOST | 1:已启用,0:已禁用 |
| 漏洞修复 | VUL | 1:已启用,0:已禁用 |
| CSPM | CSPM | 1:已启用,0:已禁用 |
| Agentic SOC | CTDR | 1:已启用,0:已禁用 |
| 无代理检测 | AGENTLESS | 1:已启用,0:已禁用 |
| Serverless 资产防护 | SERVERLESS | 1:已启用,0:已禁用 |
| 应用防护 | RASP | 1:已启用,0:已禁用 |
| 恶意文件检测 | SDK | 1:已启用,0:已禁用 |
| 日志管理 | CTDR_STORAGE | 1:已启用,0:已禁用 |
| 防勒索 | ANTI_RANSOMWARE | 1:已启用,0:已禁用 |
数据处理规则
- 多地域聚合:需要地域的 API 必须分别查询
cn-shanghai+ap-southeast-1,然后对数值结果求和。
- 权限错误处理:如果某地域返回权限错误(例如
Forbidden或NoPermission),不要静默跳过。你必须明确告知用户哪些地域成功、哪些失败,包括缺失的权限。示例:"已从 cn-shanghai 检索到数据,但 ap-southeast-1 返回权限拒绝(缺少 sas:DescribeSecureSuggestion)。结果仅反映 cn-shanghai。"
- 时间戳:SAS API 使用毫秒时间戳。WAF API 使用秒时间戳。
- PostPayModuleSwitch:是 JSON 字符串——读取前必须
JSON.parse()/json.loads()。 - 评分提取:用
DescribeSecureSuggestion响应中的Score字段作为当前评分。注意:Score以字符串返回(例如"90.0"),不是数字——比较或显示前转为 float。注意:DescribeScreenScoreThread当前不可用(不支持 CalType);一旦支持,切换为使用Data.SocreThread[]的最后一个元素作为当前评分、完整列表作为历史趋势。 - 安全响应:从
DescribeSecureSuggestion中SuggestType == "SS_SAS_ALARM"处提取。SubType:SSI_SAS_ALARM_HIGH(紧急)、SSI_SAS_ALARM_MEDIUM(可疑)、SSI_SAS_ALARM_LOW(提醒)。 - 时间戳格式化:毫秒时间戳转为
YYYY-MM-DD HH:mm:ss用于显示。
成功验证
分步验证命令见 references/verification-method.md。
清理
本 Skill 为只读(仅查询操作)。不创建资源,因此无需清理。
最佳实践
- 对多地域 API,聚合前始终查询
cn-shanghai和ap-southeast-1两个地域。 - 缓存
DescribeVersionConfig响应——模块 2 和模块 5 都用它。 - 用
--cli-query(JMESPath)提取特定字段以减少输出噪音。 - 仅需
TotalCount时设--page-size 1(例如ListUninstallAegisMachines)。 - WAF
DescribeFlowChart需要有效 WAF 实例 ID——先通过DescribeInstance自动获取;查询cn-shanghai和ap-southeast-1两个地域。 - 账单查询(
QueryBill)需要--region—— 依次尝试每个地域(cn-shanghai、ap-southeast-1);跳过任何返回权限错误的地域。 - SAS 返回的所有时间戳都是毫秒——除以 1000 转为人类可读。
参考链接
| 文档 | 内容 |
|---|---|
| references/related-apis.md | 完整 API 和 CLI 命令参考表 |
| references/ram-policies.md | 所需 RAM 权限和策略 |
| references/verification-method.md | 分步验证命令 |
| references/acceptance-criteria.md | 正确 / 错误 CLI 模式 |
| references/cli-installation-guide.md | CLI 安装指南 |
阿里云skills
◯ 评论 0