细粒度控制 Agent 权限
AI Agent 调用外部工具时默认拥有全部访问权限,存在越权操作风险。通过 Agent Identity 策略集,可对 Agent 的 MCP 工具调用行为实施基于主体、资源和操作条件的细粒度权限管控。本教程以订单管理场景为例,演示如何创建函数计算后端服务、通过 AI 网关暴露为 MCP 工具,并配置 Agent Identity 策略集控制工具调用权限。
架构

完整流程概览:
在本地搭建并验证 Agent 应用。
将后端业务接口部署到函数计算,并通过 AI 网关暴露为 MCP 工具。
配置 Agent 使用 AI 网关 MCP 服务,验证工具调用正常。
创建 Agent Identity 策略集,并配置策略。
验证策略生效:允许的操作正常执行,受限的操作被拦截。
准备工作
环境要求
本地测试环境需要安装Python(版本≥ 3.10)以及pip包管理器。
RAM用户及权限要求
您需要准备一个RAM用户用于执行准备脚本、本地应用测试。脚本执行用户需要具备以下权限:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "agentidentity:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "agentidentitydata:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ram:CreateServiceLinkedRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"ram:ServiceName": ["agentidentity.aliyuncs.com"]
}
}
},
{
"Effect": "Allow",
"Action": [
"ram:CreateApplication",
"ram:CreateRole",
"ram:CreatePolicy",
"ram:AttachPolicyToRole",
"ram:CreateAppSecret",
"ram:DeleteApplication",
"ram:ListUserBasicInfos",
"ram:ListRoles"
],
"Resource": "*"
}
]
}百炼API密钥
获取具有百炼模型调用权限的 DashScope API 密钥。如未创建,参考获取API Key 进行创建和配置。
步骤一:本地安装与测试应用
参考在百炼高代码中使用Agent Identity教程的步骤一,确保应用在本地测试成功。
步骤二:创建并配置函数计算
创建函数实例
登录函数计算FC控制台。
在左侧导航栏选择,单击创建函数。
在选择最适合你的函数类型窗口中,保持默认的Web函数页签,单击创建Web函数。
在创建Web函数页面,配置以下参数:
函数名称:输入该函数名称,例如
order-service-fc。运行环境:选择自定义运行时/Linux/Debian 10。
启动命令:
python3 app.py。监听端口:9000
其余参数保持默认。

单击创建。创建完成后自动跳转至函数详情页。
配置函数实例
在函数详情页,切换到代码页签下。将示例代码替换为以下代码:
import json from flask import Flask from flask import request app = Flask(__name__) @app.route('/', defaults={'path': ''}) @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']) def hello_world(path): data = request.stream.read() print("Path: " + path) print("Data: " + str(data)) response = {} if path == 'create-order': param = json.loads(data) response = { 'status': 'Done', 'orderId': param['orderId'], 'amount': param['amount'] } elif path == 'get-order': param = json.loads(data) response = { 'status': 'Done', 'orderId': param['orderId'], 'amount': 500 } elif path == 'add-budget': param = json.loads(data) response = { 'status': 'Done', 'year': param['year'], 'amount': param['amount'], 'reason': param['reason'] } return json.dumps(response) if __name__ == '__main__': app.run(host='0.0.0.0',port=9000)单击部署代码按钮,等待控制台提示部署成功。
切换到触发器页签,单击操作列的编辑。
在编辑触发器defaultTrigger面板中,将认证方式切换为无需认证。单击确定。
拷贝触发器页签下的内网访问地址和公网访问地址,后续步骤需要使用。
测试函数实例
复制触发器页签下的公网访问地址,在本地终端执行以下命令(将<your-fc-public-facing-url>替换为实际的公网访问地址)。
curl -X GET "<your-fc-public-facing-url>/get-order" \
-H "Content-Type: application/json" \
-d '{"orderId":"ord-001"}'预期输出:
{"status": "Done", "orderId": "ord-001", "amount": 500}(可选)禁用公网访问
通过公网地址测试函数正常后,建议禁用公网访问,仅保留内网访问。
在函数详情页触发器页签下,单击操作列的编辑。
在编辑触发器defaultTrigger面板中,开启禁用公网访问URL。单击确定。

步骤二:创建并配置AI网关
创建AI网关实例
登录AI网关控制台。在实例列表页单击创建实例。
在购买页面配置以下参数:
商品类型:选择专享实例(按量付费)。
地域:选择华北2(北京)(当前Agent Identity仅在北京地域提供服务)。
网关名称:输入网关名称,例如
test-ai-gateway。网络访问类型:选择公网。
专有网络:选择网关实例运行所在的专有网络。
交换机:选择网关实例运行的交换机。
日志服务:勾选使用日志服务(SLS)。
其余参数保持默认。

