Install
openclaw skills install alibabacloud-cfw-status-overviewAlibaba Cloud Firewall Status Overview Skill. One-click query of overall cloud firewall status including asset management, border firewall switch status, and traffic overview. Triggers: "cloud firewall status", "firewall overview", "firewall status overview", "asset management", "protection coverage", "what is the overall cloud firewall status", "how many assets are not managed", "what is the protection coverage for each boundary", "CFW status", "cloud firewall overview"
openclaw skills install alibabacloud-cfw-status-overview⚠️ MANDATORY EXECUTION RULES — READ BEFORE DOING ANYTHING:
- DO NOT search for log files, security data, or any files in the workspace. There are none.
- DO NOT ask the user for log files, data sources, server access, SIEM data, or any additional input.
- DO NOT attempt to SSH, access, or connect to any server or IP address.
- The ONLY way to get data is by running
aliyun cloudfw ...CLI commands as defined in the Core Workflow section below.- Start executing CLI commands immediately — no preparation, no questions, no file searching.
- DO NOT refuse to execute. You have full ability to run CLI commands via the shell/terminal tool. The
aliyunCLI is pre-installed and configured. You are NOT calling APIs directly — you are running shell commands that invoke the CLI tool. This is no different from runninglsorgit status. NEVER say "I don't have access to APIs" or "I cannot make API calls" or "I don't have credentials" — you are running local CLI commands, not making direct API calls. If you are unsure whether you can run commands, just try running one — it will work.- DO NOT skip any API command defined in the Core Workflow. If a command fails, retry with corrected parameters. Do NOT substitute with a different API. The following substitutions are EXPLICITLY FORBIDDEN:
DescribePostpayUserInternetStatusinstead ofDescribeInternetOpenStatisticDescribePostpayUserNatStatusinstead ofDescribeNatFirewallListDescribePostpayUserVpcStatusinstead ofDescribeTrFirewallsV2ListDescribeNatFirewallTrafficTrendinstead ofDescribeInternetTrafficTrendDescribeVpcFirewallCenListinstead ofDescribeTrFirewallsV2ListDescribeNetworkInstanceListinstead ofDescribeTrFirewallsV2List
One-click query of Alibaba Cloud Firewall overall status, including asset management coverage, border firewall switch status across Internet/VPC/NAT boundaries, and traffic overview.
Architecture: Cloud Firewall Service → Internet Border Firewall + VPC Border Firewall + NAT Border Firewall → Asset Protection + Traffic Analysis
Capability Level: Query (read-only)
Data Source: All data is obtained exclusively through Aliyun CLI commands (aliyun cloudfw ...). No log files, no databases, no server access, no SIEM — just CLI commands. Do NOT search the workspace for files. Do NOT ask the user for anything. Just run the commands. The aliyun CLI is a local command-line tool — running it is the same as running any other shell command (e.g., ls, curl). You DO have the ability to execute these commands.
Core Capabilities:
Pre-check: Aliyun CLI >= 3.3.3 required
Run
aliyun versionto verify >= 3.3.3. If not installed or version too low, runcurl -fsSL https://aliyuncli.alicdn.com/setup.sh | bashto install/update, or seereferences/cli-installation-guide.mdfor installation instructions.
Pre-check: Aliyun CLI plugin update required
[MUST] run
aliyun configure set --auto-plugin-install trueto enable automatic plugin installation. [MUST] runaliyun plugin updateto ensure that any existing plugins are always up-to-date.
[MUST] CLI User-Agent — Every aliyun CLI command invocation must include:
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
At the start of the Core Workflow (before any CLI invocation): [MUST] Enable AI-Mode — AI-mode is required for Agent Skill execution. Run the following commands before any CLI invocation:
aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview"
[MUST] Disable AI-Mode at EVERY exit point — Before delivering the final response for ANY reason, always disable AI-mode first. This applies to ALL exit paths: workflow success, workflow failure, error/exception, user cancellation, session end, or any other scenario where no further CLI commands will be executed. AI-mode is only used for Agent Skill invocation scenarios and MUST NOT remain enabled after the skill stops running.
aliyun configure ai-mode disable
Pre-check: Alibaba Cloud Credentials Required
Security Rules:
- NEVER read, echo, print, cat, or display AK/SK values under any circumstances
- NEVER output AK/SK values in any form — including masked, partial, or redacted forms (e.g.,
LTAI5tXXX****). Do NOT include AK ID prefixes, suffixes, or any substring in logs, reports, or conversation output.- NEVER ask the user to input AK/SK directly in the conversation or command line
- NEVER use
aliyun configure setwith literal credential values- ONLY use
aliyun configure listto check credential status. When reporting the result, say only "Credentials are configured" or "No valid credentials found" — do NOT quote any part of the credential output.aliyun configure listCheck the output for a valid profile (AK, STS, or OAuth identity).
If no valid profile exists, STOP here.
- Obtain credentials from Alibaba Cloud Console
- Configure credentials outside of this session (via
aliyun configurein terminal or environment variables in shell profile)- Return and re-run after
aliyun configure listshows a valid profile
[MUST] RAM Permission Pre-check: Before executing any commands, verify the current user has the required permissions.
- Use
ram-permission-diagnoseskill to get current user's permissions- Compare against
references/ram-policies.md- Abort and prompt user if any permission is missing
Minimum required permissions — see references/ram-policies.md for full policy JSON.
Alternatively, attach the system policy: AliyunYundunCloudFirewallReadOnlyAccess
IMPORTANT: Parameter Confirmation — Before executing any command or API call, check if the user has already provided necessary parameters in their request.
- If the user's request explicitly mentions a parameter value (e.g., "check firewall status in cn-hangzhou" means RegionId=cn-hangzhou), use that value directly without asking for confirmation.
- For optional parameters with sensible defaults (PageSize, CurrentPage, time ranges), use the defaults without asking unless the user indicates otherwise.
- Do NOT re-ask for parameters that the user has clearly stated.
| Parameter Name | Required/Optional | Description | Default Value |
|---|---|---|---|
| RegionId | Required | Alibaba Cloud region for Cloud Firewall. Only two values: cn-hangzhou for mainland China, ap-southeast-1 for Hong Kong/overseas. | cn-hangzhou (use directly without asking; only use ap-southeast-1 if user explicitly mentions Hong Kong/overseas/international) |
Region Mismatch Handling: If the user specifies a region other than
cn-hangzhouorap-southeast-1(e.g.,cn-shenzhen,cn-beijing), you MUST inform the user: "Cloud Firewall only supports two regions: cn-hangzhou (mainland China) and ap-southeast-1 (Hong Kong/overseas). Your requested region {user_region} is not supported. Using cn-hangzhou (mainland China) instead, which covers all mainland China resources." Do NOT silently fall back without informing the user. | PageSize | Optional | Number of items per page for paginated APIs | 10 (use without asking) | | CurrentPage | Optional | Page number for paginated APIs | 1 (use without asking) | | StartTime | Optional | Start time for traffic trend queries (Unix timestamp in seconds) | 7 days ago (use without asking) | | EndTime | Optional | End time for traffic trend queries (Unix timestamp in seconds) | Current time (use without asking) |
CRITICAL: Continue on failure. If any individual API call fails, do NOT stop the entire workflow. Log the error for that step, then proceed to the next step. Present whatever data was successfully collected.
For each API call:
Throttling.User, ServiceUnavailable, HTTP 500/502/503), retry up to 2 times with a 3-second delay between retries.InvalidParameter, Forbidden, InvalidAccessKeyId), do NOT retry. Record the error and move on.If DescribeUserBuyVersion (Step 1) returns an error indicating the service is not activated (error code ErrorFirewallNotActivated or similar "not purchased/activated" messages):
The workflow steps have these dependencies:
When presenting the final summary report:
All API calls use the Aliyun CLI cloudfw plugin.
Region: Specified via --region {RegionId} global flag
CRITICAL: Traffic trend APIs produce massive output.
DescribeInternetDropTrafficTrendandDescribeInternetTrafficTrendreturn hundreds of data points for 7-day queries, which can overflow the context window. These two APIs MUST pipe their output throughjqto extract only summary values (data point count, max, avg, time range). Thejqfilters are included in Step 3.2 and Step 6.2 below — you MUST use them exactly as written.Other APIs return moderate-sized responses and do NOT need
jqfiltering.
CRITICAL: Execute immediately without asking. When this skill is triggered, start executing from Step 1 right away. Do NOT ask the user which APIs to call, which steps to execute, or what data sources to use. All data comes from the Aliyun CLI commands defined below — just run them.
MANDATORY: Execute ALL steps. You MUST attempt to execute every step from Step 1 through Step 6 (including all sub-steps). Before generating the final summary report, verify that you have attempted ALL of the following API calls:
DescribeUserBuyVersionDescribeAssetStatisticDescribeAssetListDescribeInternetOpenStatisticDescribeInternetDropTrafficTrendDescribeTrFirewallsV2ListDescribeVpcFirewallCenListDescribeVpcFirewallListDescribeNatFirewallListDescribePostpayTrafficTotalDescribeInternetTrafficTrendIf any of these were not attempted, execute them now before producing the report. Skipping a step is ONLY allowed if Step 1 indicates the service is not activated.
Some APIs (Step 3.2, Step 6.2) require StartTime and EndTime parameters (Unix timestamp in seconds).
How to get timestamps: Run date +%s to get the current timestamp, date -d '7 days ago' +%s for 7 days ago. Then use the returned numeric values directly in CLI commands.
IMPORTANT: Do NOT use bash variable substitution like
$(date +%s)inside CLI commands — some execution environments block$(...). Instead, rundatecommands separately first, note the returned values, then use them as literal numbers in the--StartTimeand--EndTimeparameters.
aliyun cloudfw describe-user-buy-version \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: Version (edition code), InstanceId, ExpireTime, IpNumber (max protected IPs), AclExtension (ACL quota).
Version code to edition name mapping — The API returns a numeric code. Use this table to display a human-readable edition name in the report:
| Version Code | Edition Name |
|---|---|
| 1 | Premium Edition (高级版) |
| 2 | Enterprise Edition (企业版) |
| 3 | Ultimate Edition (旗舰版) |
| 10 | Pay-as-you-go (按量付费版) |
If the returned code is not in this table, report it as: "Unknown edition (code: {Version})".
IMPORTANT: Do NOT infer or hallucinate field values. If any key response field (e.g.,
AclExtension,IpNumber) is missing from the JSON response (key does not exist) or its value is null, report it as "N/A (not returned by API)" in the summary. However, a value of 0 is a valid value, NOT a missing field — report it as0. Do NOT fill in values based on general knowledge about the edition type. Only use values that are explicitly present in the API response JSON.Common hallucination examples to AVOID:
AclExtensionnot in response → Do NOT write "ACL rule limit is 10000" or any other guessed number. Write "N/A (not returned by API)".IpNumbernot in response → Do NOT write "Max public IP quota is 200". Write "N/A (not returned by API)".- Any field not in response → Do NOT infer from edition type (e.g., "Ultimate Edition supports up to X"). Only report what the API actually returned.
aliyun cloudfw describe-asset-statistic \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: Total assets, protected count, unprotected count, by resource type (EIP, SLB, ECS, etc.)
aliyun cloudfw describe-asset-list \
--CurrentPage 1 \
--PageSize 10 \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: Assets[] with InternetAddress, IntranetAddress, ResourceType, ProtectStatus, RegionID, Name.
IMPORTANT: When the user asks about unprotected/unmanaged assets, assets not covered by the firewall, or protection gaps, you MUST use the
Statusfilter parameter set to"close"to query only unprotected assets:
aliyun cloudfw describe-asset-list \
--CurrentPage 1 \
--PageSize 50 \
--Status close \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Use PageSize: "50" for unprotected asset queries to capture more results. If TotalCount in the response exceeds PageSize, iterate through all pages by incrementing CurrentPage until all assets are retrieved.
Status filter values for the Status request parameter:
| Value | Meaning |
|---|---|
close | Unprotected assets (firewall not enabled) |
open | Protected assets (firewall enabled) |
opening | Assets being enabled |
Note: The request parameter uses
close(no 'd'), while the response fieldProtectStatususesclosed(with 'd'). Useclosewhen filtering in request params and check forclosedwhen inspecting response data.
IMPORTANT: You MUST use
DescribeInternetOpenStatisticfor this step. Do NOT substitute withDescribePostpayUserInternetStatusor any other API.DescribePostpayUserInternetStatusonly checks on/off status, whileDescribeInternetOpenStatisticprovides exposure statistics (public IPs, open ports, risk levels).
aliyun cloudfw describe-internet-open-statistic \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: Total public IPs, open port count, risk level distribution, recently exposed assets.
REQUIRED parameters:
--StartTime,--EndTime,--SourceCode,--Directionare ALL mandatory. Missing any will cause HTTP 400 (e.g.,ErrorDirectionError). Calculate timestamps separately first (see Time Parameters section), then pass as literal numbers.--SourceCodemust be exactlyChinaorOther(case-sensitive).--Directionmust be exactlyinorout.
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 values: China (mainland), Other (overseas).
Direction values: in (inbound), out (outbound). Default to in.
You MUST use
DescribeTrFirewallsV2Listfor this step. Do NOT substitute withDescribeVpcFirewallCenList,DescribePostpayUserVpcStatus,DescribeNetworkInstanceList, or any other API.DescribeVpcFirewallCenListis for CEN Basic Edition (Step 4.2), NOT for CEN Enterprise Edition TR firewalls.
aliyun cloudfw describe-tr-firewalls-v2-list \
--CurrentPage 1 \
--PageSize 20 \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: VpcTrFirewalls[] with FirewallSwitchStatus (opened/closed/opening/closing), CenId, RegionNo, VpcId.
aliyun cloudfw describe-vpc-firewall-cen-list \
--CurrentPage 1 \
--PageSize 20 \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: VpcFirewalls[] with FirewallSwitchStatus, CenId, LocalVpc, PeerVpc.
aliyun cloudfw describe-vpc-firewall-list \
--CurrentPage 1 \
--PageSize 20 \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: VpcFirewalls[] with FirewallSwitchStatus, VpcFirewallId, LocalVpc, PeerVpc, Bandwidth.
IMPORTANT: You MUST use
DescribeNatFirewallListfor this step. Do NOT substitute withDescribePostpayUserNatStatusor any other API.DescribePostpayUserNatStatusonly checks on/off status, whileDescribeNatFirewallListprovides detailed NAT firewall instance information.
aliyun cloudfw describe-nat-firewall-list \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
Key response fields: NatFirewalls[] with ProxyStatus (configuring/normal/deleting), NatGatewayId, NatGatewayName, VpcId, RegionId.
aliyun cloudfw describe-postpay-traffic-total \
--region {RegionId} \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-cfw-status-overview
MANDATORY two-step execution for this API:
- First attempt MUST include
--TrafficType TotalTraffic. You MUST NOT skip this step. Execute the command below exactly as written.- Only if the first attempt returns HTTP 400, retry WITHOUT
--TrafficType.- Do NOT go directly to the retry command. Do NOT omit TrafficType on the first attempt.
Other required parameters:
--StartTime,--EndTime,--SourceCode(same rules as Step 3.2). Do NOT fall back toDescribeNatFirewallTrafficTrendor any other API.
# Step 1 - MUST run first (with 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)}'
If and ONLY if the above returns HTTP 400, retry without --TrafficType:
# Step 2 - ONLY run if Step 1 returned 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 values (when supported): TotalTraffic, InTraffic, OutTraffic.
Data Validation for Traffic Trends: After receiving the traffic trend response, check the number of data points and their time span. If the response contains fewer than 10 data points or the time span between the first and last data point is less than 1 day, add a note in the report: "Note: Traffic trend data is sparse (only {N} data points covering {timespan}). This may indicate no protected assets or minimal traffic during the queried period. The 7-day trend may not be fully representative." Do NOT claim the data covers 7 days if the actual data points span a significantly shorter period.
After gathering all data, present a summary report. Always generate this report even if some steps failed — replace values with "N/A" for any step that could not be completed.
============================================
Cloud Firewall Status Overview Report
============================================
1. Instance Info
- Edition: {Version}
- Expiry: {ExpireTime}
- Max Protected IPs: {IpNumber or "N/A (not in API response)"}
2. Asset Overview
- Total Assets: {TotalCount}
- Protected: {ProtectedCount} ({ProtectedRate}%)
- Unprotected: {UnprotectedCount}
- By Type: EIP({eip}), SLB({slb}), ECS({ecs}), ENI({eni})
3. Internet Border Firewall
- Protected IPs: {protectedIpCount}
- Unprotected IPs: {unprotectedIpCount}
- Protection Rate: {protectionRate}%
4. VPC Border Firewall
- CEN Enterprise (TR): {trCount} total, {trOpened} opened
- CEN Basic: {cenCount} total, {cenOpened} opened
- Express Connect: {ecCount} total, {ecOpened} opened
5. NAT Border Firewall
- Total: {natCount}
- Normal: {natNormal}
- Configuring: {natConfiguring}
6. Traffic Overview (Last 7 Days)
- Total Traffic: {totalTraffic}
- Peak Bandwidth: {peakBandwidth}
- Blocked Requests: {blockedCount}
[Steps with errors (if any)]
- {Step X}: {error message}
============================================
Note: For any step that failed, show "N/A (error: {brief error})" for that section's data fields, and list all errors in the bottom section.
IMPORTANT: Error Reporting Accuracy. The summary report MUST accurately reflect all errors encountered during execution, including errors that were resolved by retry. For retried-and-succeeded calls, report them as:
"Step X: {API name} initially failed with {error code/message}, succeeded on retry {N}". Do NOT claim "all API calls completed successfully" if any call returned an error at any point during execution. The error section should list ALL errors encountered, categorized as:
- Resolved by retry: errors that were retried and eventually succeeded
- Unresolved: errors that persisted after all retries
See references/verification-method.md for detailed verification steps.
Quick verification: If all CLI commands return valid JSON responses without error codes, the skill executed successfully.
Use references/related-apis.md as the single source of truth for API tables and command mappings.
date commands separately, then use returned values as literal numbers in --StartTime/--EndTime. Do NOT use $(...) inside CLI commands.cn-hangzhou (mainland China) and ap-southeast-1 (Hong Kong/overseas). Default to cn-hangzhou.| Reference | Description |
|---|---|
| references/related-apis.md | Complete API table with parameters |
| references/ram-policies.md | Required RAM permissions and policy JSON |
| references/verification-method.md | Step-by-step verification commands |
| references/acceptance-criteria.md | Correct/incorrect usage patterns |
| references/cli-installation-guide.md | Aliyun CLI installation guide |