功能概述
资源接入用于将智能体需要访问的目的资源统一纳管。纳入管控的资源类型包括:网关侧资源(MCP / API)、腾讯云产品资源,以及自定义资源。完成接入后,智能体访问目的资源时可自动完成身份注册上报,后续可基于此做授权、鉴权与审计。
操作场景
通过资源接入,可以把智能体要访问的目的资源纳入 AI Agent 安全网关管控,对这些资源的访问统一做授权、鉴权和审计。典型场景包括:
已发布的网关侧 MCP / API,交由网关统一做鉴权与凭据托管,无需在本地维护凭据。
腾讯云产品或自建自定义资源,纳入管控后按资源粒度控制可访问的智能体。
记录智能体对各资源的访问行为,满足审计要求。
前提条件
已开通 AI Agent 安全网关并创建实例。
操作步骤
步骤一:新建资源接入
1. 登录 AI Agent 安全网关控制台,在左侧导航栏,单击资源接入。
2. 在资源接入页面,单击新建资源接入。
3. 在基础信息中,填写以下参数。
配置项 | 说明 |
资源名称 | 自定义名称,64个字符以内,支持中文、大小写字母、数字。 |
目的资源类型 | 选择资源归属的类型: 网关侧资源 - MCP:适用于已完成业务接入的 MCP,支持 MCP / 工具鉴权,支持多种安全检测与流量控制规则。选择后需配置: 网关实例:从已有网关实例中选择。 MCP:从已完成业务接入的 MCP 中选择,可多选;若现有 MCP 不满足需求,可单击新建 MCP。 网关侧资源 - API:适用于在 业务接入 / API 中发布的 API,支持接口级鉴权,支持多种安全检测与流量控制规则。选择后需配置: 网关实例:从已有网关实例中选择。 API:从已完成业务接入的 API 中选择,可多选;若现有 API 不满足需求,可单击新建 API。 云产品资源:适用于腾讯云产品资源,如 COS,支持资源级授权与凭据换取。选择后需在云产品下拉框中选择云产品。 其他资源(自定义资源):适用于非在网关发布的资源,如因合规要求不能对外发布的 API,支持资源级授权与凭据换取。 |
4. 单击下一步:认证鉴权配置,继续填写。
配置项 | 说明 |
认证源 | 选资源认证所用的认证源。若不选择,由用户在登录页自行选择认证方式;若现有认证源不满足需求,可单击新建认证源。 |
资源权限 | 选择资源的可见范围: 私有:默认拒绝所有访问,需在访问权限中添加允许对象。 公开:默认允许所有认证对象访问,可在访问权限中添加禁止对象。 |
5. 单击保存,查看接入指引。
步骤二:完成资源集成
网关侧资源(MCP / API)、云产品资源
1.1 单击下载资源接入包,下载资源接入包
资源名称_Skill_xxxxxxxxx.zip。如选择了多个资源(例如选择 2 个 MCP),则会生成对应数量的资源接入包。1.2 将下载的所有资源接入包安装到智能体运行客户端的 Skill 管理里。资源接入包的分发方式取决于智能体类型:
腾讯云智能体:以 WorkBuddy 为例,管理员将资源接入包上传至 WorkBuddy 管理后台后统一下发。操作路径:WorkBuddy 后台 > AI 资源管理 > Skill 管理 > Skill 列表 > 上传 Skill。
其他智能体:建议将资源接入包上传至 SkillHub 等渠道,自行搜索下发。
1.3 在智能体运行客户端发起调用,确认调用认证通过。
自定义资源
提供以下两种集成方式,可按业务形态选择:
集成方式 | 适用场景 | 特点 |
业务 Skill 带脚本目录(Python / Node.js / Shell) | 凭据仅在内存中流转,不写入环境变量 | |
业务 Skill 为纯自然语言描述,无脚本目录 | 将认证鉴权流程封装为独立 Skill,通过前置要求引用 |
SDK 代码片段
a. 复制以下内容粘贴到业务
Skill.md 开头。# 前置要求,初始化工具 asdkcli 安装根据当前操作系统自动选择 asdkcli 的安装脚本执行。Unix 执行如下:( command -v asdkcli >/dev/null 2>&1 || { mkdir -p "$HOME/.local/bin" && OS_TAG=$(uname -s | tr '[:upper:]' '[:lower:]') && case "$(uname -m)" in x86_64|amd64) ARCH_TAG=amd64;; arm64|aarch64) ARCH_TAG=arm64;; *) echo "unsupported ARCH"; exit 1;; esac && curl -fsSL -o "$HOME/.local/bin/asdkcli" "https://agent-identity-1302490086.cos.ap-guangzhou.myqcloud.com/cli/new/asdkcli_${OS_TAG}_${ARCH_TAG}" && chmod +x "$HOME/.local/bin/asdkcli" && export PATH="$HOME/.local/bin:$PATH" && RC_FILE="${ZSH_VERSION:+$HOME/.zshrc}" && RC_FILE="${RC_FILE:-${BASH_VERSION:+$HOME/.bashrc}}" && RC_FILE="${RC_FILE:-$HOME/.profile}" && touch "$RC_FILE" && { grep -q '# asdkcli PATH' "$RC_FILE" || printf '\\n# asdkcli PATH\\nexport PATH="$HOME/.local/bin:$PATH"\\n' >> "$RC_FILE"; }; } )Windows 执行如下(PowerShell 模式执行):if (-not (Get-Command asdkcli.exe -ErrorAction SilentlyContinue)) { $d="$env:USERPROFILE\\.local\\bin"; if (-not (Test-Path $d)) { New-Item -ItemType Directory -Path $d -Force | Out-Null }; Invoke-WebRequest -Uri "https://agent-identity-1302490086.cos.ap-guangzhou.myqcloud.com/cli/new/asdkcli_windows_amd64.exe" -OutFile "$d\\asdkcli.exe" -UseBasicParsing; if ($env:Path -notlike "*$d*") { $env:Path="$env:Path;$d" }; $u=[Environment]::GetEnvironmentVariable("Path","User"); if ($u -notlike "*$d*") { [Environment]::SetEnvironmentVariable("Path","$u;$d","User") } }
Python
import osimport shutilimport subprocessimport platformimport sysimport jsonfrom typing import Optionaldef get_asdkcli_result(extra_arg: Optional[str] = None) -> dict:IS_WINDOWS = platform.system().lower().startswith("win")os.environ["TAG"] = 'res-xxxxxxxx'arg = extra_arg if extra_arg else None# Step 1: 检测 asdkcli 是否已安装cli_name = "asdkcli.exe" if IS_WINDOWS else "asdkcli"if shutil.which(cli_name) is None:print(f"[asdkcli] '{cli_name}' not found in PATH.\\n""请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。",file=sys.stderr,)sys.exit(1)# Step 2: 组装 envchild_env = os.environ.copy()# Step 3: 执行 asdkclitry:cmd = [cli_name]if arg:cmd.append(arg)run_proc = subprocess.run(cmd,env=child_env,capture_output=True,text=True,encoding="utf-8",)except OSError as e:print(f"[asdkcli] spawn error: {e}", file=sys.stderr)sys.exit(1)if run_proc.stderr:sys.stderr.write(run_proc.stderr)# Step 4: 解析 stdoutraw = (run_proc.stdout or "").strip()if not raw:print("[asdkcli] empty output", file=sys.stderr)sys.exit(1)try:obj = json.loads(raw)except json.JSONDecodeError:print("[asdkcli] output is not valid JSON:", file=sys.stderr)sys.stdout.write(raw + "\\n")sys.exit(1)if not isinstance(obj, dict):print("[asdkcli] output JSON is not an object", file=sys.stderr)sys.exit(1)return objcli_json = get_asdkcli_result(sys.argv[1] if len(sys.argv) > 1 else None)code = cli_json.get("Code") if isinstance(cli_json, dict) else Noneif code != 0:print(cli_json.get("Message", "") if isinstance(cli_json, dict) else "")sys.exit(1)
Node.js
const os = require('os');const path = require('path');const fs = require('fs');const { spawnSync } = require('child_process');function getAsdkcliResult(extraArg) {const IS_WINDOWS = os.platform() === 'win32';process.env.TAG = 'res-xxxxxxxx';const arg = extraArg || null;// Step 1: 检测 asdkcli 是否已安装const cliName = IS_WINDOWS ? 'asdkcli.exe' : 'asdkcli';if (!which(cliName)) {console.error(`[asdkcli] '${cliName}' not found in PATH.\\n` +'请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。');process.exit(1);}// Step 2: 组装 envconst childEnv = { ...process.env };// Step 3: 执行 asdkcliconst cmdArgs = arg ? [arg] : [];const run = spawnSync(cliName, cmdArgs, {env: childEnv,encoding: 'utf-8',});if (run.error) {console.error(`[asdkcli] spawn error: ${run.error.message}`);process.exit(1);}if (run.stderr) {process.stderr.write(run.stderr);}// Step 4: 解析 stdoutconst raw = (run.stdout || '').trim();if (!raw) {console.error('[asdkcli] empty output');process.exit(1);}let obj;try {obj = JSON.parse(raw);} catch (_) {console.error('[asdkcli] output is not valid JSON:');process.stdout.write(raw + '\\n');process.exit(1);}if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {console.error('[asdkcli] output JSON is not an object');process.exit(1);}return obj;}function which(cmd) {const isWin = os.platform() === 'win32';const pathEnv = process.env.PATH || process.env.Path || '';const sep = isWin ? ';' : ':';const exts = isWin ? (process.env.PATHEXT || '.EXE;.CMD;.BAT').split(';') : [''];for (const dir of pathEnv.split(sep)) {if (!dir) continue;for (const ext of exts) {const full = path.join(dir, cmd + (isWin && !cmd.toLowerCase().endsWith(ext.toLowerCase()) ? ext : ''));try {if (fs.existsSync(full)) return full;} catch (_) {}}}return null;}const cliJson = getAsdkcliResult(process.argv[2] || null);const code = cliJson && typeof cliJson === 'object' ? cliJson.Code : null;if (code !== 0) {console.log(cliJson && cliJson.Message ? String(cliJson.Message) : '');process.exit(1);}
Shell
#!/usr/bin/env bashset -u -o pipefail_stdout_file=$(mktemp)_stderr_file=$(mktemp)trap 'rm -f "$_stdout_file" "$_stderr_file"' EXITget_asdkcli_result() {local extra_arg="$1"export TAG='res-xxxxxxxx'local cli_name="asdkcli"# Step 1: 检测 asdkcli 是否已安装if ! command -v "$cli_name" >/dev/null 2>&1; thenprintf "[asdkcli] '%s' not found in PATH.\\n请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。\\n" "$cli_name" >&2exit 1fi# Step 2 & 3: 执行 asdkcliif [ -n "$extra_arg" ]; then"$cli_name" "$extra_arg" >"$_stdout_file" 2>"$_stderr_file" || trueelse"$cli_name" >"$_stdout_file" 2>"$_stderr_file" || truefiif [ -s "$_stderr_file" ]; thencat "$_stderr_file" >&2fi# Step 4: 解析 stdoutlocal rawraw=$(sed -e 's/^[[:space:]]*//; s/[[:space:]]*$//' "$_stdout_file")if [ -z "$raw" ]; thenecho "[asdkcli] empty output" >&2exit 1fiif ! command -v jq >/dev/null 2>&1; thenecho "[asdkcli] 'jq' is required to parse output, please install jq" >&2exit 1fiif ! echo "$raw" | jq -e . >/dev/null 2>&1; thenecho "[asdkcli] output is not valid JSON:" >&2echo "$raw"exit 1filocal kindkind=$(echo "$raw" | jq -r 'type')if [ "$kind" != "object" ]; thenecho "[asdkcli] output JSON is not an object" >&2exit 1fiprintf "%s" "$raw"}cli_json=$(get_asdkcli_result "${1:-}")code=$(echo "$cli_json" | jq -r '.Code // empty')if [ "$code" != "0" ]; thenecho "$cli_json" | jq -r '.Message // ""'exit 1fi
鉴权 Skill
# 前置要求1. 执行前请先调用 auth_permission 进行认证鉴权,当前 TAG 为 'res-xxxxxxxx'(即步骤一创建资源的资源 ID);2. auth_permission 鉴权通过后返回 success,会自动将获取到的凭据注入到环境变量中,按需读取;3. 如果 auth_permission 在认证通过后返回非 success,则表明当前用户无权限操作,应给予阻断,并原样输出 auth_permission 的返回内容;
b. 单击下载鉴权 Skill 接入包,下载资源接入包
资源名称_Skill_xxxxxxxxx.zip。c. 将下载的资源接入包安装到智能体运行客户端的 Skill 管理里。
d. 在智能体运行客户端发起调用,确认调用认证通过。
步骤三:管理已接入资源
在资源接入页面,支持查看和管理已接入的资源。
字段 | 说明 |
资源 ID / 名称 | 资源的唯一标识与名称。 |
上报智能体数 | 已注册上报的智能体数量。 说明: 1. 确认资源接入包是否已下载并完成集成。如需重新获取,可在操作区重新生成资源接入包,并下载后分发给开发人员。 2. 集成后是否实际发起过调用。 3. 调用认证是否通过,可在访问日志中查看调用记录。 |
资源类型 | 资源的归属类型(网关侧资源 - MCP / API、云产品资源、自定义资源)。 |
关联目的资源 | 资源关联的目的资源。 |
认证源 | 资源关联的认证源。 |
资源权限 | 资源的可见范围(私有 / 公开)。 |
调用量 | 资源的被调用次数。 |
最近更新时间 | 资源信息最近一次更新的时间。 |
操作 | 接入指引:重新查看该资源的 SDK 代码片段或鉴权 Skill 接入包。 编辑:修改资源名称、目的资源类型、认证源、资源权限等。 删除:移除该资源。删除前请确认没有智能体正在使用它,以免影响正常访问。 |