tencent cloud

Web 应用防火墙

资源接入

下载
聚焦模式
字号
最后更新时间: 2026-10-15 10:20:26

功能概述

资源接入用于将智能体需要访问的目的资源统一纳管。纳入管控的资源类型包括:网关侧资源(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") } }
b. 根据语言,复制代码片段粘贴到业务脚本开头。其中 TAG 为 步骤一:新建资源接入 所创建资源的资源 ID。
Python
import os
import shutil
import subprocess
import platform
import sys
import json
from typing import Optional
def 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: 组装 env
child_env = os.environ.copy()
# Step 3: 执行 asdkcli
try:
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: 解析 stdout
raw = (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 obj
cli_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 None
if 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: 组装 env
const childEnv = { ...process.env };
// Step 3: 执行 asdkcli
const 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: 解析 stdout
const 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 bash
set -u -o pipefail
_stdout_file=$(mktemp)
_stderr_file=$(mktemp)
trap 'rm -f "$_stdout_file" "$_stderr_file"' EXIT
get_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; then
printf "[asdkcli] '%s' not found in PATH.\\n请先安装 asdkcli 后再运行本脚本,参考 Skill.md 中的安装说明。\\n" "$cli_name" >&2
exit 1
fi
# Step 2 & 3: 执行 asdkcli
if [ -n "$extra_arg" ]; then
"$cli_name" "$extra_arg" >"$_stdout_file" 2>"$_stderr_file" || true
else
"$cli_name" >"$_stdout_file" 2>"$_stderr_file" || true
fi
if [ -s "$_stderr_file" ]; then
cat "$_stderr_file" >&2
fi
# Step 4: 解析 stdout
local raw
raw=$(sed -e 's/^[[:space:]]*//; s/[[:space:]]*$//' "$_stdout_file")
if [ -z "$raw" ]; then
echo "[asdkcli] empty output" >&2
exit 1
fi
if ! command -v jq >/dev/null 2>&1; then
echo "[asdkcli] 'jq' is required to parse output, please install jq" >&2
exit 1
fi
if ! echo "$raw" | jq -e . >/dev/null 2>&1; then
echo "[asdkcli] output is not valid JSON:" >&2
echo "$raw"
exit 1
fi
local kind
kind=$(echo "$raw" | jq -r 'type')
if [ "$kind" != "object" ]; then
echo "[asdkcli] output JSON is not an object" >&2
exit 1
fi
printf "%s" "$raw"
}
cli_json=$(get_asdkcli_result "${1:-}")
code=$(echo "$cli_json" | jq -r '.Code // empty')
if [ "$code" != "0" ]; then
echo "$cli_json" | jq -r '.Message // ""'
exit 1
fi

鉴权 Skill

a. 复制以下内容粘贴到业务 Skill.md 开头。其中 TAG 为 步骤一:新建资源接入 所创建资源的资源 ID。
# 前置要求
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 接入包。
编辑:修改资源名称、目的资源类型、认证源、资源权限等。
删除:移除该资源。删除前请确认没有智能体正在使用它,以免影响正常访问。



帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