在百炼高代码中使用Agent Identity

更新时间:
复制 MD 格式

通过百炼高代码平台,可以快速地开发、部署高度自定义的 AI Agent。通过将Agent Identity与百炼高代码平台集成,可以使用户安全可控地访问Agent,同时令Agent安全可控地访问资源。本教程演示如何在百炼高代码应用中集成Agent Identity,实现智能体(Agent)在执行敏感操作(如访问云资源)前,必须先获得用户即时授权,从而安全、可控地访问云服务。

架构

diagram_agentidentity_bailian1

准备工作

环境要求

本地测试环境需要安装Python(版本≥ 3.10)以及pip包管理器

RAM用户及权限要求

  1. RAM用户要求:

    您需要准备两个RAM用户,分别用于不同目的。

    1. 管理员:用于登录百炼、函数计算(FC)、Agent IdentityRAM控制台进行应用管理及权限配置。

    2. 脚本执行用户:用于执行准备脚本、本地应用测试以及将应用部署至百炼高代码平台。

  2. RAM权限要求

    管理员用户至少需要具备以下权限:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "fc:*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "acs:Service": [
                "fc.aliyuncs.com"
              ]
            }
          }
        },
        {
          "Effect": "Allow",
          "Action": "bailiancontrol:*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ram:ListUserBasicInfos",
            "ram:*Application*"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ram:CreateRole",
            "ram:GetRole",
            "ram:ListRoles",
            "ram:AttachPolicyToRole",
            "ram:ListPolicyAttachments",
            "ram:ListPolicies",
            "ram:GetPolicy",
            "ram:ListUsers"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": "openapiexplorer:*Mcp*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": "agentidentity:*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "log:Get*",
            "log:List*"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "log:Query*",
            "log:CallAiTools"
          ],
          "Resource": "*"
        }
      ]
    }

    脚本执行用户需要具备以下权限:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "bailiandata:*",
            "sfm:*"
          ],
          "Resource": "*"
        },
        {
          "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": "*"
        }
      ]
    }

    上述权限需要通过自定义权限策略授予对应的RAM用户,操作步骤如下:

    1. 创建自定义权限策略。登录RAM控制台,在左侧导航栏选择权限管理 > 权限策略,单击创建权限策略,在脚本编辑页签中将上述JSON内容填入策略文档,然后单击确定并输入策略名称完成创建。管理员和脚本执行用户所需权限不同,需要分别创建两个自定义权限策略。具体操作请参见创建自定义权限策略

    2. 创建RAM用户。在RAM控制台的左侧导航栏选择身份管理 > 用户,分别创建管理员和脚本执行用户。在访问方式区域,管理员选中控制台访问,用于登录各控制台完成配置;脚本执行用户选中使用永久AccessKey访问,用于配置阿里云CLI及部署应用。具体操作请参见创建RAM用户

      说明

      AccessKey Secret仅在创建时显示,请及时保存脚本执行用户的AccessKey IDAccessKey Secret。

    3. RAM用户授权。在用户页面找到目标RAM用户,单击操作列的新增授权。在新增授权面板中,将资源范围设置为账号级别,选择自定义策略并勾选上一步创建的权限策略,然后单击确认新增授权。具体操作请参见管理RAM用户的权限

  3. 百炼业务空间权限要求:

    脚本执行用户需要先被添加为百炼用户,再为其授予部署所需权限。操作步骤如下:

    1. 使用管理员用户登录百炼账号管理页面

    2. 单击新增用户,选择前文创建的脚本执行用户,完成添加。

    3. 在用户列表中找到该用户,单击编辑权限。本文示例使用默认业务空间。

    4. 编辑权限弹窗中,进入页面权限步骤,至少勾选以下权限,然后保存配置。

      • API-KEY:用于获取和管理业务空间的API Key。

      • 智能体-操作:用于部署和管理高代码应用。

服务开通与授权

  1. 确保您的阿里云账号已开通以下服务:

    • 大模型服务平台百炼

    • 函数计算(FC)

  2. 在百炼控制台完成云服务授权。前往阿里云百炼-应用管理,点击高代码类型,并对相关云服务使用进行一键授权。

    确保函数计算FC、对象存储OSS、API网关三个服务在“已授权”状态。

百炼API密钥

获取具有百炼模型调用权限的DashScope API密钥。如您还没有创建百炼API密钥,请参考获取与配置 API Key进行创建和配置。

步骤一:本地安装与测试应用

获取并准备示例代码

  1. 克隆代码仓库。在本地打开终端,执行以下命令克隆示例代码。

    git clone https://github.com/aliyun/agent-identity-dev-kit.git
    cd agent-identity-dev-kit/agent_identity_python_samples/end-to-end_sample
  2. 安装依赖。建议创建并激活一个 Python 虚拟环境,然后安装项目所需的依赖。

    pip install -r requirements.txt
  3. 配置环境变量

    export AGENT_IDENTITY_REGION_ID=cn-beijing # 本教程以华北2(北京)为示例
    export DASHSCOPE_API_KEY=<YOUR-API-KEY> # DashScope API
    export MODELSTUDIO_WORKSPACE_ID=<YOUR-WORKSPACE-ID> # 可选,替换为百炼的业务空间ID,该空间将部署高代码应用,不设置将使用默认业务空间

准备RAM用户凭证

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

使用阿里云CLI

  1. 安装阿里云CLI(如已安装,可跳过)。具体请参考快速使用 CLI

  2. 配置脚本执行用户的凭证。执行以下命令,使用脚本执行用户AccessKey创建名为agentidentity的配置项(Profile)。

    aliyun configure set \
      --profile agentidentity \
      --mode AK \
      --region cn-beijing \
      --language zh \
      --access-key-id '<YOUR-ACCESS-KEY-ID>' \
      --access-key-secret '<YOUR-ACCESS-KEY-SECRET>'
    说明

    Agent Identity支持的地域可在Agent Identity控制台左上角的地域下拉列表中查看。本教程以华北2(北京)为示例,请确保--regionAGENT_IDENTITY_REGION_ID环境变量的取值保持一致。

    更多登录方式(如OAuth、RAM角色)请参见为阿里云CLI配置OAuth认证

  3. 验证凭证配置。执行以下命令,确认返回的身份信息为脚本执行用户

    aliyun sts get-caller-identity --profile agentidentity --region cn-beijing

    输出类似如下,其中Arn中的用户名应为脚本执行用户:

    {
        "AccountId": "xxxxxxxxxxxxxxxx",
        "Arn": "acs:ram::xxxxxxxxxxxxxxxx:user/<脚本执行用户名>",
        "IdentityType": "RAMUser",
        "PrincipalId": "xxxxxxxxxxxxxxxxxxx",
        "RequestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }

    您也可以执行aliyun configure list查看已配置的Profile列表,输出类似如下:

    Profile          | Credential          | Valid   | Region           | Language
    ---------        | ------------------  | ------- | ---------------- | --------
    agentidentity *  | AK:******           | Valid   | cn-beijing       | zh

使用Access Key(不推荐)

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

export ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR-ACCESS-KEY-ID>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR-ACCESS-KEY-SECRET>

执行准备脚本

在本地项目根目录下运行准备脚本prepare.py来自动创建所需的云资源:

python -m prepare

此脚本执行以下操作:

  1. 创建身份提供者

  2. 创建阿里云OAuth 2.1入站应用

  3. 创建阿里云MCP服务所需的OAuth 2.1 Native应用

  4. 创建工作负载身份和角色

  5. 配置凭证提供者

脚本会输出创建的资源信息到根目录下的.config.json文件中。其中包含mcp_app_name,需要在后续使用到。

如果执行过程中出现异常失败(如网络问题、资源超过quota等)需要清除创建的资源后再重新运行准备脚本,清除创建的资源请运行:

python -m clear
说明

为避免对账号下的RAM资源造成影响,清理逻辑不会删除角色/自定义策略,需要手动删除。

配置OpenAPI MCP服务

  1. 导航到阿里云OpenAPI 自定义MCP服务页面,完成登录。

  2. 在搜索框中输入"resourcecenter",单击搜索结果中的"resourcecenter"系统服务。

  3. OAuth配置区域,单击修改

  4. 在弹出的修改OAuth配置对话框中,选择自定义OAuth。单击下拉菜单,选择准备脚本所创建的MCP应用名称。具体应用名称应与项目根目录下的.config.json文件中的mcp_app_name字段值匹配。单击确认修改

  5. 配置信息区域,复制Streamable HTTP Endpoint地址,将其更新至项目deploy_starter/config.yml文件中的MCP_SERVER字段。

测试应用

  1. 启动Agent代理服务。在根目录下执行以下命令:

    python -m deploy_starter.main
  2. 启动前后端应用。在根目录下执行以下命令:

    python -m application.backend.app
  3. 访问应用并与代理交互

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

    2. 完成阿里云登录及用户授权。之后,您可在应用对话窗口中与模型进行对话,例如输入:“查询我阿里云账号下的VPC配置信息”。

    3. 单击返回结果中的OAuth授权地址并完成授权。

      系统返回提示信息,说明首次对话需要授权获取MCP工具列表,并显示阿里云MCP服务OAuth授权链接。

    4. 完成授权后,如果一切正常,将返回查询结果。查询结果显示共有6VPC实例分布在三个地域。以杭州地域(cn-hangzhou)为例,每个VPC条目包含VPC名称资源ID资源组ID创建时间等字段,部分条目还包含标签信息。

    说明

    更多与Agent交互的示例,请参考代码仓库的README文档。

步骤二:打包并部署Agent至百炼高代码

打包本地代码

  1. 安装打包及部署代码所需依赖。在项目根目录执行以下命令:

    pip install rich
    pip install alibabacloud-bailian20231229
  2. 配置脚本执行用户的AccessKey。打包与部署命令通过AccessKey调用百炼及函数计算的API,请在执行打包和部署命令的终端中配置以下环境变量:

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR-ACCESS-KEY-ID>
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR-ACCESS-KEY-SECRET>
    说明

    请使用RAM用户及权限要求中创建的脚本执行用户AccessKey。

  3. 打包Agent。在项目根目录执行下面命令进行打包:

    python setup.py bdist_wheel

    打包成功后,将产生.whl文件并保存至项目下的dist目录中。

部署Agent至百炼

  1. 在项目根目录下执行以下命令,将打包出来的whl文件部署到百炼:

    runtime-fc-deploy --deploy-name agent-identity-sample  --whl-path <PATH_TO_YOUR_NEW_WHL_FILE> --telemetry enable

    执行结果类似如下:

    (.venv) xxx agentscope-sample % runtime-fc-deploy --deploy-name agent-identity-sample --whl-path ./dist/agentdev_starter_5ca90297-0.1.0-py3-none-any.whl --telemetry enable
      Built wheel at    /Users/xxx                          agentscope-sample/dist/agentdev_starter_5ca90297-0.1.0-py3-none-any.whl
      Resource Name     agent-identity-sample
                        Deploy Result
    Console URL: https://bailian.console.aliyun.com/?tab=app#/app-center
    Deploy ID: bf96fd32xxxxxxxxxxxxxxxxxxxxxxxx
    说明

    如您在部署过程中遇到了权限相关报错,请检查RAM用户及权限要求中提到的RAM权限百炼空间权限是否有被授予脚本执行用户

  2. 部署成功后,稍等片刻,您可在阿里云百炼-应用管理中找到部署的Agent应用(状态为已发布)。

    应用管理页面选择高代码分类标签,即可看到名为 agent-identity-sample 的应用,状态显示为绿点已发布

步骤三:配置百炼高代码应用

在函数计算中修改函数启动命令

高代码应用部署到函数计算后,需要将函数的启动命令修改为示例代码的入口模块,否则函数无法正常启动。

  1. 阿里云百炼-应用管理中找到并单击部署的Agent应用,进入应用详情页。

  2. 在高代码应用详情页,单击基础配置区域右侧的查看详情,进入高代码应用所在的函数计算函数详情页。

  3. 在函数详情页,单击配置页签,然后单击基础配置区域右侧的编辑

  4. 启动命令修改为'python3 -m deploy_starter.main',然后单击部署

在函数计算中配置实例RAM角色

  1. 登录RAM控制台,创建一个用于关联到函数计算实例的RAM角色,云服务主体选择“函数计算”。具体步骤请参见创建可信实体为阿里云服务的RAM角色

  2. RAM控制台中为创建的RAM角色授予AliyunAgentIdentityDataFullAccess系统策略。

  3. 阿里云百炼-应用管理中找到并单击部署的Agent应用。在高代码应用详情页,单击基础配置区域右侧的查看详情,进入高代码应用所在函数计算实例详情页。

  4. 在函数计算详情页,单击配置页签。在配置页签下,单击高级配置区域右侧的编辑按钮。

  5. 在高级配置编辑页,单击权限。在函数角色输入框中搜索并选择刚创建的RAM角色。

  6. 单击部署

在百炼中配置环境变量

  1. 阿里云百炼-应用管理中找到并单击部署的Agent应用,进入应用详情页。

  2. 在高代码应用详情页,单击环境变量区域右侧的编辑按钮。

  3. 在末尾添加配置如下两个环境变量,完成后单击确定

    • AGENT_IDENTITY_WORKLOAD_IDENTITY_NAME:设置为项目根目录.config.json中的workload_identity_name字段值。

    • DASHSCOPE_API_KEY:设置为百炼当前业务空间中的API Key。

  4. 在弹出的保存环境变量确认框中,单击确认

验证部署情况

完成上述配置后,在高代码应用详情页的调试区域,可以通过以下两种方式验证应用是否部署成功。

  • API测试:选择API测试页签,将Path设置为/health,然后单击运行。返回成功响应说明应用已正常启动。

  • 文本对话体验:选择文本对话体验页签,单击立即体验,与Agent进行对话,验证应用能否正常响应。

在本地代码中配置公网访问地址和鉴权Token

  1. 阿里云百炼-应用管理中找到并单击部署的Agent应用。在高代码应用详情页,复制触发器区域下的公网访问地址鉴权token

  2. 将公网访问地址和鉴权Token更新至项目下的application/app.yml文件中(在代码仓库中的完整路径为agent_identity_python_samples/end-to-end_sample/application/app.yml):

    AGENT_BEARER_TOKEN: "<鉴权Token>"
    AGENT_ENDPOINT: "<公网地址>/process"

步骤四:测试与验证

Agent已部署至百炼高代码平台,因此本地无需再启动Agent代理服务,仅启动前后端应用即可完成测试。

  1. 启动前后端应用。在项目根目录下执行以下命令:

    python -m application.backend.app
  2. 访问应用并与Agent交互。等待前后端应用启动完毕后,在浏览器中访问http://localhost:8090,完成阿里云登录及用户授权,然后在对话窗口中与模型进行对话。详细的交互与授权步骤请参见测试应用

日志查询(可选)

您可在高代码应用所在的函数计算实例上查看请求日志,以了解调用历史及Agent的输出信息。

在函数详情页选择日志页签,通过调用请求列表可查看每次调用的请求 ID、调用状态(如调用成功 200)、内存用量及执行时间。日志正文中包含 MCP 工具注册记录(如 Registered 5 tool functions from ResourceCenter-20221201-SearchResources)以及 Agent 的 tool_use 调用详情,展示 Agent 通过 ResourceCenter API 搜索 OSS Bucket 资源的完整过程。

注意事项

  • 如您希望再次执行准备脚本prepare.py,请先在项目根目录下执行清理脚本以清理资源:

    python -m clear
  • 项目准备脚本prepare.py下的常量配置信息不可更改,否则会导致应用无法正常工作。

  • 如果您希望将前后端应用部署至阿里云(如ECS示例),需要为后端应用所在的环境关联实例RAM角色(如ECS实例角色、函数计算实例角色),并授予AliyunAgentIdentityDataCompleteAuthAccess系统策略。否则Agent将无法获得OAuth Access Token。