对 Vertex AI API 请求进行身份验证

本页面介绍了如何对 Google Distributed Cloud (GDC) 网闸隔离配置上的 Vertex AI 服务调用进行身份验证。您必须设置令牌身份验证,以确保在经过网闸隔离的应用中向 Vertex AI API 发出的请求安全。此过程通过提供您的身份并授权您的互动来验证您的 API 请求。

本页面适用于应用运维人员群组中负责设置应用和开发环境以启用 AI 功能的应用开发者。如需了解详情,请参阅适用于 GDC 网闸隔离配置文档的受众群体。

准备工作

如需对 API 请求进行身份验证并配置服务账号,请向管理员申请必要的权限。此外,请确保您已为 Vertex AI 设置项目。如需了解详情,请参阅为 Vertex AI 设置项目。

  • 在开发环境中设置身份验证之前,请务必更新本地受信任证书存储区。

申请 IAM 角色

请与您的 IAM 项目管理员联系,请求在项目命名空间中授予以下角色:

  • IAM Project Admin (project-iam-admin):在项目命名空间中创建服务账号并管理角色绑定。
  • AI OCR Developer (ai-ocr-developer):对 OCR API 的请求进行身份验证。
  • AI Speech Developer (ai-speech-developer):对 Speech-to-Text API 的请求进行身份验证。
  • AI 文本嵌入开发者 (ai-text-embedding-developer):对 Text-Embedding-Gecko 模型的请求进行身份验证。
  • AI Text Embedding Multilingual Developer (ai-text-embedding-multilingual-developer):对 Text-Multilingual-Embedding 模型的请求进行身份验证。
  • AI Translation Developer (ai-translation-developer):对 Vertex AI Translation API 的请求进行身份验证。
  • Vertex AI Prediction User (vertex-ai-prediction-user):对发送到在线预测模型的预测请求进行身份验证。

如需详细了解这些角色,请参阅准备 IAM 权限。

向 Vertex AI 服务进行身份验证

与 Vertex AI 服务的交互通过身份验证令牌完成。令牌是一种数字对象,可在您提供有效凭证后验证您的身份和授权。该令牌包含有关您账号的特定信息,以及该账号访问和操作服务及资源的权限。

您可以通过以下两种方式设置身份验证:

使用您的用户账号进行身份验证

以下内容将指导您为用户账号获取身份验证令牌:

  1. 记下您要使用的 API 的端点。

  2. 为您的用户账号授予准备 IAM 权限中列出的相应角色,以获取对您要使用的 Vertex AI 服务或生成式 AI 模型的访问权限。

  3. 使用您必须与 API 交互的用户账号登录 Distributed Cloud:

    gdcloud auth login
    
  4. 获取身份验证令牌:

    gdcloud auth print-identity-token --audiences=https://ENDPOINT
    

    将 ENDPOINT 替换为您为组织使用的 API 端点。如需了解详情,请查看服务状态和端点。

    根据身份验证令牌的预期用途,您可能需要在受众群体路径中的服务端点后添加端口,如下所示:

    • 如果您在请求中使用客户端库,则必须在受众群体路径中的服务端点后添加端口 :443。因此,命令中的 --audiences 路径必须为 https://ENDPOINT:443。
    • 如果您在请求中使用 gRPC、curl 或程序化 REST 调用,请勿包含端口。因此,命令中的 --audiences 路径必须为 https://ENDPOINT。

    输出会显示身份验证令牌。将令牌添加到您发出的命令行请求的标头中,如以下示例所示:

     -H "Authorization: Bearer TOKEN"
    

    将 TOKEN 替换为输出显示的身份验证令牌的值。

使用服务账号进行身份验证

以下内容将指导您为服务账号获取身份验证令牌:

  1. 记下您要使用的 API 的端点。

  2. 设置您要用于访问 Vertex AI 服务或生成式 AI 模型的服务账号。

  3. 向服务账号授予准备 IAM 权限中列出的相应角色,使其能够访问您要使用的服务或模型。

  4. 获取服务账号的服务密钥对。

  5. 设置以下环境变量:

    export GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_SERVICE_KEY
    

    将 PATH_TO_SERVICE_KEY 替换为包含服务账号密钥对的 JSON 文件的路径。

  6. 安装 google-auth 客户端库:

    pip install google-auth
    
  7. 将以下代码添加到 Python 脚本中:

    import os
    import google.auth
    from google.auth.transport import requests
    import requests as reqs
    
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "PATH_TO_SERVICE_KEY"
    os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "CERT_NAME"
    
    # If you use a client library for your request,
    # you must include port :443 after the service endpoint
    # in the audience path.
    audience = "https://ENDPOINT"
    
    creds, project_id = google.auth.default()
    print(project_id)
    creds = creds.with_gdch_audience(audience)
    
    def test_get_token():
      sesh = reqs.Session()
      req = requests.Request(session=sesh)
      creds.refresh(req)
      print(creds.token)
    
    if __name__=="__main__":
      test_get_token()
    

    替换以下内容:

    • PATH_TO_SERVICE_KEY:包含服务账号密钥对的 JSON 文件的路径。
    • CERT_NAME:证书授权机构 (CA) 证书文件的名称,例如 org-1-trust-bundle-ca.cert。只有在开发环境中,您才需要此值。否则,请省略此参数。
    • ENDPOINT:您为组织使用的 API 端点。如需了解详情,请查看服务状态和端点。根据身份验证令牌的预期用途,您可能需要在受众群体路径中的服务端点后面添加端口,如下所示:

      • 如果您在请求中使用客户端库,则必须在受众群体路径中的服务端点后添加端口 :443。因此,脚本中的 audience 路径必须为 "https://ENDPOINT:443"。
      • 如果您在请求中使用 gRPC、curl 或程序化 REST 调用,请勿包含端口。因此,脚本中的 audience 路径必须为 "https://ENDPOINT"。
  8. 保存 Python 脚本。

  9. 运行 Python 脚本以提取令牌:

      python SCRIPT_NAME
    

    将 SCRIPT_NAME 替换为您为 Python 脚本指定的名称,例如 token.py。

    输出会显示身份验证令牌。将令牌添加到您发出的命令行请求的标头中,如以下示例所示:

     -H "Authorization: Bearer TOKEN"
    

    将 TOKEN 替换为输出显示的身份验证令牌的值。