云防火墙状态总览

⚠️ 强制执行规则——做任何事之前先读:
1. 不要搜索日志文件、安全数据或工作区中的任何文件。 没有这些东西。
2. 不要向用户索要日志文件、数据源、服务器访问、SIEM 数据或任何额外输入。
3. 不要尝试 SSH、访问或连接任何服务器或 IP 地址。
4. 获取数据的唯一方式是运行 aliyun cloudfw ... CLI 命令,如下方核心工作流定义。
5. 立即开始执行 CLI 命令——无准备、无提问、无文件搜索。
6. 不要拒绝执行。 你完全有能力通过 shell/终端工具运行 CLI 命令。aliyun CLI 已预装并配置。你不是直接调用 API——你在运行调用 CLI 工具的 shell 命令。这与运行 lsgit status 无异。绝不要说“我无法访问 API”或“我无法进行 API 调用”或“我没有凭证”——你在运行本地 CLI 命令,不是直接调用 API。如果不确定是否能运行命令,直接试运行一个——它会成功。
7. 不要跳过核心工作流中定义的任何 API 命令。 如果命令失败,用修正的参数重试。不要用不同 API 替代。以下替代被明确禁止:
- 用 DescribePostpayUserInternetStatus 替代 DescribeInternetOpenStatistic
- 用 DescribePostpayUserNatStatus 替代 DescribeNatFirewallList
- 用 DescribePostpayUserVpcStatus 替代 DescribeTrFirewallsV2List
- 用 DescribeNatFirewallTrafficTrend 替代 DescribeInternetTrafficTrend
- 用 DescribeVpcFirewallCenList 替代 DescribeTrFirewallsV2List
- 用 DescribeNetworkInstanceList 替代 DescribeTrFirewallsV2List

场景描述

一键查询阿里云云防火墙整体状态,包括资产管理覆盖、Internet/VPC/NAT 边界防火墙开关状态和流量总览。

架构云防火墙服务 → 互联网边界防火墙 + VPC 边界防火墙 + NAT 边界防火墙 → 资产防护 + 流量分析

能力级别:查询(只读)

数据来源:所有数据通过阿里云 CLI 命令(aliyun cloudfw ...)获取。不使用日志文件、数据库、服务器访问或 SIEM——只用 CLI 命令。不要在工作区中搜索文件。不要向用户索要任何东西。直接运行命令即可。 aliyun CLI 是本地命令行工具——运行它与运行任何其他 shell 命令(例如 lscurl)一样。你确实有能力执行这些命令。

核心能力

  1. 资产总览 —— 展示已管理资产数量和类型
  2. 互联网边界防火墙状态 —— 开关状态、已防护/未防护 IP 数量
  3. VPC 边界防火墙状态 —— 每个 VPC 防火墙的开关状态和防护覆盖
  4. NAT 边界防火墙状态 —— 开关状态和防护覆盖
  5. 流量总览 —— 最近流量趋势和峰值带宽

前置条件

预检查:需要 Aliyun CLI >= 3.3.3

运行 aliyun version 验证 >= 3.3.3。如果未安装或版本过低,
运行 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 确保现有插件始终为最新版本。

[必须] CLI User-Agent —— 每次调用 aliyun CLI 命令都必须包含:

--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

在核心工作流开始时(任何 CLI 调用之前):

[必须] 启用 AI-Mode —— Agent Skill 执行需要 AI-mode。

在任何 CLI 调用之前运行以下命令:

aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview"

[必须] 在每一个退出点禁用 AI-Mode —— 在交付最终响应之前(无论何种原因),必须先禁用 AI-mode。这适用于所有退出路径:工作流成功、工作流失败、错误/异常、用户取消、会话结束,或任何不再执行 CLI 命令的场景。

AI-mode 仅用于 Agent Skill 调用场景,Skill 停止运行后绝不能保持启用状态。

aliyun configure ai-mode disable

认证

预检查:需要阿里云凭证
安全规则:
- 绝不在任何情况下读取、回显、打印、cat 或显示 AK/SK 值
- 绝不以任何形式输出 AK/SK 值——包括掩码、部分或脱敏形式(例如 LTAI5tXXX****)。不要在日志、报告或对话输出中包含 AK 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 后返回并重新运行

RAM 策略

[必须] RAM 权限预检查: 在执行任何命令之前,验证当前用户具有所需权限。
1. 使用 ram-permission-diagnose skill 获取当前用户权限
2. 与 references/ram-policies.md 进行比对
3. 如果缺少任何权限,中止并提示用户

最低所需权限 —— 完整策略 JSON 见 references/ram-policies.md

或者,附加系统策略:AliyunYundunCloudFirewallReadOnlyAccess

参数确认

重要:参数确认 —— 在执行任何命令或 API 调用之前,
检查用户是否已在请求中提供了必要参数。
- 如果用户请求明确提到某个参数值(例如“检查 cn-hangzhou 的防火墙状态”意味着 RegionId=cn-hangzhou),直接使用该值,无需确认
- 对于具有合理默认值的可选参数(PageSize、CurrentPage、时间范围),除非用户另有说明,否则使用默认值,无需询问。
- 不要重复询问用户已明确说明的参数。
参数名必填/可选说明默认值
RegionId必填云防火墙的阿里云地域。仅有两个取值:cn-hangzhou(中国大陆)、ap-southeast-1(香港/海外)。cn-hangzhou(直接使用,无需询问;仅当用户明确提到香港/海外/国际时才使用 ap-southeast-1
地域不匹配处理:如果用户指定了 cn-hangzhouap-southeast-1 以外的地域(例如 cn-shenzhencn-beijing),你必须告知用户:*“云防火墙仅支持两个地域:cn-hangzhou(中国大陆)和 ap-southeast-1(香港/海外)。您请求的地域 {user_region} 不受支持。将改用 cn-hangzhou(中国大陆),它覆盖所有中国大陆资源。”* 不要在不告知用户的情况下静默回退。
PageSize可选分页 API 的每页条数10(直接使用,无需询问)
CurrentPage可选分页 API 的页码1(直接使用,无需询问)
StartTime可选流量趋势查询的开始时间(Unix 秒级时间戳)7 天前(直接使用,无需询问)
EndTime可选流量趋势查询的结束时间(Unix 秒级时间戳)当前时间(直接使用,无需询问)

错误处理与工作流韧性

关键:失败时继续。 如果任何单个 API 调用失败,不要停止整个工作流。
记录该步骤的错误,然后继续执行下一步。展示所有成功收集到的数据。

重试逻辑

对于每次 API 调用:

  1. 如果调用因瞬时错误失败(网络超时、限流 Throttling.UserServiceUnavailable、HTTP 500/502/503),最多重试 2 次,每次重试之间延迟 3 秒。
  2. 如果调用因永久错误失败(例如 InvalidParameterForbiddenInvalidAccessKeyId),不要重试。记录错误并继续。
  3. 所有重试耗尽后,记录“[Step X] Failed: {error message}”并继续下一步。

服务未开通

如果 DescribeUserBuyVersion(Step 1)返回表明服务未开通的错误(错误码 ErrorFirewallNotActivated 或类似的“未购买/未开通”消息):

  1. 告知用户:“该地域云防火墙服务未开通。请在 https://yundun.console.aliyun.com/?p=cfwnext 开通。”
  2. 由于服务不可用,跳过所有后续步骤。
  3. 如果用户请求多个地域,继续下一个地域。

步骤独立性

工作流步骤具有以下依赖关系:

  • Step 1(实例信息) 必须首先成功——如果服务未开通,跳过剩余步骤。
  • Step 2-6 相互独立 —— 任何一步失败都不应阻止其他步骤执行。
  • Step 2 内,子步骤 2.1 和子步骤 2.2 相互独立。
  • Step 4 内,子步骤 4.1、4.2 和 4.3 相互独立。
  • Step 6 内,子步骤 6.1 和 6.2 相互独立。

部分结果

在呈现最终总结报告时:

  • 对于成功的步骤,正常展示收集到的数据。
  • 对于失败的步骤,在对应部分显示“N/A(错误:{简要错误})”。
  • 即使部分步骤失败,也始终呈现总结报告——部分数据总比没有数据好。

核心工作流

所有 API 调用使用阿里云 CLI cloudfw 插件。

地域:通过 --region {RegionId} 全局 flag 指定

上下文管理(必须)

关键:流量趋势 API 产生大量输出。 DescribeInternetDropTrafficTrendDescribeInternetTrafficTrend 对 7 天查询返回数百个数据点,可能溢出上下文窗口。这两个 API 必须通过 jq 管道输出,只提取摘要值(数据点数量、最大值、平均值、时间范围)。jq 过滤器包含在下方 Step 3.2 和 Step 6.2 中——你必须完全按写法使用它们。
其他 API 返回中等规模响应,需要 jq 过滤。
关键:立即执行,不要询问。 当本 Skill 被触发时,立即从 Step 1 开始执行。
不要询问用户调用哪些 API、执行哪些步骤或使用哪些数据源。
所有数据来自下方定义的阿里云 CLI 命令——直接运行它们。
强制:执行所有步骤。 你必须尝试执行从 Step 1 到 Step 6 的每一个步骤(包括所有子步骤)。在生成最终总结报告之前,验证你已尝试所有以下 API 调用:
1. DescribeUserBuyVersion
2. DescribeAssetStatistic
3. DescribeAssetList
4. DescribeInternetOpenStatistic
5. DescribeInternetDropTrafficTrend
6. DescribeTrFirewallsV2List
7. DescribeVpcFirewallCenList
8. DescribeVpcFirewallList
9. DescribeNatFirewallList
10. DescribePostpayTrafficTotal
11. DescribeInternetTrafficTrend
如果其中任何一个未尝试,在生成报告之前立即执行它们。仅当 Step 1 表明服务未开通时才允许跳过步骤。

时间参数

某些 API(Step 3.2、Step 6.2)需要 StartTimeEndTime 参数(Unix 秒级时间戳)。

如何获取时间戳:运行 date +%s 获取当前时间戳,date -d '7 days ago' +%s 获取 7 天前。然后直接在 CLI 命令中使用返回的数值。

重要:不要在 CLI 命令内使用 $(date +%s) 这类 bash 变量替换——某些执行环境会阻止 $(...)。应分别运行 date 命令,记下返回值,然后将其作为字面数字用于 --StartTime--EndTime 参数。

Step 1:查询实例信息(云防火墙版本)

aliyun cloudfw describe-user-buy-version \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段Version(版本代码)、InstanceIdExpireTimeIpNumber(最大防护 IP 数)、AclExtension(ACL 配额)。

版本代码到版本名称映射 —— API 返回数字代码。使用此表在报告中展示人类可读的版本名称:

版本代码版本名称
1高级版(Premium Edition)
2企业版(Enterprise Edition)
3旗舰版(Ultimate Edition)
10按量付费版(Pay-as-you-go)

如果返回的代码不在此表中,报告为:“未知版本(代码:{Version})”

重要:不要推断或幻觉字段值。 如果任何关键响应字段(例如 AclExtensionIpNumber)在 JSON 响应中缺失(键不存在)或其值为 null,在摘要中报告为 “N/A(API 未返回)”。但是,值 0 是有效值,不是缺失字段 —— 报告为 0。不要根据版本类型的一般知识填充值。只使用 API 响应 JSON 中明确存在的值。
要避免的常见幻觉示例:
- AclExtension 不在响应中 → 不要写“ACL 规则限制为 10000”或任何其他猜测数字。写“N/A(API 未返回)”。
- IpNumber 不在响应中 → 不要写“最大公网 IP 配额为 200”。写“N/A(API 未返回)”。
- 任何不在响应中的字段 → 不要从版本类型推断(例如“旗舰版支持最多 X”)。只报告 API 实际返回的内容。

Step 2:资产总览

#### 2.1 查询资产统计

aliyun cloudfw describe-asset-statistic \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段:总资产数、已防护数、未防护数、按资源类型(EIP、SLB、ECS 等)

#### 2.2 查询资产列表(分页)

aliyun cloudfw describe-asset-list \
  --CurrentPage 1 \
  --PageSize 10 \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段Assets[],含 InternetAddressIntranetAddressResourceTypeProtectStatusRegionIDName

#### 2.2.1 查询未防护资产

重要:当用户询问未防护/未管理资产、未被防火墙覆盖的资产或防护缺口时,你必须使用 Status 过滤参数设置为 "close" 只查询未防护资产:
aliyun cloudfw describe-asset-list \
  --CurrentPage 1 \
  --PageSize 50 \
  --Status close \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

未防护资产查询使用 PageSize: "50" 以捕获更多结果。如果响应中的 TotalCount 超过 PageSize,递增 CurrentPage 遍历所有页直到检索完所有资产。

Status 请求参数的过滤值

含义
close未防护资产(防火墙未启用)
open已防护资产(防火墙已启用)
opening正在启用的资产
注意:请求参数使用 close(无 'd'),而响应字段 ProtectStatus 使用 closed(有 'd')。在请求参数中过滤时使用 close,检查响应数据时使用 closed

Step 3:互联网边界防火墙状态

#### 3.1 查询互联网暴露统计

重要:此步骤必须使用 DescribeInternetOpenStatistic 不要用 DescribePostpayUserInternetStatus 或任何其他 API 替代。DescribePostpayUserInternetStatus 仅检查开/关状态,而 DescribeInternetOpenStatistic 提供暴露统计(公网 IP、开放端口、风险等级)。
aliyun cloudfw describe-internet-open-statistic \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段:公网 IP 总数、开放端口数、风险等级分布、最近暴露资产。

#### 3.2 查询互联网防御流量趋势

必需参数--StartTime--EndTime--SourceCode--Direction 都是必需的。缺少任何都会导致 HTTP 400(例如 ErrorDirectionError)。先分别计算时间戳(见时间参数章节),然后作为字面数字传入。--SourceCode 必须精确为 ChinaOther(区分大小写)。--Direction 必须精确为 inout
aliyun cloudfw describe-internet-drop-traffic-trend \
  --StartTime {StartTime} \
  --EndTime {EndTime} \
  --SourceCode China \
  --Direction in \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview \
  | jq '{DataPoints: (.DataList // [] | length), MaxDropBps: ([.DataList[]?.DropBps // 0] | max), MaxDropPps: ([.DataList[]?.DropPps // 0] | max), FirstTime: (.DataList // [] | first | .Time), LastTime: (.DataList // [] | last | .Time)}'

SourceCode 取值:China(大陆)、Other(海外)。

Direction 取值:in(入站)、out(出站)。默认 in

Step 4:VPC 边界防火墙状态

#### 4.1 查询 CEN 企业版(TR 防火墙)

此步骤必须使用 DescribeTrFirewallsV2List 不要用 DescribeVpcFirewallCenListDescribePostpayUserVpcStatusDescribeNetworkInstanceList 或任何其他 API 替代。DescribeVpcFirewallCenList 用于 CEN 基础版(Step 4.2),不是 CEN 企业版 TR 防火墙。
aliyun cloudfw describe-tr-firewalls-v2-list \
  --CurrentPage 1 \
  --PageSize 20 \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段VpcTrFirewalls[],含 FirewallSwitchStatusopened/closed/opening/closing)、CenIdRegionNoVpcId

#### 4.2 查询 CEN 基础版 VPC 防火墙

aliyun cloudfw describe-vpc-firewall-cen-list \
  --CurrentPage 1 \
  --PageSize 20 \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段VpcFirewalls[],含 FirewallSwitchStatusCenIdLocalVpcPeerVpc

#### 4.3 查询高速通道 VPC 防火墙

aliyun cloudfw describe-vpc-firewall-list \
  --CurrentPage 1 \
  --PageSize 20 \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段VpcFirewalls[],含 FirewallSwitchStatusVpcFirewallIdLocalVpcPeerVpcBandwidth

Step 5:NAT 边界防火墙状态

重要:此步骤必须使用 DescribeNatFirewallList 不要用 DescribePostpayUserNatStatus 或任何其他 API 替代。DescribePostpayUserNatStatus 仅检查开/关状态,而 DescribeNatFirewallList 提供详细 NAT 防火墙实例信息。
aliyun cloudfw describe-nat-firewall-list \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

关键响应字段NatFirewalls[],含 ProxyStatusconfiguring/normal/deleting)、NatGatewayIdNatGatewayNameVpcIdRegionId

Step 6:流量总览

#### 6.1 查询总流量统计

aliyun cloudfw describe-postpay-traffic-total \
  --region {RegionId} \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview

#### 6.2 查询互联网流量趋势

此 API 强制两步执行:
1. 首次尝试必须包含 --TrafficType TotalTraffic。你不得跳过此步骤。完全按写法执行下方命令。
2. 仅当首次尝试返回 HTTP 400 时,不带 --TrafficType 重试。
3. 不要直接跳到重试命令。不要在首次尝试时省略 TrafficType。
其他必需参数:--StartTime--EndTime--SourceCode(同 Step 3.2 规则)。不要回退到 DescribeNatFirewallTrafficTrend 或任何其他 API。

Step 1 - 必须首先运行(带 TrafficType):

aliyun cloudfw describe-internet-traffic-trend \

--StartTime {StartTime} \

--EndTime {EndTime} \

--SourceCode China \

--TrafficType TotalTraffic \

--region {RegionId} \

--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview \

jq '{DataPoints: (.DataList // []length), MaxBps: ([.DataList[]?.TotalBps // 0]max), AvgBps: (([.DataList[]?.TotalBps // 0]add) / ([.DataList // []length]if . == 0 then 1 else . end)), FirstTime: (.DataList // []first.Time), LastTime: (.DataList // []last.Time)}'

仅当上述返回 HTTP 400 时,才不带 `--TrafficType` 重试:

Step 2 - 仅当 Step 1 返回 HTTP 400 时运行:

aliyun cloudfw describe-internet-traffic-trend \

--StartTime {StartTime} \

--EndTime {EndTime} \

--SourceCode China \

