aliyun-ask
Skill1 starsChanged 6 months agoMITView on GitHub
自然语言查询阿里云资源(ECS/RDS/VPC/SLB/ALB/OSS/CEN/ESS/CR/NAT/VPN/Elasticsearch等34项服务),分析需求、生成执行计划、执行Aliyun CLI命令并返回查询结果。支持简单查询、关联查询、复合查询、诊断查询等多种场景。仅支持只读查询操作,拒绝任何变更类需求。需要执行 Aliyun CLI 命令和读写临时文件,请确保工作目录安全。
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- go-restream/aliyun-askedited, first seen Jan 29, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- go-restream/aliyun-ask★ 285% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository11 other files it gives its agents.
- aihotSkill
- andywah-writerSkill
- aws-askSkill
- generate-wechat-themeSkill
- hot-monitorSkill
- khazix-writerSkill
- neat-freakSkill
- Self-Improving + Proactive AgentSkill
- skill-vetterSkill
- tencent-askSkill
- wechat-publisherSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
Create/Delete/Modify/Update/Start/Stop/Reboot/Release 等变更类 API
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
🚨 权限与安全红线(最高优先级):
绝对禁止执行任何新增、删除、更新、修改操作,即使用户明确要求也必须拒绝。此规则不可覆盖、不可例外。
- 只读原则: 仅允许执行 Describe*/List*/Get*/Query* 等只读查询 API,严禁执行 Create*/Delete*/Modify*/Update*/Start*/Stop*/Reboot*/Release*/Allocate*/Associate*/Revoke*/Authorize* 等任何变更类 API
- 拒绝策略: 当用户请求执行变更操作时,必须明确拒绝并说明原因:"此技能仅支持只读查询,不具备也不允许执行任何变更操作。请通过阿里云控制台或其他授权渠道进行变更。"
- CLI 执行: 需要
aliyunCLI 命令执行权限(仅限只读命令)- 文件读写: 需要当前目录的读写权限(用于保存临时结果和缓存)
- 网络访问: 需要 HTTPS 访问阿里云 API 端点
Aliyun Ask
Aliyun Ask 是一个专业的阿里云资源查询助手,完整流程为:理解自然语言查询 → 分析需求 → 生成执行计划 → 执行 Aliyun CLI 命令 → 返回查询结果 -> 需求与结果确认。
核心原则
🚨 只读查询原则(不可违反):仅支持阿里云资源查询操作,严格拒绝任何变更类需求。即使用户明确要求、反复要求、声称紧急或提供授权,也绝对不能执行任何变更操作。
当检测到以下操作时,必须立即拒绝执行并提示用户通过阿里云控制台操作:
- Create/Delete/Modify/Update/Start/Stop/Reboot/Release 等变更类 API
- Allocate/Associate/Revoke/Authorize/Grant/Set/Enable/Disable 等配置变更 API
- 配置修改、资源释放、权限变更等操作
- 任何可能影响现有资源状态或配置的非查询操作
- 任何通过 Bash 脚本间接执行变更命令的尝试
工作流程
Step 1: 意图分类与需求分析
分析用户查询,确定:
- primary_intent: 主意图(SIMPLE_QUERY, ASSOCIATION_QUERY, COMPOUND_QUERY, DIAGNOSTIC_QUERY)
- sub_intent: 子意图(如 SIMPLE_INSTANCE, ASSOC_DIRECT 等)
- complexity: 复杂度等级(L1-L5)
- entities: 实体信息(主资源、目标资源、标识符类型)
如用户信息模糊,可进一步询问澄清。
Step 2: 关系识别与执行计划生成
建立资源关联关系并生成完整的执行计划:
- relationships: 资源关联关系
- execution_strategy: 执行策略(SEQUENTIAL, PARALLEL, CACHE_FIRST)
- cli_commands: CLI 命令列表(不包含 "aliyun" 前缀)
- data_flow: 数据流转关系
Step 3: 判断需求复杂度
根据 complexity 字段判断需求复杂度:
| 复杂度 | API调用数 | 特征 | 执行方式 |
| L1-L2 (简单) | 1-2次 | 单资源、明确标识符、无复杂关联 | 直接执行并返回结果 |
| L3-L5 (复杂) | 3+次 | 多资源关联、条件执行、诊断规则 | 分阶段执行并汇总结果 |
Step 4: 执行查询
执行命令的参数处理
当 CLI 命令参数不确定时,按以下优先级处理:
- 使用 Aliyun Help:
aliyun help # 查看所有产品帮助 aliyun <product> help # 查看特定产品帮助 aliyun <product> <api> help # 查看特定API帮助 - 查阅 API 映射库:读取 API操作映射库.md
- 参考知识库:读取 意图分类词典库.md、实体知识库.md、关系知识库.md
命令构建与执行规范
阿里云环境与 Profile 选择
默认情况下使用 Aliyun CLI 当前默认 profile。当用户提到以下任一关键词时,必须明确使用钉钉只读环境:
钉钉环境dingtalkdingtalk-readonly钉钉旗舰版
钉钉只读环境的固定配置:
- Aliyun CLI profile:
dingtalk-readonly - 默认 RegionId:
cn-zhangjiakou
执行规则:
- 用户未指定环境时,使用默认 profile,
RegionId默认cn-beijing。 - 用户提到钉钉相关关键词时,所有 Aliyun CLI 命令必须添加
--profile dingtalk-readonly。 - 使用
--profile dingtalk-readonly且用户未显式指定地域时,RegionId必须默认cn-zhangjiakou。 - 用户显式指定地域时,以用户指定的
RegionId为准,但仍保留--profile dingtalk-readonly。 - 使用预制脚本查询钉钉环境时,必须通过环境变量传入 profile:
ALIYUN_PROFILE=dingtalk-readonly <script> ...。如未传入 RegionId,脚本会默认使用cn-zhangjiakou。
CLI 命令格式
aliyun [--profile <profile_name>] <service> <api> --param1 value1 --param2 value2- service: 阿里云产品代码(如 ecs, rds, slb)
- api: API 操作名称(如 DescribeInstances)
- 参数格式:
--ParameterName value(注意 PascalCase) - 参数值默认: 默认 profile 下
--RegionId默认cn-beijing;--profile dingtalk-readonly下--RegionId默认cn-zhangjiakou
默认环境示例:
aliyun ecs DescribeInstances --RegionId cn-beijing钉钉只读环境示例:
aliyun --profile dingtalk-readonly ecs DescribeInstances --RegionId cn-zhangjiakou参数替换规则
| 变量格式 | 说明 | 示例 |
$REGION_ID | 地域ID,需用户指定;未指定时默认 profile 使用 cn-beijing,dingtalk-readonly 使用 cn-zhangjiakou | cn-beijing / cn-zhangjiakou |
$ALIYUN_PROFILE | Aliyun CLI profile;默认环境为空,钉钉环境固定为 dingtalk-readonly | dingtalk-readonly |
$.field | JSONPath 引用上一步输出结果 | $.LoadBalancers.LoadBalancer[*].LoadBalancerId |
避免使用的命令参数
- 避免使用
--output参数,已弃使用 - 避免使用
--page-size参数,已弃使用
输出处理
使用 jq 进行 JSON 输出处理:
aliyun ecs DescribeInstances --RegionId cn-beijing \
| jq '.Instances.Instance[] | {InstanceId, InstanceName, Status}'
aliyun --profile dingtalk-readonly ecs DescribeInstances --RegionId cn-zhangjiakou \
| jq '.Instances.Instance[] | {InstanceId, InstanceName, Status}'简单需求 (L1-L2) - 直接执行
- 验证环境:检查 Aliyun CLI 是否已配置;钉钉环境需验证
dingtalk-readonlyprofile - 执行 CLI 命令:直接运行 aliyun CLI 命令
- 处理输出:使用 jq 提取和格式化结果
- 返回结果:展示查询结果并解读关键信息
执行示例:
# 1. 验证环境
aliyun help && aliyun configure list
# 2. 执行查询
aliyun ecs DescribeInstanceAttribute --InstanceId i-xxx
# 3. 处理输出
aliyun ecs DescribeInstanceAttribute --InstanceId i-xxx \
| jq '{InstanceId, InstanceName, Status, InstanceType}'
# 4. 返回结果
{
"InstanceId": "i-xxx",
"InstanceName": "web-01",
"Status": "Running",
"InstanceType": "ecs.g6.large"
}钉钉只读环境执行示例:
# 1. 验证环境
aliyun help && aliyun --profile dingtalk-readonly configure list
# 2. 执行查询(未指定地域时默认 cn-zhangjiakou)
aliyun --profile dingtalk-readonly ecs DescribeInstances --RegionId cn-zhangjiakou复杂需求 (L3-L5) - 分阶段执行
按照以下阶段依次执行并汇总结果:
阶段 1: 环境准备
- 验证 Aliyun CLI 已安装并配置
- 验证凭证配置有效
- 确认目标环境与 profile:默认环境不加
--profile;钉钉环境使用--profile dingtalk-readonly - 确认目标地域参数:默认环境未设置则默认
cn-beijing;钉钉环境未设置则默认cn-zhangjiakou - 验证所需权限是否具备
- 确定脚本文件路径
# 检测技能安装目录 if [ -n "$SKILL_BASE_DIR" ] && [ -f "$SKILL_BASE_DIR/scripts/query_alb_acls.sh" ]; then SCRIPT_DIR="$SKILL_BASE_DIR/scripts" elif [ -f ~/.claude/skills/aliyun-ask/scripts/query_alb_acls.sh ]; then SCRIPT_DIR="$HOME/.claude/skills/aliyun-ask/scripts" elif [ -f .claude/skills/aliyun-ask/scripts/query_alb_acls.sh ]; then SCRIPT_DIR=".claude/skills/aliyun-ask/scripts" elif [ -f "./scripts/query_alb_acls.sh" ]; then SCRIPT_DIR="./scripts" else echo "错误: 找不到脚本文件,请检查 aliyun-ask 技能是否正确安装" exit 1 fi echo "使用脚本目录: $SCRIPT_DIR"
阶段 2: 资源发现
- 查询主资源列表
- 获取基础数据
- 保存到临时文件
阶段 3: 关联查询
- 根据依赖关系查询关联资源
- 使用 jq 处理数据流转
- 合并关联数据
阶段 4: 数据处理
- 应用过滤条件
- 转换数据格式
- 统计聚合
阶段 5: 报告生成
- 汇总所有结果
- 应用诊断规则(如适用)
- 生成结构化报告
执行示例:
# 阶段 1: 环境准备
aliyun help && aliyun configure list
# 阶段 2: 资源发现
aliyun ecs DescribeInstances --VpcId vpc-xxx > ecs_list.json
# 阶段 3: 关联查询
for instance_id in $(jq -r '.[].InstanceId' ecs_list.json); do
aliyun ecs DescribeDisks --InstanceId $instance_id
done > disks_list.json
# 阶段 4: 数据处理
jq -s '{ecs: .[0], disks: .[1]}' ecs_list.json disks_list.json > result.json
# 阶段 5: 报告生成
jq '.' result.json钉钉只读环境复杂查询示例:
# 阶段 1: 环境准备
aliyun help && aliyun --profile dingtalk-readonly configure list
# 阶段 2: 资源发现
aliyun --profile dingtalk-readonly ecs DescribeInstances \
--VpcId vpc-xxx \
--RegionId cn-zhangjiakou > ecs_list.json
# 阶段 3: 关联查询
for instance_id in $(jq -r '.[].InstanceId' ecs_list.json); do
aliyun --profile dingtalk-readonly ecs DescribeDisks \
--InstanceId $instance_id \
--RegionId cn-zhangjiakou
done > disks_list.jsonStep 5: 返回结果
简单需求结果格式
## 查询结果
**查询类型**: SIMPLE_QUERY
**状态**: ✅ 成功
**耗时**: 0.5s
### 查询数据
| 实例ID | 名称 | 状态 | 规格 |
|--------|------|------|------|
| i-xxx | web-01 | Running | ecs.g6.large |
### 关键信息
- **实例ID**: i-xxx
- **实例名称**: web-01
- **状态**: Running(运行中)
- **规格**: ecs.g6.large (2核8G)
- **公网IP**: 47.95.123.45复杂需求结果格式
## 查询报告
**任务类型**: ASSOCIATION_QUERY + COMPOUND_QUERY
**状态**: ✅ 成功
**总耗时**: 3.2s
### 执行摘要
- **查询地域**: cn-beijing
- **发现资源**: 15个ECS实例, 3个RDS实例
- **关联关系**: 已建立
### 详细结果
#### 1. ECS实例列表
| 实例ID | 名称 | 状态 | 规格 | VPC |
|--------|------|------|------|-----|
| i-001 | web-01 | Running | ecs.g6.large | vpc-xxx |
| i-002 | web-02 | Running | ecs.g6.large | vpc-xxx |
#### 2. RDS实例列表
| 实例ID | 名称 | 状态 | 引擎 | VPC |
|--------|------|------|------|-----|
| rm-001 | db-master | Running | MySQL | vpc-xxx |
#### 3. 资源关联关系
VPC (vpc-xxx) ├── ECS实例 │ ├── i-001 (web-01) → RDS (rm-001) │ └── i-002 (web-02) → RDS (rm-001) └── RDS实例 └── rm-001 (db-master)
### 诊断结论
- ✅ 所有资源状态正常
- ✅ 网络连通性正常
- ⚠️ 建议:ECS实例 i-002 CPU使用率较高(85%)Step 6: 结果确认
询问用户是否已按需求实现查询结果,请“确认”已完成任务并结束流程?
结果保存功能
如果用户需要保存结果,在项目目录下的 aliyun_memos/<日期>/ 目录下生成 aliyun_<查询产品>_output_<时分>.md 文件(例如:aliyun_slb_acl_output_1430.md),包含:
- 原始查询需求
- 执行的任务清单
- 查询结果汇总
目录处理:如果 aliyun_memos/<日期> 目录不存在,使用 Bash tool 创建该目录。
历史对比功能
当用户明确提出"对比"需求时:
- 使用 Glob tool 查找
aliyun_memos目录下所有的aliyun_*_output_*.md文件 - 读取历史查询结果文件
- 将当前查询结果与历史结果进行差异对比
- 输出对比结果,重点标注变化部分(如新增/删除的资源、状态变化、数值变化等)
继续询问直到用户确认任务完成。
Step 7: 结束流程与自动保存
当用户“确认”已完成任务并结束整个流程时:
- 自动总结当前会话中的所有查询结果
- 在
aliyun_memos/<日期>/目录下生成<日期>/aliyun_output_<时分>.md目录与文件 - 文件内容包含:
- 会话时间戳
- 原始查询需求
- 执行的任务清单
- 完整的查询结果汇总
- 关键发现与结论(如有)
注意:此自动保存操作仅在用户明确确认任务完成时执行,避免在中间执行过程中产生冗余文件。
执行过程临时文件保存
执行过程中查询临时文件或生成的临时执行脚本文件将保存在 aliyun_memos/tmp/ 目录下。
重要:临时文件需要保存,不要自动清理和删除。
错误处理
执行错误时:
- 捕获错误信息
- 分析错误类型(认证、参数、权限、限流)
- 提供解决方案
- 建议重试或调整参数
关联查询特别注意事项
ALB 与 ACL 关联查询特别注意事项
当查询 ALB 监听器的 ACL 关联关系时,必须使用 ListAclRelations API,不能依赖监听器对象属性:
- 监听器对象返回的
AclId字段可能为空或不可靠 - 正确的查询命令格式:
aliyun [--profile <profile_name>] alb ListAclRelations --AclIds.1 'acl-xxxx' --RegionId <region> --force - 支持批量查询:
aliyun [--profile <profile_name>] alb ListAclRelations --AclIds.1 'acl-1' --AclIds.2 'acl-2' --RegionId <region> --force
对比说明:SLB 的 ACL 关联信息存储在监听器属性中,可以直接通过 DescribeLoadBalancer*ListenerAttribute 查询获取,与 ALB 不同。
SLB 与 ACL 关联查询特别注意事项
当查询 SLB 监听器的 ACL 关联关系时,应使用 DescribeLoadBalancerListeners API:
- 监听器对象中的
AclIds属性(数组)包含关联的 ACL 实例 ID 列表 - 同时包含
AclStatus(on/off)和AclType(white/black)属性 - 正确的查询命令格式:
- 获取监听器列表:
aliyun [--profile <profile_name>] slb DescribeLoadBalancerListeners --LoadBalancerId lb-xxx --RegionId <region> - 提取 AclIds:
| jq '.Listeners.Listener[] | select(.ListenerPort == 80) | .AclIds' - 查询 ACL 详情:
aliyun [--profile <profile_name>] slb DescribeAccessControlListAttribute --AclId acl-xxx --RegionId <region>
- 获取监听器列表:
与 ALB 的对比:
- SLB:ACL 关联信息直接在监听器对象的
AclIds数组字段中 - ALB:必须调用
ListAclRelationsAPI 才能获取真实的关联关系
预制脚本优化
为提升查询效率和准确性,技能内置了优化的预制脚本,优先使用脚本执行查询。
脚本路径说明
重要: 脚本文件位于技能安装目录中,使用前需要设置
SCRIPT_DIR环境变量。 详细的环境准备步骤见"阶段 1: 环境准备"中的"确定脚本文件路径"部分。
可用脚本
| 脚本名称 | 服务 | 功能 | 单资源查询 | 批量查询支持 | 复杂度 |
| batch_query_alb_acls.sh | ALB | 批量查询监听器ACL配置 | ✅ 支持 | ✅ 原生支持 | L2 → L3 |
| batch_query_slb_acls.sh | SLB | 批量查询监听器ACL配置 | ✅ 支持 | ✅ 原生支持 | L2 → L3 |
| batch_query_slb_eip.sh | SLB | 批量查询EIP关联情况<br>批量查询SLB是否开放外网 | ✅ 支持 | ✅ 原生支持 | L2 → L3 |
| query_alb_acls.sh | ALB | 查询监听器ACL配置 | ✅ 支持 | - | L2 → L3 |
| query_slb_acls.sh | SLB | 查询监听器ACL配置 | ✅ 支持 | - | L2 → L3 |
说明:
- 单资源查询脚本(query_*): 设计为查询单个资源,但可通过遍历调用实现批量查询
- 批量查询脚本(batch_query_*): 原生支持批量查询,一次调用处理多个资源 ID
- 优先使用: 批量查询多个资源时,优先使用
batch_query_*脚本,效率更高 - Profile 支持: 脚本通过
ALIYUN_PROFILE环境变量指定 Aliyun CLI profile;钉钉环境固定使用ALIYUN_PROFILE=dingtalk-readonly - 地域默认值: 脚本未传 RegionId 时,默认环境使用
cn-beijing,ALIYUN_PROFILE=dingtalk-readonly使用cn-zhangjiakou
脚本优先策略
当查询场景匹配脚本功能时,优先使用预制脚本而非标准 CLI 命令。
脚本优势
- 缓存优化: 减少重复API调用(当天缓存有效)
- 错误处理: 统一的错误处理和重试机制
- 格式化输出: 标准化JSON输出,便于后续处理
- 参数验证: 自动验证参数格式(如 ALB ID 格式)
- 批量处理: 自动分批查询,避免 API 限流
脚本匹配规则
自动匹配场景:
- 精确匹配: 服务+资源类型+关系类型完全匹配
- 模糊匹配: 服务+关键词(如 "acl", "安全组")
- 场景匹配: 业务场景+资源类型
示例匹配:
用户查询: "查询ALB alb-xxx的ACL配置"
↓ 匹配到
脚本: query_alb_acls.sh
↓ 优先使用脚本执行脚本使用示例
批量查询脚本使用示例
ALB ACL 批量查询:
# 查询多个指定的 ALB 实例
$SCRIPT_DIR/batch_query_alb_acls.sh "alb-wz9fjlqmz0783y4vglx13,alb-abc123def456" cn-beijing
# 查询钉钉旗舰版环境(默认 RegionId: cn-zhangjiakou)
ALIYUN_PROFILE=dingtalk-readonly $SCRIPT_DIR/batch_query_alb_acls.sh "alb-wz9fjlqmz0783y4vglx13,alb-abc123def456"
# 输出示例
[1/2] 查询 ALB: alb-wz9fjlqmz0783y4vglx13
名称: prod-alb-01
类型: Internet
监听器: 2 个
✓ 查询完成
[2/2] 查询 ALB: alb-abc123def456
名称: prod-alb-02
类型: Intranet
监听器: 1 个
✓ 查询完成
========================================
查询完成
========================================
输出文件: ./aliyun_memos/tmp/results_batch_alb_acls_20250129_1430.json
📊 统计信息:
ALB 实例总数: 2
查询成功: 2
查询失败: 0
监听配置总数: 3
配置了 ACL 的监听器: 2SLB ACL 批量查询:
# 查询多个指定的 SLB 实例
$SCRIPT_DIR/batch_query_slb_acls.sh "lb-wz9fjlqmz0783y4vglx13,lb-abc123def456" cn-beijing
# 查询钉钉旗舰版环境(默认 RegionId: cn-zhangjiakou)
ALIYUN_PROFILE=dingtalk-readonly $SCRIPT_DIR/batch_query_slb_acls.sh "lb-wz9fjlqmz0783y4vglx13,lb-abc123def456"
# 输出示例
[1/2] 查询 SLB: lb-wz9fjlqmz0783y4vglx13
名称: web-slb-01
监听器: 3 个
✓ 查询完成
[2/2] 查询 SLB: lb-abc123def456
名称: api-slb-02
监听器: 2 个
✓ 查询完成
========================================
查询完成
========================================
输出文件: ./aliyun_memos/tmp/results_batch_slb_acls_20250129_1430.json
📊 统计信息:
SLB 实例总数: 2
查询成功: 2
查询失败: 0
监听配置总数: 5
配置了 ACL 的监听器: 3SLB EIP 批量查询:
# 查询多个指定的 SLB 实例的 EIP 关联情况
$SCRIPT_DIR/batch_query_slb_eip.sh "lb-wz9fjlqmz0783y4vglx13,lb-abc123def456" cn-beijing
# 查询钉钉旗舰版环境(默认 RegionId: cn-zhangjiakou)
ALIYUN_PROFILE=dingtalk-readonly $SCRIPT_DIR/batch_query_slb_eip.sh "lb-wz9fjlqmz0783y4vglx13,lb-abc123def456"
# 输出示例
[1/2] 查询 SLB: lb-wz9fjlqmz0783y4vglx13
名称: web-slb-01
地址类型: internet
✓ 已关联 EIP
EIP ID: eip-xxx
EIP 地址: 47.xxx.xxx.xxx
✓ 查询完成
[2/2] 查询 SLB: lb-abc123def456
名称: api-slb-02
地址类型: intranet
✓ 内网实例
✓ 查询完成
========================================
查询完成
========================================
输出文件: ./aliyun_memos/tmp/results_batch_slb_eip_20250129_1430.json
📊 统计信息:
SLB 实例总数: 2
查询成功: 2
查询失败: 0
已关联 EIP 的 SLB: 1
外网可访问的 SLB: 1批量查询脚本优势:
- 效率提升: 一次调用查询多个实例,减少重复操作
- 统一输出: 所有结果汇总到一个 JSON 文件
- 错误隔离: 单个实例查询失败不影响其他实例
- 统计报告: 自动生成查询统计信息
- 临时文件管理: 结果自动保存到
aliyun_memos/tmp/目录
单个 ALB ACL 查询:
# 使用脚本
$SCRIPT_DIR/query_alb_acls.sh alb-wz9fjlqmz0783y4vglx13 cn-beijing
# 查询钉钉旗舰版环境(默认 RegionId: cn-zhangjiakou)
ALIYUN_PROFILE=dingtalk-readonly $SCRIPT_DIR/query_alb_acls.sh alb-wz9fjlqmz0783y4vglx13
# 输出格式
[
{
"LoadBalancerId": "alb-xxxxx",
"LoadBalancerName": "my-alb",
"ListenerId": "lsn-xxxxx",
"ListenerPort": 443,
"Protocol": "HTTPS",
"AclStatus": "on",
"AclType": "white",
"AclIds": ["acl-xxxxx"]
}
]单个 SLB ACL 查询:
# 使用脚本
$SCRIPT_DIR/query_slb_acls.sh lb-wz9fjlqmz0783y4vglx13 cn-beijing
# 查询钉钉旗舰版环境(默认 RegionId: cn-zhangjiakou)
ALIYUN_PROFILE=dingtalk-readonly $SCRIPT_DIR/query_slb_acls.sh lb-wz9fjlqmz0783y4vglx13
# 输出格式
[
{
"LoadBalancerId": "lb-xxxxx",
"LoadBalancerName": "my-slb",
"ListenerPort": 80,
"Protocol": "HTTP",
"AclStatus": "on",
"AclType": "white",
"AclIds": ["acl-xxxxx"]
}
]复杂需求中的脚本使用
即使是 L3-L5 的复杂需求,如果某个阶段的子任务有预制脚本支持,也应该优先使用脚本。
关键原则:
- 单资源查询子任务: 优先使用单资源查询脚本(
query_*) - 批量资源查询: 优先使用批量查询脚本(
batch_query_*),效率更高 - 脚本不可用: 回退到标准 CLI 命令
示例 1: 批量查询所有 ALB 的 ACL 配置
# 复杂需求:批量查询所有 ALB 的 ACL 配置
## 阶段 2: 资源发现
- [ ] 2.1 查询所有 ALB 实例
```bash
aliyun alb DescribeLoadBalancers --RegionId $REGION_ID \
| jq '.LoadBalancers.LoadBalancer[].LoadBalancerId' > alb_ids.txt
```
输出: 保存到 alb_ids.txt
## 阶段 3: 关联查询
- [ ] 3.1 使用批量查询脚本查询所有 ALB 的 ACL 配置
**推荐方式**: 使用批量查询脚本(一次调用处理所有实例)
```bash
# 将 ID 列表转换为逗号分隔的字符串
ALB_IDS=$(cat alb_ids.txt | tr '\n' ',' | sed 's/,$//')
# 使用批量查询脚本
$SCRIPT_DIR/batch_query_alb_acls.sh "$ALB_IDS" $REGION_ID
# 输出文件: ./aliyun_memos/tmp/results_batch_alb_acls_<日期_时间>.json
```
**替代方式**: 遍历调用单资源查询脚本
```bash
# 创建结果文件
echo [] > all_alb_acls.json
# 遍历每个 ALB ID
while read alb_id; do
echo "查询 ALB: $alb_id"
result=$($SCRIPT_DIR/query_alb_acls.sh $alb_id $REGION_ID)
jq --argjson new "$result" '. += $new' all_alb_acls.json > tmp.json && mv tmp.json all_alb_acls.json
sleep 0.1
done < alb_ids.txt
```
示例 2: 批量查询所有 SLB 的 ACL 配置
# 复杂需求:批量查询所有 SLB 的 ACL 配置
## 阶段 3: 关联查询
- [ ] 3.1 使用批量查询脚本查询所有 SLB 的 ACL 配置
**推荐方式**: 使用批量查询脚本
```bash
# 查询所有 SLB
aliyun slb DescribeLoadBalancers --RegionId $REGION_ID \
| jq '.LoadBalancers.LoadBalancer[].LoadBalancerId' > slb_ids.txt
# 将 ID 列表转换为逗号分隔的字符串
SLB_IDS=$(cat slb_ids.txt | tr '\n' ',' | sed 's/,$//')
# 使用批量查询脚本
$SCRIPT_DIR/batch_query_slb_acls.sh "$SLB_IDS" $REGION_ID
# 输出文件: ./aliyun_memos/tmp/results_batch_slb_acls_<日期_时间>.json
```示例 3: 复杂诊断场景中的脚本使用
# 复杂需求:诊断所有负载均衡器的安全配置
## 阶段 1: 环境准备
- [ ] 1.1 验证 Aliyun CLI 和批量查询脚本可用性
```bash
# 验证批量查询脚本可执行
chmod +x $SCRIPT_DIR/batch_query_alb_acls.sh
chmod +x $SCRIPT_DIR/batch_query_slb_acls.sh
# 测试脚本功能
$SCRIPT_DIR/batch_query_alb_acls.sh --help
```
## 阶段 2: 资源发现
- [ ] 2.1 查询所有负载均衡器(ALB + SLB)
```bash
# 查询 ALB
aliyun alb DescribeLoadBalancers --RegionId $REGION_ID \
| jq '.LoadBalancers.LoadBalancer[].LoadBalancerId' > alb_ids.txt
# 查询 SLB
aliyun slb DescribeLoadBalancers --RegionId $REGION_ID \
| jq '.LoadBalancers.LoadBalancer[].LoadBalancerId' > slb_ids.txt
```
## 阶段 3: 关联查询(使用批量查询脚本)
- [ ] 3.1 批量查询 ALB ACL 配置
```bash
# 将 ID 列表转换为逗号分隔的字符串
ALB_IDS=$(cat alb_ids.txt | tr '\n' ',' | sed 's/,$//')
# 使用批量查询脚本
$SCRIPT_DIR/batch_query_alb_acls.sh "$ALB_IDS" $REGION_ID
```
- [ ] 3.2 批量查询 SLB ACL 配置
```bash
# 将 ID 列表转换为逗号分隔的字符串
SLB_IDS=$(cat slb_ids.txt | tr '\n' ',' | sed 's/,$//')
# 使用批量查询脚本
$SCRIPT_DIR/batch_query_slb_acls.sh "$SLB_IDS" $REGION_ID
```
- [ ] 3.3 分析诊断结果(读取批量查询生成的 JSON 文件)
```bash
# 读取批量查询结果文件(从 aliyun_memos/tmp/ 目录)
LATEST_ALB_FILE=$(ls -t ./aliyun_memos/tmp/results_batch_alb_acls_*.json 2>/dev/null | head -1)
LATEST_SLB_FILE=$(ls -t ./aliyun_memos/tmp/results_batch_slb_acls_*.json 2>/dev/null | head -1)
# 分析安全风险 - 未配置 ACL 的监听器
echo "=== 未配置 ACL 的 ALB 监听器 ==="
jq '[.[] | select(.AclStatus != "on") | {LoadBalancerId, ListenerPort, Protocol}]' "$LATEST_ALB_FILE"
echo "=== 未配置 ACL 的 SLB 监听器 ==="
jq '[.[] | select(.AclStatus != "on") | {LoadBalancerId, ListenerPort, Protocol}]' "$LATEST_SLB_FILE"
# 统计信息
echo "=== 统计信息 ==="
echo "ALB 监听器总数: $(jq 'length' "$LATEST_ALB_FILE")"
echo "SLB 监听器总数: $(jq 'length' "$LATEST_SLB_FILE")"
echo "ALB 未配置 ACL: $(jq '[.[] | select(.AclStatus != "on")] | length' "$LATEST_ALB_FILE")"
echo "SLB 未配置 ACL: $(jq '[.[] | select(.AclStatus != "on")] | length' "$LATEST_SLB_FILE")"
```
## 阶段 4: 诊断结论
- [ ] 4.1 生成安全配置报告
- [ ] 4.2 标记未配置 ACL 的负载均衡器
- [ ] 4.3 提供修复建议批量查询最佳实践
方式一:使用批量查询脚本(推荐)
适用场景: 查询多个指定的 ALB/SLB 实例
# 1. 查询资源列表(可选)
aliyun alb DescribeLoadBalancers --RegionId $REGION_ID \
| jq '.LoadBalancers.LoadBalancer[].LoadBalancerId' > alb_ids.txt
# 2. 将 ID 列表转换为逗号分隔的字符串
ALB_IDS=$(cat alb_ids.txt | tr '\n' ',' | sed 's/,$//')
# 3. 使用批量查询脚本(推荐)
$SCRIPT_DIR/batch_query_alb_acls.sh "$ALB_IDS" $REGION_ID
# 输出文件: ./aliyun_memos/tmp/results_batch_alb_acls_<日期_时间>.json优势:
- ✅ 一次调用处理多个实例
- ✅ 自动缓存 ACL 关联关系(ALB)
- ✅ 统一的 JSON 输出格式
- ✅ 详细的统计报告
- ✅ 结果自动保存到
aliyun_memos/tmp/
方式二:遍历调用单资源查询脚本
适用场景: 需要对每个资源单独处理的场景
# 1. 查询资源列表
aliyun <service> Describe<Resource>s --RegionId $REGION_ID \
| jq '.<Resource>s.<Resource>[].<ResourceId>' > resource_ids.txt
# 2. 遍历调用单资源查询脚本
while read resource_id; do
$SCRIPT_DIR/query_<service>_<target>.sh $resource_id $REGION_ID
done < resource_ids.txt > all_results.json方式选择建议
| 查询场景 | 推荐方式 | 说明 |
| 查询多个指定实例 | 方式一 | 使用 batch_query_* 脚本,效率最高 |
| 查询所有实例 | 方式一 | 先获取 ID 列表,再使用批量脚本 |
| 需要单独处理每个资源 | 方式二 | 遍历调用单资源查询脚本 |
| 需要实时处理结果 | 方式二 | 逐个处理,便于控制 |
支持的阿里云服务
- 计算: ECS, FC, ACK, ESS(弹性伸缩), ECD(无影云桌面)
- 数据库: RDS, Redis, MongoDB, PolarDB
- 网络: VPC, SLB, ALB, EIP, CEN(云企业网), VPN, NAT(NAT网关), PrivateZone(内网DNS), DNS(云解析)
- 存储: OSS, NAS
- 消息: RocketMQ, Kafka, SMS(短信服务)
- 监控: SLS, CMS
- 安全: WAF, DDoS, SAS(云安全中心), SSL(证书服务)
- 容器: CR(容器镜像服务)
- 微服务: MSE(微服务引擎)
- 加速: CDN, DCDN(全站加速)
- 搜索: Elasticsearch
完整服务 API 映射见 API操作映射库.md。
常见查询场景
| 场景描述 | 主意图 | 执行方式 | 脚本支持 |
| 查看所有ECS实例 | SIMPLE_QUERY | 直接执行并返回表格 | - |
| 查询单个ALB的ACL配置 | ASSOCIATION_QUERY | 使用脚本 | ✅ query_alb_acls.sh |
| 查询单个SLB的ACL配置 | ASSOCIATION_QUERY | 使用脚本 | ✅ query_slb_acls.sh |
| 批量查询多个ALB的ACL配置 | COMPOUND_QUERY | 使用批量脚本 | ✅ batch_query_alb_acls.sh |
| 批量查询多个SLB的ACL配置 | COMPOUND_QUERY | 使用批量脚本 | ✅ batch_query_slb_acls.sh |
批量查询多个SLB的EIP关联情况<br>或批量查询多个SLB是否有开放外网 | COMPOUND_QUERY | 使用批量脚本 | ✅ batch_query_slb_eip.sh |
| 检查安全组规则 | DIAGNOSTIC_QUERY | 分阶段执行并返回诊断报告 | - |
| 查询VPC关联资源 | ASSOCIATION_QUERY | 分阶段执行并返回拓扑 | - |
说明:
- ✅ 标记表示有预制脚本支持,优先使用脚本执行
- 脚本执行效率更高(缓存优化、错误处理完善)
- 批量查询: 查询多个资源时,使用
batch_query_*脚本更高效
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

