在AgentRun中使用Agent Identity

更新时间:
复制为 MD 格式

本教程演示如何在 AgentRun 中集成 Agent Identity,实现智能体安全访问钉钉等第三方服务。

概述

AgentRun是阿里云函数计算推出的一站式Agentic AI基础设施平台,提供Serverless化的智能体托管能力。通过将Agent IdentityAgentRun集成,可以实现:

  • 入站身份验证:调用方通过兼容 OAuth2.0/OIDC 的身份提供商(如阿里云、Okta、Microsoft Entra ID)完成认证,获取 JWT Token 并在调用 Agent 时传入;AgentRun 与 Agent Identity 校验该 Token 以控制访问。本教程以阿里云 RAM 为入站 IdP,RAM 用户为入站身份。

  • 出站凭据管理:Agent 通过 Agent Identity SDK 调用服务接口,获取阿里云 STS Token 或第三方 API Key/OAuth2 Access Token,用于安全访问下游资源。本教程以钉钉开放平台作为 OAuth 出站凭证提供商。

  • 执行角色(阿里云资源访问):AgentRun 支持绑定函数计算 RAM 角色(执行角色),运行时自动换取 STS Token 并调用阿里云 API;代码以该角色身份获得权限,无需在代码或配置中硬编码访问密钥。

架构

diagram

准备工作

环境要求

  • Python:版本 ≥ 3.10

  • pip:包管理器

RAM用户及权限要求

您需要准备一个RAM用户用于执行Agent Identity CLI命令,以创建工作负载身份和关联的RAM角色,并为RAM角色自动配置所需权限。执行CLI命令的RAM用户至少需要具备以下权限:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "agentidentity:CreateWorkloadIdentity",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ram:CreateRole",
        "ram:AttachPolicyToRole",
        "ram:CreatePolicy"
      ],
      "Resource": "*"
    }
  ]
}

OAuth2身份提供商

您需要准备一个支持OIDC/OAuth2协议的身份提供商(IdP)用于验证终端用户身份,并颁发JWT令牌(又称ID Token)。在调用Agent时,JWT令牌将被一同传入用以完成AgentRun以及Agent Identity的入站认证。本教程以阿里云身份提供商为例。

步骤一:配置AgentRun模型与凭证

创建大语言模型服务

AgentRun通过统一模型代理网关管理模型调用,需要创建大模型服务供Agent调用。

  1. 登录函数计算FC控制台

  2. 在左侧导航栏选择函数智能 > 智能体AgentRun,进入AgentRun控制台。

  3. 在顶部导航栏选择模型管理,单击添加模型

  4. 保持默认选择的API模型选项,然后选择模型服务提供商(如阿里云),配置具体模型。

    image

  5. 凭证配置部分,选择API密钥。输入您从模型提供商处获得的API密钥(如百炼API Key)。

    image

  6. 单击创建模型,完成模型创建。复制模型服务名称并保存,以备后用。

    image

创建AgentRun入站访问凭证

入站凭证用于验证调用方身份。AgentRun支持多种认证方式,本教程使用JWT认证。

  1. AgentRun控制台顶部导航栏选择其他 > 凭证管理

  2. 保持默认选择的访问AgentRun凭证页签,单击创建访问凭证

    image

  3. 创建访问凭证页面,完成如下配置:

    • 凭证名称:用于标识凭证的名称,例如输入aliyun。

    • 认证类型:选择认证类型为JWT(JSON Web Token)

    • JWKS配置方式:选择JWKS URL获取方式:

    • JWKS端点URL:输入阿里云的JWKS端点地址https://oauth.aliyun.com/v1/keys

    image

  4. 其余设置均保持默认。单击创建凭证,完成访问凭证创建。

    image

步骤二:创建Agent Identity工作负载身份

工作负载身份(Workload Identity)是Agent在阿里云Agent Identity中的身份标识,用于安全获取访问其他服务或资源所需的凭据。

安装Agent Identity CLI

在本地环境中安装Agent Identity CLI(全局安装)。

pip install agent-identity-cli

准备RAM用户凭证

在本地使用RAM用户及权限要求中提到的RAM用户配置凭证。

使用阿里云CLI

  1. 安装阿里云CLI(如已安装,可跳过)。具体请参考步骤一:安装阿里云CLI

  2. 登录阿里云CLI。具体请参考为阿里云CLI配置OAuth认证

  3. 检查凭证配置。执行命令aliyun configure list检查凭证配置是否存在且有效。输出类似如下:

    Profile        | Credential          | Valid   | Region           | Language
    ---------      | ------------------  | ------- | ---------------- | --------
    OAuthProfile * | OAuth:xQcliVOdYA@CN | Valid   | cn-hangzhou      | zh

使用Access Key(不推荐)

CLI执行用户创建访问密钥(Access Key)并配置到本地环境变量中。

export ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret>

创建工作负载身份

执行以下命令创建工作负载身份及关联的RAM角色:

agent-identity-cli create-workload-identity --workload-identity-name <your-workload-identity-name>

CLI将自动创建以下资源:

资源类型

说明

工作负载身份

Agent的云端身份标识。

RAM角色

默认格式为AgentIdentityRole-${workloadIdentityName},代表Agent可扮演的角色。

角色信任策略

允许该工作负载身份扮演关联的RAM角色。

角色权限策略

允许访问出站资源的令牌或API Key。

配置阿里云为Agent Identity入站身份提供商

创建的工作负载身份,需要关联到身份提供商,才可以完成Agent Identity处的入站身份认证。

  1. 登录Agent Identity控制台

  2. 参考教程配置阿里云为Agent Identity的身份提供商创建入站身份提供商,将回调地址设置为http://localhost:8090。完成后,复制应用ID保存以备后用。

    image

  3. 在左侧导航栏选择工作负载身份,找到上一步中创建的工作负载身份。

  4. 单击关联身份提供商,选择创建的入站身份提供商。

    image

  5. 单击确定,完成入站身份提供商配置。

步骤三:部署Agent应用至AgentRun

获取示例代码

示例代码基于LangChain框架,集成了Agent Identity SDK实现安全的第三方服务访问。在本地打开终端,执行以下命令克隆示例代码。

git clone https://github.com/aliyun/agent-identity-dev-kit
cd agent_identity_python_samples/agentrun-langchain_sample

打包示例代码

执行以下命令,打包示例代码为zip文件用于AgentRun部署:

zip -r agentrun-langchain_sample.zip .

创建并配置Agent

  1. AgentRun控制台顶部导航栏选择运行时与沙箱

  2. 点击创建Agent

  3. 选择通过代码创建

    image

  4. 通过代码创建Agent页面,完成以下配置:

    image

    • Agent名称:用于标识Agent的名称。可保持默认。

    • 选择代码来源:保持默认的上传代码包选项。

    • 运行时类型:从下拉菜单中选择Python 3.12。

    • 点击上传文件区域,将打包示例代码步骤生成的zip包上传。

      image

    • 环境变量配置:配置以下环境变量:

      环境变量

      说明

      示例值

      MODEL_SERVICE_NAME

      创建大语言模型服务步骤中保存的模型服务名称

      model-xxxxxx

      MODEL_NAME

      具体模型名称

      qwen-max

      AGENT_IDENTITY_WORKLOAD_IDENTITY_NAME

      创建工作负载身份步骤中指定的工作负载身份名称

      workload-id-for-agentrun

      image

    • 执行角色配置:选择或创建一个RAM角色,确保:

      • 该角色的信任策略中,授权主体(Principal)需要包含函数计算服务(fc.aliyuncs.com)。信任策略示例如下:

        {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "fc.aliyuncs.com"
                ]
              }
            }
          ],
          "Version": "1"
        }
      • 该角色的权限策略包含AliyunAgentIdentityDataFullAccessAliyunAgentRunReadOnlyAccess系统策略。

        image

    • 访问凭证:单击入站:访问凭证按钮,切换为使用已有凭证选项,选择在创建AgentRun入站访问凭证步骤中创建的JWT凭证。

      image

    • 单击开始部署。部署完成后,AgentRun会自动生成一个公网访问端点。请复制访问端点,以备后用。

      image

