Install
openclaw skills install @thcjp/azure-cloud-architectopenclaw skills install @thcjp/azure-cloud-architect核心功能: 本技能提供时使用、、工作流优化时使用等能力。
核心功能: 本技能提供中文交互等能力。
核心功能: 本技能提供、多订阅多租户管理场景等能力。
使用本地 Azure CLI 回答关于 Azure 资源的问题。默认只读查询,仅在用户明确要求变更并确认后执行写/破坏性操作.
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | Azure云架构师处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| Azure云架构师成本分析 | 不支持 | 支持 |
| 深度漏洞扫描与CVE关联 | 不支持 | 支持 |
| 安全基线合规审计 | 不支持 | 支持 |
| 批量资产风险评分 | 不支持 | 支持 |
| 威胁情报实时订阅与告警 | 不支持 | 支持 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
需要配置对应API Key,详见上文环境配置章节
API Key配置方式:
export API_KEY="${API_KEY:?请设置环境变量}"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.
自动列出所有可访问订阅,智能检测默认订阅,支持按名称或 ID 切换,避免在错误订阅执行操作.
L0 只读直接执行、L1 预演展示计划、L2 确认写、L3 破坏性详细影响分析、L4 敏感操作双重确认,保障生产环境安全.
RBAC 角色审计(检测 Owner 过度授权)、存储安全检查(公共访问/HTTPS/TLS)、NSG 规则检查(0.0.0.0/0 入站)、Key Vault 访问审计.
按资源组/服务维度查询 Cost Management,识别空闲资源(停止的 VM/未挂载磁盘/未使用公网 IP)以优化成本.
提供跨订阅遍历模板,统一执行 VM 列举、NSG 检查等操作,避免遗漏订阅.
| 场景 | 典型输入 | 输出内容 | 涉及能力 |
|---|---|---|---|
| 资源盘点 | "列出当前订阅的虚拟机" | VM 名称、资源组、状态表格 | 多订阅导航 |
| 安全审计 | "审计谁有 Owner 角色" | RBAC 角色分配列表+建议 | 安全审计 |
| 成本分析 | "查询本月各资源组成本" | Cost Management 分组数据 | 成本分析 |
| 合规检查 | "检查 NSG 是否开放 0.0.0.0/0" | 入站规则风险报告 | 安全审计 |
| 多订阅管理 | "遍历所有订阅列出 VM" | 跨订阅 VM 汇总表 | 跨订阅批量 |
不适用于: Azure Portal GUI 操作指导(本 skill 基于 CLI),非 Azure 云平台(AWS/GCP/阿里云),需要 Azure SDK 编程开发场景.
az account show
如未登录,运行 az login --use-device-code(SSH 环境适用),终端会显示码和 URL,在浏览器中完成登录.
# 列出所有可访问的订阅
az account list --output table
# ...
# 设置活跃订阅(按名称或ID)
az account set --subscription "Production"
订阅选择规则: 用户明确指定 → 使用指定;未指定但有默认 → 使用默认;无默认且多个 → 询问用户;仅一个 → 直接使用.
根据需求执行 list/show/get 类命令,结果以表格形式展示便于阅读.
--dry-run 或 --what-if 预演确认后执行写/破坏性操作,执行后用只读命令验证结果.
场景: 运维人员需要快速检查当前订阅里有哪些虚拟机及运行状态
az vm list --query '[].{Name:name,ResourceGroup:resourceGroup,State:powerState}' -d --output table
预期输出:
Name ResourceGroup State
------------- --------------- --------
prod-web-01 prod-rg VM running
prod-web-02 prod-rg VM running
dev-test-01 dev-rg VM stopped
分析: dev-test-01 处于 VM stopped 状态,如非计划停机可能造成资源浪费。-d 参数用于显示实例视图状态,便于确认电源状态.
场景: 安全团队需要审计当前订阅里谁有 Owner 角色,检查是否有过度授权
az role assignment list --role "Owner" \
--query '[].{Assignee:principalName,Scope:scope}' --output table
预期输出:
Assignee Scope
--------------------- ------------------------------------
admin@company.com /subscriptions/未指定-未指定-未指定
deploy-spn@company.com /subscriptions/未指定-未指定-未指定/resourceGroups/prod-rg
审计结论: 发现 2 个 Owner 分配。deploy-spn@company.com 为部署服务主体,其作用域限定在 prod-rg,但 Owner 权限过高。建议降级为 Contributor,遵循最小权限原则。生产订阅的 Owner 角色应仅授予少数管理员.
场景: 财务团队需要了解本月各资源组的成本分布以优化支出
az costmanagement query --type ActualCost \
--timeframe MonthToDate \
--dataset-grouping name=ResourceGroupName type=Dimension \
--dataset-aggregation totalCost=name=Cost function=Sum
预期输出:
ResourceGroupName Cost Currency
------------------- ------ --------
prod-rg 4523.67 USD
dev-rg 892.15 USD
shared-rg 2156.43 USD
分析: prod-rg 成本占比最高,建议进一步检查是否有空闲资源。可结合 az vm list -d 查找 VM stopped 的实例、az disk list --query '[?diskState==Attached]' 查找未挂载磁盘,识别可释放的空闲资源以降低成本.
| 错误场景 | 错误信息 | 原因分析 | 处理方式 |
|---|---|---|---|
| 未登录 | Please run az login | 会话过期或未登录 | 运行 az login --use-device-code 重新登录 |
| 订阅未找到 | Subscription not found | 订阅 ID 错误或无权限 | 用 az account list 确认可访问的订阅列表 |
| 权限不足 | Access denied / 403 | RBAC 角色权限不足 | 检查 az account show 确认身份,只读至少需 Reader 角色 |
| 未选择订阅 | No subscription selected | 未设置活跃订阅 | 运行 az account set --subscription <名称或ID> |
| 命令未找到 | command not found | Azure CLI 版本过旧 | 运行 az version,升级到最新版 az upgrade |
| 操作超时 | Operation timeout | 网络或服务问题 | 确认 Azure 服务状态 |
| 密钥泄露风险 | 输出含密钥/令牌 | 命令输出意外包含敏感信息 | 立即停止,绝不在聊天/日志中输出密钥值,必要时轮换密钥 |
| 多订阅遗漏 | 部分订阅未检查 | 未遍历所有订阅 | 使用跨订阅批量操作模板遍历所有订阅 |
| 成本查询为空 | Cost Management 返回空 | 未配置或订阅类型不支持 | 确认 CSP 等订阅类型是否支持 Cost Management |
# 检查 Owner 角色分配(高风险)
az role assignment list --role "Owner" --query '[].{Assignee:principalName,Scope:scope}' --output table
# ...
# 检查 Contributor 角色分配(中风险,作用域过大时需关注)
az role assignment list --role "Contributor" --query '[].{Assignee:principalName,Scope:scope}' --output table
建议将非管理员的 Owner 角色降级为 Contributor,部署服务主体限定作用域。Owner 角色应仅授予少数管理员,生产订阅控制在 2-3 人以内.
# 列出所有 NSG
az network nsg list --query '[].{Name:name,ResourceGroup:resourceGroup}' --output table
# ...
# 检查特定 NSG 的入站规则
az network nsg rule list --nsg-name NSG_NAME --resource-group RG_NAME \
--query "[?sourceAddressPrefix=='*' && direction=='Inbound'].{Name:name,Port:destinationPortRange,Priority:priority}" --output table
重点排查 22(SSH)、3389(RDP)、3306(MySQL)、1433(SQL Server)等敏感端口对公网开放的情况。建议使用 Just-In-Time 访问或堡垒机替代直接开放管理端口.
# 检查存储账户公共访问设置
az storage account list --query '[].{Name:name,AllowBlobPublicAccess:allowBlobPublicAccess,HttpsOnly:enableHttpsTrafficOnly}' --output table
AllowBlobPublicAccess 为 true 的存储账户存在数据泄露风险,建议关闭公共访问。HttpsOnly 为 false 的账户应立即启用 HTTPS 强制传输.
# 检查 Key Vault 访问策略
az keyvault list --query '[].{Name:name,ResourceGroup:resourceGroup}' --output table
审计 Key Vault 的访问策略,确认是否使用 RBAC 权限模型替代传统访问策略,限制机密读取范围.
az vm list -d 识别 VM stopped 状态的实例,评估是否可释放az disk list --query '[?diskState==Unattached]'az network public-ip list --query '[?ipConfiguration==null]'A: 使用 az account set --subscription "订阅名" 或 az account set --subscription "订阅ID"。结果为订阅范围时明确说明使用的订阅,避免在错误订阅执行操作.
A: 运行 az login --use-device-code,终端会显示一个码和 URL。在浏览器中打开 URL,输入码完成登录。适合无法打开浏览器的 SSH 环境.
A: 检查当前身份 az account show,确认关联的 RBAC 角色是否包含所需权限。只读操作至少需要 Reader 角色,写操作需要 Contributor,角色管理需要 User Access Administrator.
A: 1) 先用 --what-if 或 --dry-run 预演;2) 列出精确影响范围;3) 等待用户显式确认;4) 执行后验证结果。绝不在未确认时执行破坏性操作,L3/L4 级操作需双重确认.
A: 使用 az login --workspace <workspace-id> 登录特定租户。使用 az account list --query '[].workspaceId' 查看可访问的租户。跨租户操作时需重新登录目标租户.
A: 确认订阅类型。CSP(云解决方案提供商)等部分订阅类型可能不支持 Cost Management API,返回空结果。检查是否已在 Azure Portal 启用 Cost Management 数据,数据通常有 8-12 小时延迟.
A: 结合多条命令识别:用 az vm list -d 查找 VM stopped 实例,用 az disk list --query '[?diskState==Unattached]' 查找未挂载磁盘,用 az network public-ip list --query '[?ipConfiguration==null]' 查找未关联的公网 IP。释放这些空闲资源可显著降低月度成本.
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 无法登录Azure CLI | 网络连接问题或Azure CLI未安装 | 检查网络连接,确认Azure CLI已安装并正确配置 | 重启Azure CLI,重新配置网络或安装Azure CLI |
| 订阅列表为空 | 无权限访问或订阅配置错误 | 使用az account list检查权限,确认订阅ID配置正确 | 更新订阅权限,重新配置订阅ID |
| 成本分析数据为空 | Cost Management未启用或订阅类型不支持 | 检查Azure Portal中Cost Management设置,确认订阅类型支持Cost Management | 启用Cost Management,使用支持Cost Management的订阅类型 |
| 跨订阅操作失败 | 订阅权限不足或订阅ID错误 | 使用az account list检查权限,确认订阅ID配置正确 | 更新订阅权限,重新配置订阅ID |
| RBAC角色审计未返回预期结果 | 角色分配信息错误或查询条件不正确 | 检查角色分配信息和查询条件,确认无误 | 修正查询条件,重新执行审计 |
| 效率提升量化分析 | 差异化对比 |
|---|---|
| 效率提升量化分析 | 差异化对比 |
| 通过自动化RBAC角色审计,每月节省3小时审计时间。 | 与手动审计相比,自动化审计减少了错误和遗漏的可能性。 |
| 成本分析自动化流程每月节省2小时分析时间。 | 自动化流程提供了更准确和实时的成本数据。 |
| 跨订阅操作自动化节省5小时手动操作时间。 | 自动化流程提高了操作的准确性和一致性。 |
| 通过多订阅导航器,用户节省1小时寻找资源时间。 | 多订阅导航器简化了资源管理过程。 |
| 安全审计剧本自动化减少1小时手动检查时间。 | 自动化剧本确保了安全检查的全面性和一致性。 |
| 操作场景 | 手动耗时 | 自动化耗时 | 效率提升 |
|---|---|---|---|
| 文件解析与提取 | 5-10分钟/个 | <5秒/个 | 60-120x |
| 批量文件处理(100个) | 8-16小时 | <5分钟 | 96-192x |
| API调用与响应解析 | 2-3分钟/次 | <1秒/次 | 120-180x |
| 多接口数据聚合 | 15-30分钟 | <10秒 | 90-180x |
| 命令执行与结果收集 | 3-5分钟/次 | <2秒/次 | 90-150x |
| 重复任务批量执行 | 因任务而异 | 线性缩减 | 5-50x |
| 错误排查与修复 | 10-30分钟 | <30秒 | 20-60x |
| 对比维度 | Azure云架构师 | 传统手动方式 | 通用脚本工具 |
|---|---|---|---|
| 自动化程度 | 全流程自动 | 完全手动 | 部分自动 |
| 错误处理 | 内置错误恢复 | 依赖人工经验 | 基本try-catch |
| 可复用性 | 参数化配置 | 一次性脚本 | 模板化 |
| 安全合规 | 内置安全检查 | 无安全保障 | 无安全保障 |
| 适用场景 | 基于Azure CLI的多订阅导航、RBAC角色审计、成本分析、合规检查、跨订阅 | 通用场景 | 通用场景 |
A1: 基于Azure CLI的多订阅导航、RBAC角色审计、成本分析、合规检查、跨订阅批量操作。基于 Azure CLI 的智能云基础设施管理助手。提供多订阅导航、R。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
针对Azure云架构师使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |