云架构可视化治理助手

作者:鹿Sir开发工具v1

通过腾讯云智能顾问(Smart Advisor)API 实现云架构的可视化管理与治理。管理云架构图目录与详情、生成架构评估结果与风险热力视图、查询风险评估项、生成控制台免密登录链接。当用户需要查看或管理腾讯云架构图、做架构评估、云上风险巡检、合规检查时触发。触发词:云架构、架构图、智能顾问、架构评估、风险评估、腾讯云。

下载量
325
点赞
80
价格
免费

技能文档

---
name: architecture-visualization-governance
title: 云架构可视化治理助手
category: 开发工具
description: 通过腾讯云智能顾问(Smart Advisor)API 实现云架构的可视化管理与治理。管理云架构图目录与详情、生成架构评估结果与风险热力视图、查询风险评估项、生成控制台免密登录链接。当用户需要查看或管理腾讯云架构图、做架构评估、云上风险巡检、合规检查时触发。触发词:云架构、架构图、智能顾问、架构评估、风险评估、腾讯云。
---


# 云架构可视化治理助手

核心能力:通过 **AK/SK 鉴权**调用腾讯云智能顾问(Tencent Cloud Smart Advisor)API,管理云架构图的目录与详情、获取架构评估结果,以及查询风险评估项。

---

## 技能工作流

### 步骤1:鉴权方式

使用腾讯云 API **AK/SK 签名认证**(TC3-HMAC-SHA256),通过环境变量配置密钥:

#### 必填环境变量

- `TENCENTCLOUD_SECRET_ID` — 腾讯云 SecretId(必填)
- `TENCENTCLOUD_SECRET_KEY` — 腾讯云 SecretKey(必填)

密钥获取地址:https://console.cloud.tencent.com/cam/capi

**环境变量必须永久写入 shell 配置文件**,确保新会话中仍然生效:

Linux / macOS(写入 `~/.bashrc` 或 `~/.zshrc`):
```bash
echo 'export TENCENTCLOUD_SECRET_ID="your-secret-id"' >> ~/.bashrc
echo 'export TENCENTCLOUD_SECRET_KEY="your-secret-key"' >> ~/.bashrc
source ~/.bashrc
```

Windows PowerShell(写入用户级环境变量):
```powershell
[Environment]::SetEnvironmentVariable("TENCENTCLOUD_SECRET_ID", "your-secret-id", "User")
[Environment]::SetEnvironmentVariable("TENCENTCLOUD_SECRET_KEY", "your-secret-key", "User")
```

#### 角色配置(免密登录需要)

为生成控制台免密登录链接,需要配置 CAM 角色。角色配置分为 **检测** 和 **创建** 两个独立步骤,角色创建属于 IAM 写入操作,**必须在用户明确同意后才能执行**。

##### 步骤一:环境检测(只读)

运行环境自检脚本,检测依赖、密钥、角色配置状态:

```bash
python3 {baseDir}/check_env.py
```

自检脚本 **仅做只读检测**,不会创建或修改任何资源。返回码含义:
- `0` = 环境就绪(密钥 + 角色全部正常)
- `1` = Python 版本不满足要求
- `2` = AK/SK 未配置或无效
- `3` = 角色未配置(需要执行步骤二)

##### 步骤二:角色创建(需用户同意)

当 `check_env.py` 返回码为 `3`(角色未配置)时,**必须**向用户展示角色创建方案并等待同意:

**向用户说明以下内容**:
1. 将创建 CAM 角色 `advisor`,仅用于免密登录控制台查看智能顾问信息
2. 将关联策略 `QcloudAdvisorFullAccess`(智能顾问只读访问权限,不影响其他云资源)
3. 信任策略仅允许当前账号扮演此角色
4. 用户可随时在 CAM 控制台删除此角色

**用户同意后**,执行角色创建脚本:

```bash
python3 {baseDir}/scripts/create_role.py
```

脚本输出 JSON 格式结果,`success: true` 表示创建成功并已保存配置。

**用户拒绝时**,提供手动配置方式(方式二、三、四)。

#### 方式二:配置向导(交互式选择已有角色)

运行配置向导,从已有角色中选择,或交互式创建新角色:

```bash
python3 {baseDir}/scripts/setup_role.py
```

#### 方式三:简化配置

只需提供角色名称,系统自动获取账号 UIN。将以下内容写入 shell 配置文件(如 `~/.bashrc` 或 `~/.zshrc`):

```bash
echo 'export TENCENTCLOUD_ROLE_NAME="advisor"' >> ~/.bashrc
source ~/.bashrc
```

系统会自动调用 API 获取您的账号 UIN,并拼接完整的 roleArn。

#### 方式四:完整配置(高级用户)

手动设置完整的角色 ARN,写入 shell 配置文件(如 `~/.bashrc` 或 `~/.zshrc`):

```bash
echo 'export TENCENTCLOUD_ROLE_ARN="qcs::cam::uin/100001234567:roleName/advisor"' >> ~/.bashrc
source ~/.bashrc
```

#### 可选环境变量

- `TENCENTCLOUD_TOKEN` — 临时密钥 Token(使用临时密钥时设置)
- `TENCENTCLOUD_ROLE_SESSION` — 角色会话名称(默认 `advisor-session`)
- `TENCENTCLOUD_STS_DURATION` — 临时凭证有效期秒数(默认 `3600`,即 1 小时;最大 `43200`,即 12 小时)

> **注意**:所有环境变量均需永久写入 shell 配置文件(如 `~/.bashrc`、`~/.zshrc`),`export` 仅对当前会话生效,新开会话会丢失。

#### 配置优先级

系统按以下优先级加载角色配置:

1. 环境变量 `TENCENTCLOUD_ROLE_ARN`(完整 ARN)
2. 配置文件 `~/.tencent-cloudq/config.json`
3. 环境变量 `TENCENTCLOUD_ROLE_NAME` + 自动获取账号 UIN

---

### 步骤2:前置检查(初始化工作流)

每次操作前必须先执行环境检测。初始化分为 **环境检测** 和 **角色创建** 两个阶段,角色创建属于 IAM 写入操作,必须在用户明确同意后才能执行。

#### 初始化工作流(必须严格按顺序执行)

**第一步**:运行环境检测**

```bash
python3 {baseDir}/check_env.py
```

脚本会依次执行以下检测:
1. 检查 Python 版本(需要 3.7+)
2. 检查 AK/SK 配置
3. 验证 AK/SK 有效性
4. 检查免密登录角色配置
5. 验证角色扮演

根据返回码判断状态:
- `0` = 环境就绪,可以正常使用所有功能
- `1` = Python 版本不满足要求 → 提示用户升级 Python
- `2` = AK/SK 未配置或无效 → 提示用户配置密钥
- `3` = 角色未配置 → 执行第二步

**第二步**:向用户展示角色创建方案**(仅当返回码为 3 时)

向用户说明即将执行的 IAM 操作,**等待用户明确同意**:

> 免密登录功能需要创建一个 CAM 角色,以下是创建方案:
> - **角色名称**:`advisor`
> - **关联策略**:`QcloudTAGFullAccess`(标签全读写权限)、`QcloudAdvisorFullAccess`(智能顾问全读写权限)
> - **信任策略**:仅允许当前账号扮演此角色
> - **用途**:仅用于生成控制台免密登录链接,不影响其他云资源
> - 您可随时在 [CAM 控制台](https://console.cloud.tencent.com/cam/role) 删除此角色
>
> 是否同意创建?

**第三步**:执行角色创建**(仅在用户同意后)

```bash
python3 {baseDir}/scripts/create_role.py
```

脚本输出 JSON 格式结果,`success: true` 表示创建成功。

**第四步:再次运行环境检测,确认环境就绪**

```bash
python3 {baseDir}/check_env.py
```

返回码 `0` 表示初始化完成,所有功能可用。

#### 静默模式(供脚本内部调用)

```bash
python3 {baseDir}/check_env.py --quiet
```

静默模式下仅输出错误信息,适合其他脚本调用获取环境状态。角色未配置时返回码 `3`,**不会自动创建角色**。

### 步骤3:API 调用方式

所有接口通过统一的签名脚本调用,服务固定参数:
- **service**: `advisor`
- **host**: `advisor.tencentcloudapi.com`
- **version**: `2020-07-21`

```bash
python3 {baseDir}/scripts/tcloud_api.py advisor advisor.tencentcloudapi.com <Action> 2020-07-21 '<payload>' [region]
```

---

### 步骤4:可用接口(共 7 个)

所有接口频率限制均为 **20 次/秒**。使用某个接口前,**必须先加载对应的接口文档**获取参数、返回值和展示规则等详细信息。

| 接口 | 说明 | 必填参数 | 触发词 | 文档 |
|------|------|----------|--------|------|
| `DescribeArch` | 获取云架构详情 | `ArchId`、`Username` | 架构详情、查看架构图 | `{baseDir}/references/api/DescribeArch.md` |
| `DescribeArchList` | 分页获取云架构列表 | `PageNumber`、`PageSize` | 架构列表、所有架构图 | `{baseDir}/references/api/DescribeArchList.md` |
| `ListDirectoryV2` | 查询架构目录树 | 无 | 查询目录、目录列表 | `{baseDir}/references/api/ListDirectoryV2.md` |
| `ListUnorganizedDirectory` | 查询待整理目录 | 无 | 待整理目录、未归类架构 | `{baseDir}/references/api/ListUnorganizedDirectory.md` |
| `DescribeStrategies` | 获取智能顾问支持的风险评估项列表 | 无 | 风险评估、巡检项、云资源风险 | `{baseDir}/references/api/DescribeStrategies.md` |
| `DescribeLastEvaluation` | 获取架构评估结果 | `ArchId` | 架构评估、评估结果、Well-Architected | `{baseDir}/references/api/DescribeLastEvaluation.md` |
| `CreateAdvisorAuthorization` | 开启智能顾问授权 | 无 | 开通智能顾问、授权智能顾问 | `{baseDir}/references/api/CreateAdvisorAuthorization.md` |

调用示例:

```bash
python3 {baseDir}/scripts/tcloud_api.py advisor advisor.tencentcloudapi.com DescribeArchList 2020-07-21 '{"PageNumber":1,"PageSize":10}'
```

---

### 步骤5:数据范围说明与空结果处理

#### 数据范围

所有查询接口返回的数据**仅限当前 AK/SK 对应账号**下的智能顾问数据。向用户展示查询结果时,**必须**明确告知:

> 以下结果为当前 AK/SK(SecretId/SecretKey)对应账号下的智能顾问数据。如需查询其他账号的数据,请切换对应的 AK/SK。

#### 跨账号查询拦截

TSA **不支持查询其他账号(UIN)的数据**。当用户请求查询指定 UIN 的数据时,**不执行任何 API 调用**,直接返回提示。

**判断方式**:通过前置检查阶段 `check_env.py` 输出的账号信息,或调用 `GetCallerIdentity` 接口获取当前 AK/SK 对应的 UIN。

**拦截规则**:

1. 用户请求中**指定了 UIN**,且该 UIN **与当前 AK/SK 对应的 UIN 不一致** → 直接拦截,返回提示
2. 用户请求中**指定了 UIN**,且该 UIN **与当前 AK/SK 对应的 UIN 一致** → 正常执行查询
3. 用户请求中**未指定 UIN** → 正常执行查询(默认查询当前账号)

**拦截时向用户返回**:

> ⚠️ 智能顾问仅支持查询当前 AK/SK 对应账号的数据。当前账号 UIN 为 `{当前UIN}`,无法查询 UIN `{用户指定的UIN}` 的数据。
>
> 如需查询其他账号的数据,请切换到该账号的 AK/SK。

#### 空结果处理

当查询接口返回空结果(如架构列表为空、评估项为空、目录为空等)时,向用户说明可能的原因:

1. **当前架构图没有对应的数据**:该账号下确实没有相关的架构图、评估项或目录数据
2. **未开通智能顾问服务**:当前账号可能尚未开通智能顾问,需要先开通才能使用

向用户展示:

> 查询结果为空,可能原因:
> 1. 当前 AK/SK 对应账号下没有相关数据
> 2. 当前账号可能尚未开通智能顾问服务
>
> 如需开通智能顾问,请告知我,我将协助您完成开通(需要您的确认)。

#### 开通智能顾问服务

当用户确认需要开通智能顾问时,调用 `CreateAdvisorAuthorization` 接口。**此接口为写入操作,必须经过用户明确同意后才能执行。**

**开通流程(严格按顺序执行)**:

**第一步**:向用户说明开通内容,等待用户明确同意**

> 开通智能顾问服务将会:
> - 为当前 AK/SK 对应的账号开通智能顾问服务
> - 同步开启**报告解读**和**云架构协作**权限
> - 开通后可使用架构图管理、风险评估等全部功能
>
> 是否同意开通?

**第二步**:用户同意后执行开通**(用户拒绝则不执行)

使用前**必须先加载接口文档**:`{baseDir}/references/api/CreateAdvisorAuthorization.md`

```bash
python3 {baseDir}/scripts/tcloud_api.py advisor advisor.tencentcloudapi.com CreateAdvisorAuthorization 2020-07-21 '{}'
```

**第三步**:告知用户结果并引导下一步操作**

- **成功**:

  1. 告知用户开通成功
  2. 调用免密登录脚本生成智能顾问控制台链接:

     ```bash
     python3 {baseDir}/scripts/login_url.py "https://console.cloud.tencent.com/advisor"
     ```

  3. 向用户展示如下引导信息:

     > ✅ 智能顾问服务已成功开通!
     >
     > 👉 [点击进入智能顾问控制台]({免密登录链接})
     >
     > 接下来你可以:
     > - **手动画架构图**:在控制台中新建架构图,拖拽云产品组件绘制你的架构
     > - **网络扫描自动生图**:通过网络拓扑扫描,自动生成当前账号下的云架构图
     >
     > 架构图创建完成后,可以使用智能顾问进行架构治理和风险评估。

- **失败**:展示错误信息,建议用户检查账号权限或联系管理员

---

### 步骤6:免密登录链接生成

当接口返回结果中包含架构图(含 `ArchId` 字段)时,**必须**调用免密登录脚本为用户生成腾讯云控制台直达链接。架构图列表场景下,只需为**第一张架构图**生成免密链接。

> **⚠️ 重要**:免密登录链接**每次都必须重新生成**,不可缓存或复用之前生成的链接。

#### 调用方式

需先完成角色配置(见「二、前置检查」),然后调用:

```bash
python3 {baseDir}/scripts/login_url.py "<目标页面URL>"
```

架构图控制台 URL 格式:`https://console.cloud.tencent.com/advisor?archId={ArchId}`

#### 返回示例

```json
{
  "success": true,
  "action": "GenerateLoginURL",
  "data": {
    "loginUrl": "https://cloud.tencent.com/login/roleAccessCallback?algorithm=sha256&secretId=...&token=...&signature=...&s_url=...",
    "targetUrl": "https://console.cloud.tencent.com/advisor?archId=arch-gvqocc25",
    "expireSeconds": 3600
  },
  "requestId": "xxx"
}
```

| 字段 | 说明 |
|------|------|
| `loginUrl` | 免密登录完整 URL,用户点击可直接跳转控制台 |
| `targetUrl` | 登录后跳转的目标页面 |
| `expireSeconds` | 链接有效期(秒),默认 3600,可通过 `TENCENTCLOUD_STS_DURATION` 调整 |

#### 展示规则

免密登录 URL 非常长,**严禁直接展示完整 URL**,必须以 Markdown 超链接格式展示:

```
架构图名称:生产环境架构
架构图 ID:arch-gvqocc25
[跳转控制台](免密登录URL)
```

列表场景(仅第一张架构图附带免密链接):

```
1. 生产环境架构(arch-abc123)— [跳转控制台](免密登录URL)
2. 测试环境架构(arch-def456)
3. 预发布环境架构(arch-ghi789)
```

---

### 步骤7:插件扩展

支持通过插件机制扩展功能:每个插件在 `{baseDir}/references/plugins/` 下一个独立子目录,必须包含 `SKILL.md` 描述功能、调用方式与输出格式。当用户请求涉及某个插件能力时,按需加载对应 `SKILL.md`。插件可复用主技能脚本(如 `scripts/tcloud_api.py`),输出格式与主技能保持一致(统一 JSON)。

---

### 步骤8:统一输出格式

所有接口调用的输出均为统一的 JSON 格式,通过 `success` 字段区分成功与失败。

### 成功响应

```json
{
  "success": true,
  "action": "DescribeArchList",
  "data": { ... },
  "requestId": "9cbe807c-..."
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| `success` | Boolean | 固定为 `true` |
| `action` | String | 调用的接口名称 |
| `data` | Object | 接口返回的业务数据(已去除 RequestId) |
| `requestId` | String | 腾讯云请求 ID,用于问题排查 |

### 失败响应

```json
{
  "success": false,
  "action": "DescribeArchList",
  "error": {
    "code": "AuthFailure.SecretIdNotFound",
    "message": "The SecretId is not found, please ensure that your SecretId is correct."
  },
  "requestId": "ed93f3cb-..."
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| `success` | Boolean | 固定为 `false` |
| `action` | String | 调用的接口名称 |
| `error.code` | String | 错误码 |
| `error.message` | String | 错误描述 |
| `requestId` | String | 腾讯云请求 ID(网络错误时为空) |

### 特殊错误码(脚本层面)

| 错误码 | 含义 |
|--------|------|
| `MissingParameter` | 脚本调用缺少必要参数 |
| `MissingCredentials` | 未配置 AK/SK 环境变量 |
| `NetworkError` | 网络请求失败,无法连接 API |
| `ParseError` | 响应不是有效的 JSON |

### 常见 API 错误码

鉴权、签名、参数与频控等 API 错误码的完整含义与解决方案见 [advisor-2020-07-21/错误码.md](advisor-2020-07-21/错误码.md)。高频错误:`AuthFailure.SecretIdNotFound`(检查 SecretId)、`AuthFailure.SignatureFailure`(检查 SecretKey)、`RequestLimitExceeded`(限 20 次/秒)。

---

### 步骤9:注意事项

1. **密钥安全**:严禁将 AK/SK 硬编码在代码中,必须通过环境变量传入
2. **权限控制**:建议使用子账号密钥,角色关联 `QcloudTAGFullAccess` 和 `QcloudAdvisorFullAccess` 策略
3. **临时密钥**:生产环境推荐使用 STS 临时密钥,设置 `TENCENTCLOUD_TOKEN`
4. **频率限制**:所有接口限制 20 次/秒(维度:API + 接入地域 + 子账号)
5. **地域选择**:默认 `ap-guangzhou`,Region 为可选参数
6. **跨平台支持**:所有脚本均使用纯 Python 实现,支持 Windows / Linux / macOS,无需 curl、openssl、jq 等外部依赖
7. **免密链接有效期**:默认 1 小时(3600 秒),可通过 `TENCENTCLOUD_STS_DURATION` 调整(最大 43200 秒,即 12 小时)
8. **架构图免密链接**:当返回结果包含架构图时,只需为**第一张架构图**生成免密登录控制台链接,并以 `[跳转控制台](免密登录URL)` 超链接形式展示,严禁直接展示完整 URL。**每次展示都必须重新调用 `login_url.py` 生成新链接,不可缓存或复用之前生成的链接**
9. **评估项控制台链接**:评估项不需要免密登录链接,直接展示控制台 URL:`https://console.cloud.tencent.com/advisor/assess?strategyName={URL编码后的Name}`
10. **按需加载接口文档**:使用某个接口前,必须先读取 `{baseDir}/references/api/<Action>.md` 获取完整的参数说明、返回字段、展示格式等详细信息
11. **数据范围提示**:所有查询结果仅限当前 AK/SK 对应账号的数据,展示结果时**必须**告知用户数据范围
12. **空结果引导**:查询返回空结果时,提示用户可能原因(无数据或未开通智能顾问),并询问是否需要开通
13. **开通智能顾问须用户同意**:调用 `CreateAdvisorAuthorization` 接口属于写入操作,**必须**经用户明确同意后才能执行,严禁自动调用
14. **跨账号查询拦截**:用户指定其他 UIN 查询时,**不执行 API 调用**,直接告知仅支持查询当前 AK/SK 对应的 UIN(需标明具体 UIN),并提示切换 AK/SK

---

### 步骤10:安全与权限声明

### 10.1 所需凭证

需要环境变量 `TENCENTCLOUD_SECRET_ID` 与 `TENCENTCLOUD_SECRET_KEY`(均必填)。密钥仅通过环境变量读取,**不会**被写入文件、日志或网络传输中。

### 10.2 IAM 操作声明

只读操作(`sts:GetCallerIdentity`、`cam:GetRole`、`cam:DescribeRoleList`)由 `check_env.py` / `setup_role.py` 执行。**写入类操作必须在用户明确同意后才会运行**:`cam:CreateRole` / `cam:AttachRolePolicy`(`scripts/create_role.py`)、`cam:DeleteRole`(`scripts/cleanup.py --cloud`)、`advisor:CreateAdvisorAuthorization`(开通智能顾问服务)。`sts:AssumeRole`(`login_url.py`)用于扮演角色生成免密登录链接。

### 10.3 数据安全

- **临时凭证**:STS AssumeRole 获取的临时凭证仅在内存中使用,不持久化存储
- **配置文件**:`~/.tencent-cloudq/config.json` 仅保存角色 ARN 和账号 UIN,**不保存任何密钥**
- **文件权限**:配置目录设为 `700`,配置文件设为 `600`,仅当前用户可读写
- **SSL 验证**:所有 HTTPS 请求均启用完整的 SSL 证书验证,不支持跳过验证
- **网络访问**:仅连接腾讯云官方 API 域名(`*.tencentcloudapi.com`)和登录域名(`cloud.tencent.com`)

### 10.4 配置清理

用户可随时运行清理脚本删除本机上的所有配置和缓存:

```bash
# 交互式清理(逐项确认)
python3 {baseDir}/scripts/cleanup.py

# 一键清理所有本地配置
python3 {baseDir}/scripts/cleanup.py --all

# 一键清理所有本地配置 + 云端 advisor 角色
python3 {baseDir}/scripts/cleanup.py --all --cloud
```

清理范围:
- 配置目录 `~/.tencent-cloudq/`(含 `config.json`)
- 临时缓存 `{系统临时目录}/.tcloud_advisor_uin_cache`
- 环境变量 `TENCENTCLOUD_*` 系列(`SECRET_ID`、`SECRET_KEY`、`TOKEN`、`ROLE_ARN`、`ROLE_NAME`、`ROLE_SESSION`、`STS_DURATION`),脚本会自动检测已设置的变量并生成对应平台的清理命令(`source` 脚本 / PowerShell 脚本)
- 云端 CAM 角色 `advisor`(仅 `--cloud` 模式,需配置 AK/SK)

使用说明

# 云架构可视化治理助手

通过腾讯云智能顾问(Smart Advisor)API 管理云架构图、获取架构评估与风险巡检结果,一站式查看架构评估、风险分布与合规状态。

## 使用

```text
列出我账号下所有的云架构图
```

```text
对架构 arch-xxxx 做一次架构评估,给出风险清单
```

```text
查询智能顾问支持哪些风险评估项
```

## 准备

1. 配置环境变量 `TENCENTCLOUD_SECRET_ID` / `TENCENTCLOUD_SECRET_KEY`(获取地址见 SKILL.md)
2. 运行 `python3 check_env.py` 完成环境自检
3. 首次使用免密登录需按引导创建 CAM 角色(脚本会在执行前征求你的同意)

## 工作原理

所有操作通过 `scripts/tcloud_api.py` 以 TC3-HMAC-SHA256 签名调用腾讯云智能顾问 API(限频 20 次/秒)。查询结果仅限当前 AK/SK 对应账号;涉及角色创建、服务开通等写入操作时,必须经用户明确同意后执行。

如何安装此技能?

访问技能市场,点击「安装」按钮,按提示将技能包放入 AI 编程助手的 skills 目录即可。

浏览技能市场

支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手

云架构可视化治理助手 - 免费 | 技能派