Web IDE中安装项目依赖

为了保证项目所需依赖的版本及平台架构与Agent的运行时一致,避免出现由于本地和云端平台架构及依赖版本导致的兼容性问题,建议直接在AgentRun提供的Web IDE中安装示例项目所需依赖。

  1. 在创建好的Agent详情页左侧导航栏选择代码与调试,等待Web IDE加载完成。

    image

  2. Web IDE顶部菜单中单击Terminal > New Terminal,打开终端。执行以下命令将依赖安装到当前项目下的python目录中。

    pip install -r requirements.txt -t ./python
  3. 等待所有依赖安装完成后,单击更新按钮,将更新内容部署到运行时中。

    image

步骤四:测试与验证

本教程将结合使用Web前后端应用示例(类似在百炼高代码中使用Agent Identity教程中使用的示例),完成用户登录并调用部署在AgentRun中的Agent,最终实现让您的Agent调用钉钉开放平台并将数据安全地写入钉钉文档。

如您希望更深入地研究整个工作流,可以采用本教程代码仓库README中的方式(采用curl命令)来调用Agent。

创建并配置钉钉应用

如您还没有创建并配置钉钉应用,请参照Agent中安全访问钉钉教程中的步骤一完成创建和配置,并将钉钉配置为Agent IdentityOAuth2凭证提供商。

注意:钉钉凭证提供商的名称必须设置为test-provider-for-dingtalk,以与Agent示例项目中的配置(位于agentrun-langchain_sample/ding_talk_tool.py中)匹配。

image

配置工作负载身份的应用回调地址

为了让Agent Identity为您的Agent从钉钉处获取OAuth访问令牌,需要为创建的工作负载身份配置应用回调地址

  1. 登录Agent Identity控制台

  2. 进入工作负载身份详情页的认证流程区域,单击设置应用回调地址

  3. 设置应用回调地址弹窗中,输入地址http://localhost:8090/callback

    image

  4. 单击确定

配置Web前后端应用示例

  1. 在项目根目录下(agent-identity-dev-kit),执行以下命令切换到端到端示例目录:

    cd agent_identity_python_samples/end-to-end_sample
  2. 安装端到端示例所需的依赖(建议在Python虚拟环境中操作):

    pip install -r requirements.txt
  3. 配置阿里云为Agent Identity入站身份提供商步骤中保存应用ID,以及创建并配置Agent步骤中保存的Agent公网访问端点更新至项目下的application/app.yml文件中:

    INBOUND_APP_ID: "<replace-with-your-oauth-app-id>"
    AGENT_ENDPOINT: "https://<replace-with-your-agent-access-endpoint>/openai/v1/chat/completions"

启动前后端应用

在目录end-to-end_sample下执行以下命令:

python -m application.backend.app

访问应用并与代理交互

  1. 等待代理及前后端应用启动完毕后,在浏览器中输入应用访问地址http://localhost:8090

  2. 完成阿里云登录及用户授权。之后,您可在应用对话窗口中与模型进行对话,例如输入:“将以下内容写入我的钉钉文档:{钉钉文档链接或文档ID} {需要写入的内容}”。

    image

    说明

    您需要提前获取钉钉文档的链接,本示例应用无法新建钉钉文档并写入。

  3. 单击返回结果中的OAuth授权地址并使用钉钉文档持有者账户完成登录和授权。

  4. 完成授权后,如果一切正常,Agent将提示文档已经写入成功。类似如下:

    image

  5. 此时检查钉钉文档,会发现文档已成功写入内容。

    image