单击立即购买,等待实例创建完成。
更多配置说明,请参见创建网关实例。
创建服务
在AI网关实例概览页,单击左侧导航栏的服务,单击创建服务。
在创建服务面板中,配置以下参数:
服务来源:选择DNS域名。
服务名称:输入服务名称,例如
order-service。服务地址:输入在配置函数实例步骤中保存的函数实例内部访问地址,移除
http://头部,在主机名后加上端口号80。例如:order-srvice-fc-xxxxxxxxxx.cn-beijing-vpc.fcapp.run:80。

单击确定。稍等片刻,服务的健康检查状态应显示为健康。

创建MCP服务
在AI网关实例概览页,选择左侧导航栏的MCP管理。
单击创建MCP服务,配置以下参数:
名称:输入MCP服务名称,例如
order-service-mcp。协议:选择HTTP转MCP。
后端服务:选择在创建服务步骤中创建的服务。
描述:输入 MCP 服务的功能描述。
MCP接入点:单击添加域名,输入自定义域名(如
order-service.<your-domain>.com),单击创建。在域名下拉框中选择创建的域名。说明如仅用于测试,该域名不需要真实存在。如需通过自定义域名访问 MCP 服务,还需在域名 DNS 服务中添加 CNAME 记录,指向网关访问入口地址(AI网关的公网域名)。
其余参数保持默认。

单击保存并发布。
添加并调试MCP工具
单击创建的MCP服务,在MCP服务详情页的基本信息页签,单击添加工具。
在创建工具面板中,选择编辑方式为自定义YAML。
将以下 YAML 内容粘贴至配置框中。将
requestTemplate下url中的<your-fc-app-internal-facing-url>(共 3 处)替换为函数实例的内网访问地址。https://或http://的内网地址均可使用;如使用http://地址,需将端口号改为80。server: name: order-service-mcp allowTools: - create-order - get-order tools: - name: create-order description: Create a new order with specific amount args: - name: orderId description: The unique ID of the order type: string required: true position: body - name: amount description: The amount of money for the order type: number required: true position: body requestTemplate: url: <your-fc-app-internal-facing-url>:443/create-order method: POST argsToJsonBody: true responseTemplate: body: | # Order Created - **Status**: {{.status}} - **Order ID**: {{.orderId}} - **Confirmed Amount**: {{.amount}} - name: get-order description: Retrieve order details by ID args: - name: orderId description: The ID of the order to search type: string required: true requestTemplate: url: <your-fc-app-internal-facing-url>:443/get-order method: POST argsToJsonBody: true responseTemplate: body: | # Order Details - **Status**: {{.status}} - **Order ID**: {{.orderId}} - **Amount**: {{.amount}} - name: add-budget description: Allocates additional budget to an existing project or budget entity. args: - name: year description: The year of budget type: string required: true - name: amount description: The amount of money for the budget type: number required: true position: body - name: reason description: The reason of budget type: string required: true requestTemplate: url: <your-fc-app-internal-facing-url>:443/add-budget method: POST argsToJsonBody: true responseTemplate: body: |- # Budget Details - **Status**: {{.status}} - **Year**: {{.year}} - **Amount**: {{.amount}} - **Reason**: {{.reason}}单击确定。
单击MCP服务详情页右上角的调试。工具列表中应显示 3 个工具:
create-order、get-order、add-budget。单击任一工具并输入参数值进行测试,应返回成功结果。
回到MCP服务详情页,在右侧连接MCP服务区域,单击域名下拉菜单选择默认域名,复制Streamable HTTP页签下的完整 URL,后续步骤需要使用。

步骤三:配置并测试Agent应用
完成 AI 网关和 MCP 服务配置后,可以将 Agent 代理指向 AI 网关 MCP 服务地址,验证 Agent 能否正常调用 MCP 工具。
配置Agent代理使用AI网关MCP服务
执行以下命令,将在添加并调试MCP工具步骤中获取的 MCP 服务 URL 配置为本地环境变量:
export AI_GATEWAY_MCP_SERVER="<your-ai-gateway-mcp-server-url>"在本地端到端示例目录(
agent-identity-dev-kit/agent_identity_python_samples/end-to-end_sample)下的.config.json文件中,找到workload_identity_name的值并复制。执行以下命令将工作负载名称配置为环境变量:export AGENT_IDENTITY_WORKLOAD_IDENTITY_NAME="<your-workload-identity-name>"
测试应用
打开终端,在项目根目录
agent-identity-dev-kit下执行以下命令切换到fetch-workload-access-token_sample目录:cd agent_identity_python_samples/fetch-workload-access-token_sample安装依赖。建议创建并激活一个 Python 虚拟环境,然后安装项目所需的依赖。
pip install -r requirements.txt在
fetch-workload-access-token_sample目录下,执行以下命令启动Agent:python -m deploy_starter.main启动另一个终端,在项目根目录
agent-identity-dev-kit执行以下命令切换到end-to-end_sample目录,并启动前后端应用:cd agent_identity_python_samples/end-to-end_sample python -m application.backend.app等待服务启动完成后,在浏览器中访问
http://localhost:8090。完成阿里云登录及用户授权后,在对话窗口中与模型交互,例如输入:"查询订单:ord-001",如应用工作正常将返回订单详情,订单数据来自通过AI网关发布的MCP服务。

步骤四:创建并配置Agent Identity策略集
创建策略集
登录Agent Identity控制台,参考创建策略集中的步骤创建策略集,
创建并配置策略
在策略集列表中,找到目标策略集,单击其名称。
在策略集详情页,单击策略内容页签下的编辑策略内容。
编辑器将自动新增一个策略并预填充名称。在策略编辑页面完成以下配置:
策略名称:保持默认或修改为更具语义的名称,如
allow-get-order-action。策略语句:
效果:选择允许。
主体:选择指定主体。在主体类型下拉菜单中选择OAuth用户。
资源:选择之前创建的 AI 网关。
操作:选择指定操作。单击编辑操作,勾选
get-orderMCP工具。单击确定。
单击编辑策略内容页面下的新增策略,重复上述步骤创建第二条策略。在 操作 中勾选
create-orderMCP 工具,并在条件下添加以下条件:条件键:选择操作入参
amount。条件运算符:选择
<。条件值:输入
1000。
单击提交。策略集下现有两条策略:
allow-get-order-action:允许所有已认证用户调用get-order工具。allow-create-order-with-condition:允许已认证用户调用create-order工具,但amount参数值必须小于1000。
为策略集绑定AI网关
参考为策略集绑定AI网关中的步骤,将创建的AI网关与策略集绑定。执行模式设置为拦截模式。
在生产环境中,建议先设置为观察模式,通过 AI 网关的 SLS 日志监控一段时间,确认策略按预期生效后,再切换为拦截模式。
为工作负载身份配置策略相关权限
工作负载身份关联的 RAM 角色需要额外的策略评估权限,才能在运行时获取 Agent Identity 策略检查结果。
登录Agent Identity控制台。在左侧导航栏选择。
在工作负载身份列表页,找到配置Agent代理使用AI网关MCP服务步骤中配置的工作负载身份名称并单击。
在工作负载身份详情页,单击认证流程页签下的运行时RAM角色名称。

在RAM角色详情页的权限管理页签下,单击已创建的自定义权限策略。
在权限策略详情页的策略内容页签下,单击编辑权限策略。在
Statement数组新增以下策略块。{ "Effect": "Allow", "Action": [ "agentidentitydata:EvaluatePolicy", "agentidentitydata:SearchAuthorizedActions" ], "Resource": "*" }
步骤五:验证策略效果
重新启动 Agent 代理服务和前后端应用并重新登录后,通过以下场景验证策略是否按预期生效。
测试查询订单(get-order)
在对话窗口中输入:"查询订单:ord-001"。Agent 调用 get-order 工具,策略允许该操作,预期正常返回订单详情。
测试创建订单 — 金额超出限制(create-order,amount ≥ 1000)
在对话窗口中输入:"创建订单,订单号 ord-002,金额 1500"。Agent 调用 create-order 工具时,因 amount 参数值不满足小于 1000 的条件限制,策略拒绝该操作。窗口中返回具体报错信息(403 Forbidden)。

测试创建订单 — 金额在限制范围内(create-order,amount < 1000)
在对话窗口中输入:"创建订单,订单号 ord-002,金额 900"。Agent 调用 create-order 工具,amount 参数值满足条件限制,策略允许该操作,预期正常返回创建成功的订单信息。

步骤六(可选):部署Agent至百炼高代码
参照在百炼高代码中使用Agent Identity中的步骤二和步骤三,将Agent部署至百炼高代码平台。