--region {RegionId} \

--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview \

jq '{DataPoints: (.DataList // []length), MaxBps: ([.DataList[]?.TotalBps // 0]max), AvgBps: (([.DataList[]?.TotalBps // 0]add) / ([.DataList // []length]if . == 0 then 1 else . end)), FirstTime: (.DataList // []first.Time), LastTime: (.DataList // []last.Time)}'

**TrafficType 取值**(支持时):`TotalTraffic`、`InTraffic`、`OutTraffic`。

> **流量趋势数据校验:** 收到流量趋势响应后,检查数据点数量及其时间跨度。如果响应包含少于 10 个数据点,或第一个和最后一个数据点之间的时间跨度少于 1 天,在报告中添加说明:*“注意:流量趋势数据稀疏(仅 {N} 个数据点覆盖 {timespan})。这可能表示查询期间无防护资产或流量极少。7 天趋势可能不完全具有代表性。”* 如果实际数据点跨度明显更短,不要声称数据覆盖 7 天。

### 输出摘要格式

收集所有数据后,呈现总结报告。**即使某些步骤失败也始终生成此报告**——对于无法完成的步骤,用“N/A”替换值。

============================================

云防火墙状态总览报告

============================================

  1. 实例信息
  • 版本:{Version}
  • 到期时间:{ExpireTime}
  • 最大防护 IP 数:{IpNumber 或 "N/A(API 响应中无)"}
  1. 资产总览
  • 总资产数:{TotalCount}
  • 已防护:{ProtectedCount}({ProtectedRate}%)
  • 未防护:{UnprotectedCount}
  • 按类型:EIP({eip})、SLB({slb})、ECS({ecs})、ENI({eni})
  1. 互联网边界防火墙
  • 已防护 IP:{protectedIpCount}
  • 未防护 IP:{unprotectedIpCount}
  • 防护率:{protectionRate}%
  1. VPC 边界防火墙
  • CEN 企业版(TR):{trCount} 个,{trOpened} 个已开启
  • CEN 基础版:{cenCount} 个,{cenOpened} 个已开启
  • 高速通道:{ecCount} 个,{ecOpened} 个已开启
  1. NAT 边界防火墙
  • 总数:{natCount}
  • 正常:{natNormal}
  • 配置中:{natConfiguring}
  1. 流量总览(最近 7 天)
  • 总流量:{totalTraffic}
  • 峰值带宽:{peakBandwidth}
  • 已拦截请求:{blockedCount}

[出错步骤(如有)]

  • {Step X}: {error message}

============================================


> **注意**:对于任何失败的步骤,在该部分数据字段中显示“N/A(错误:{简要错误})”,并在底部章节列出所有错误。

> **重要:错误报告准确性。** 总结报告必须准确反映执行期间遇到的**所有错误**,**包括通过重试解决的错误**。对于重试后成功的调用,报告为:`“Step X: {API name} 初次失败于 {error code/message},重试第 {N} 次成功”`。如果任何调用在执行期间任何时刻返回错误,不要声称“所有 API 调用成功完成”。错误章节应列出遇到的所有错误,分类为:
> - **通过重试解决**:重试后最终成功的错误
> - **未解决**:所有重试后仍存在的错误

---

成功验证

详细验证步骤见 references/verification-method.md

快速验证:如果所有 CLI 命令返回有效 JSON 响应且无错误码,则 Skill 执行成功。

API 与命令表

references/related-apis.md 作为 API 表和命令映射的唯一权威来源。

最佳实践

  1. 失败时继续 —— 如果任何步骤(2-6)失败,记录错误并继续。始终用已收集到的数据生成摘要。
  2. 使用分页 —— 一般查询默认 PageSize=10,过滤查询(例如未防护资产)默认 PageSize=50。
  3. 时间范围选择 —— 默认最近 7 天。分别运行 date 命令,然后将返回值作为字面数字用于 --StartTime/--EndTime。不要在 CLI 命令内使用 $(...)
  4. 地域感知 —— 云防火墙只有两个地域:cn-hangzhou(中国大陆)和 ap-southeast-1(香港/海外)。默认使用 cn-hangzhou
  5. 安全 —— 绝不暴露、记录、回显或显示 AK/SK 值。

参考链接

参考文档说明
references/related-apis.md完整 API 表及参数
references/ram-policies.md所需 RAM 权限及策略 JSON
references/verification-method.md分步验证命令
references/acceptance-criteria.md正确/错误用法示例
references/cli-installation-guide.md阿里云 CLI 安装指南

文档 4 / 6:alibabacloud-pai-eas-service-deploy