为所部署的代理管理访问权限

不同的访问模式可使用不同类型的身份验证方法:

使用场景 身份验证方法 关于此身份验证方法
直接从代理中访问数据源。 服务账号 所部署的代理可以访问其服务账号有权访问的所有资源。
从代理中使用 API 密钥向端点发送请求。 API 密钥 在使用此身份验证方法之前,请确定您要使用的 API 支持 API 密钥。
为代理的最终用户处理用户账号、注册、登录或授权。 OAuth 客户端 ID 要求代理向用户进行请求并获得用户同意。

角色

您在 Vertex AI Agent Engine 上部署的代理使用 AI Platform Reasoning Engine Service Agent 或您的自定义服务账号运行。如需了解详情,请参阅为代理设置身份和权限

AI Platform Reasoning Engine Service Agent

AI Platform Reasoning Engine Service Agent 服务账号使用 service-PROJECT_NUMBER@gcp-sa-aiplatform-re.iam.gserviceaccount.com 格式。

此服务账号具有 Vertex AI Reasoning Engine Service Agent 角色 (roles/aiplatform.reasoningEngineServiceAgent),该角色可授予所部署的代理所需的默认权限。您可以在 IAM 文档中查看默认权限的完整列表。

列出所部署的代理的角色

控制台

  1. 转到 IAM 页面。

    转到 IAM

  2. 选择与您的 Google Cloud 项目对应的项目。

  3. 找到与用作代理身份的服务账号相匹配的主账号

  4. 您可以在角色列下找到所部署的代理的角色。

gcloud

首先,安装初始化 gcloud CLI。然后运行以下命令:

gcloud projects get-iam-policy PROJECT_ID_OR_NUMBER \
  --flatten="bindings[].members" \
  --filter="bindings.members:serviceAccount:PRINCIPAL" \
  --format="value(bindings.role)"

其中

  • PROJECT_ID_OR_NUMBER 是您的项目 ID 或编号,
  • PRINCIPAL 基于在 Vertex AI Agent Engine 上部署代理时使用的服务账号

如需了解详情,请参阅 IAM 文档CLI 参考文档

Python

首先,运行以下命令来安装客户端库

pip install google-api-python-client

然后验证自己的身份,并运行以下命令以列出所部署的代理的角色:

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2

project_id = "PROJECT_ID"
principal = "PRINCIPAL"

crm_service = resourcemanager_v3.ProjectsClient()
policy = crm_service.get_iam_policy(iam_policy_pb2.GetIamPolicyRequest(
    resource=f"projects/{project_id}"
))
for binding in policy.bindings:
    for member in binding.members:
        if principal in member:
            print(binding.role)

其中,PRINCIPAL 基于在 Vertex AI Agent Engine 上部署代理时使用的服务账号

为所部署的代理授予角色

  1. 转到 IAM 页面。

    转到 IAM

  2. 选择与您的 Google Cloud 项目对应的项目。

  3. 找到与用作代理身份的服务账号相匹配的主账号

  4. 点击“修改”按钮,添加角色,然后点击“保存”按钮,以向主账号添加所需的角色。

gcloud

首先,安装初始化 gcloud CLI。然后运行以下命令:

gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE_NAME

其中

  • PRINCIPAL 基于在 Vertex AI Agent Engine 上部署代理时使用的服务账号
  • ROLE_NAME 是您要授予的角色的名称。如需了解预定义角色的列表,请参阅了解角色

如需了解详情,请参阅 IAM 文档CLI 参考文档

Python

我们不建议您自行编写 Python 代码来为所部署的代理授予或撤销角色。我们建议您使用 Google Cloud 控制台或 gcloud 进行一次性操作,或使用 Terraform 以编程方式管理 IAM 访问权限控制。如果您希望或需要使用 Python 执行此操作,请参阅 IAM 客户端库的文档

从所部署的代理撤销角色

  1. 转到 IAM 页面。

    转到 IAM

  2. 选择与您的 Google Cloud 项目对应的项目。

  3. 找到与用作代理身份的服务账号相匹配的主账号

  4. 点击“编辑”按钮,移除相应角色,然后点击“保存”按钮,以从主账号撤销角色。

gcloud

首先,安装初始化 gcloud CLI。然后运行以下命令:

gcloud projects remove-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE_NAME

其中

  • PRINCIPAL 基于在 Vertex AI Agent Engine 上部署代理时使用的服务账号
  • ROLE_NAME 是您要撤销的角色的名称。如需了解预定义角色的列表,请参阅了解角色

如需了解详情,请参阅 IAM 文档CLI 参考文档

Python

我们不建议您自行编写 Python 代码来为所部署的代理授予或撤销角色。我们建议您使用 Google Cloud 控制台或 gcloud 进行一次性操作,或使用 Terraform 以编程方式管理 IAM 访问权限控制。如果您希望或需要使用 Python 执行此操作,请参阅 IAM 客户端库的文档

Secret

密文包含一个或多个密文版本,以及标签和复制信息等元数据。Secret 的实际载荷存储在 Secret 版本中。Secret 在项目级进行管理(通过 Secret Manager),并且可以在所部署的代理之间共享。如需在 Secret Manager 中列出与某个代理对应的 Secret,您可以添加标签并使用这些标签进行过滤。

创建 Secret

控制台

  1. 前往 Secret Manager 页面。

    转到 Secret Manager

  2. Secret Manager 页面上,点击创建密钥

  3. 名称字段中,输入 Secret 的名称(例如 my-secret)。

  4. 可选:如需在创建初始 Secret 时也添加 Secret 版本,请在 Secret 值字段中输入 Secret 的值(例如 abcd1234)。

  5. 前往标签,然后点击添加标签

  6. 输入键及其对应的值以创建标签。

  7. 点击创建密钥

gcloud

首先,安装初始化 gcloud CLI。然后运行以下命令:

gcloud secrets create SECRET_ID --replication-policy="automatic"
gcloud secrets versions add SECRET_ID --data-file="FILE_PATH"

其中

  • SECRET_ID 是相应 Secret 的 ID 或 Secret 的完全限定标识符。
  • FILE_PATH 是包含版本详细信息的文件的完整路径(包括文件名)。

如需了解详情,请参阅 Secret Manager 文档,了解如何创建 SecretSecret 版本;或者参阅 CLI 参考文档,了解如何创建 SecretSecret 版本

Python

首先,运行以下命令来安装客户端库

pip install google-cloud-secret-manager

然后验证自己的身份,并运行以下命令

from google.cloud import secretmanager
import google_crc32c

client = secretmanager.SecretManagerServiceClient()
secret = client.create_secret(request={
    "parent": "projects/PROJECT_ID",
    "secret_id": "SECRET_ID",
    "secret": {  # google.cloud.secretmanager_v1.types.Secret
        # Required. The replication policy cannot be changed after the Secret has been created.
        "replication": {"automatic": {}},
        # Optional. Labels to associate with the secret.
        "labels": {"type": "api_key", "provider": "anthropic"},
        # Optional. The secret's time-to-live in seconds with format (e.g.,
        # "900s" for 15 minutes). If specified, the secret versions will be
        # automatically deleted upon reaching the end of the TTL period.
        "ttl": "TTL",
    },
})

anthropic_api_key = "API_KEY"  # The secret to be stored.
payload_bytes = anthropic_api_key.encode("UTF-8")
# Optional. Calculate payload checksum.
crc32c = google_crc32c.Checksum()
crc32c.update(payload_bytes)

version = client.add_secret_version(request={
    "parent": secret.name,
    "payload": {
        "data": payload_bytes,
        "data_crc32c": int(crc32c.hexdigest(), 16),  # Optional.
    },
})
print(f"Added secret version: {version.name}")

获取 Secret

控制台

  1. 前往 Secret Manager 页面。

    转到 Secret Manager

  2. Secret Manager 页面上,点击 Secret 的名称进行描述。

  3. Secret 详细信息页面列出了有关 Secret 的信息。

gcloud

首先,安装初始化 gcloud CLI。然后运行以下命令:

gcloud secrets versions describe VERSION_ID --secret=SECRET_ID

其中

  • VERSION_ID 是相应 Secret 版本的 ID,
  • SECRET_ID 是相应 Secret 的 ID 或 Secret 的完全限定标识符。

如需了解详情,请参阅 Secret Manager 文档CLI 参考文档

Python

首先,运行以下命令来安装客户端库

pip install google-cloud-secret-manager

然后验证自己的身份,并运行以下命令

from google.cloud import secretmanager

client = secretmanager.SecretManagerServiceClient()
name = client.secret_path("PROJECT_ID", "SECRET_ID")
response = client.get_secret(request={"name": name})

列出 Secret

控制台

  1. 前往 Secret Manager 页面。

    转到 Secret Manager

  2. 在“Secret”表中,点击过滤条件字段。

  3. 选择过滤条件属性及其对应的值,例如 Location:asia-east1

  4. 系统会根据输入的值自动过滤表。

  5. (可选)如需过滤 Secret 版本,请选择一个 Secret 以访问其版本,然后使用版本表中的过滤条件选项。

gcloud

首先,安装初始化 gcloud CLI。

如需列出项目的所有 Secret,请运行以下命令:

gcloud secrets list --filter="FILTER"

其中,FILTER 是字符串(例如 name:asecret OR name:bsecret)或正则表达式(例如 name ~ "secret_ab.*")。

如需列出某个 Secret 的所有版本,请运行以下命令:

gcloud secrets versions list SECRET_ID

其中,SECRET_ID 是相应 Secret 的 ID 或 Secret 的完全限定标识符。

如需了解详情,请参阅 Secret Manager 文档,了解如何过滤 Secret列出 Secret 版本;或者参阅 CLI 参考文档,了解如何列出 SecretSecret 版本

Python

首先,运行以下命令来安装客户端库

pip install google-cloud-secret-manager

然后验证自己的身份,并运行以下命令

from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
for secret in client.list_secrets(request={
    "parent": "projects/PROJECT_ID",
    "filter": "FILTER", # e.g. "labels.provider=anthropic"
}):
    print(f"Found secret: {secret.name}")

更新 Secret

控制台

  1. 前往 Secret Manager 页面。

    转到 Secret Manager

  2. Secret Manager 页面上,点击 Secret 名称旁边的复选框。

  3. 如果信息面板已关闭,请点击显示信息面板以显示信息。

  4. 信息面板中,选择标签标签页。

  5. 点击添加标签,然后输入标签的键和值。

  6. 点击保存

gcloud

首先,安装初始化 gcloud CLI。然后运行以下命令:

gcloud secrets update SECRET_ID --update-labels=KEY=VALUE

其中

  • SECRET_ID 是相应 Secret 的 ID 或 Secret 的完全限定标识符,
  • KEY 是标签键,
  • VALUE 是标签的对应值。

如需了解详情,请参阅 Secret Manager 文档CLI 参考文档

Python

首先,运行以下命令来安装客户端库

pip install google-cloud-secret-manager

然后验证自己的身份,并运行以下命令

from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
name = client.secret_path("PROJECT_ID", "SECRET_ID")
response = client.update_secret(request={
    "secret": {
        "name": name,
        "labels": {"type": "api_key", "provider": "anthropic"}, # updated labels
    },
    "update_mask": {"paths": ["labels"]},
})
print(f"Updated secret: {response.name}")

删除 Secret

控制台

  1. 前往 Secret Manager 页面。

    转到 Secret Manager

  2. Secret Manager 页面上 Secret 对应的操作列中,点击查看更多

  3. 在菜单中选择删除

  4. 删除密文对话框中,输入密文的名称。

  5. 点击删除密文按钮。

gcloud

首先,安装初始化 gcloud CLI。

如需删除 Secret 版本,请运行以下命令:

gcloud secrets versions destroy VERSION_ID --secret=SECRET_ID

其中

  • VERSION_ID 是相应 Secret 版本的资源名称,
  • SECRET_ID 是相应 Secret 的 ID 或 Secret 的完全限定标识符。

如需删除某个 Secret 及其所有版本,请运行以下命令:

gcloud secrets delete SECRET_ID

其中,SECRET_ID 是相应 Secret 的 ID 或 Secret 的完全限定标识符

如需了解详情,请参阅 Secret Manager 文档,了解如何删除 Secret销毁 Secret 版本;或者参阅 CLI 参考文档,了解如何删除 Secret销毁 Secret 版本

Python

首先,运行以下命令来安装客户端库

pip install google-cloud-secret-manager

然后验证自己的身份,并运行以下命令

from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
name = client.secret_path("PROJECT_ID", "SECRET_ID")
client.delete_secret(request={"name": name})

OAuth 客户端和凭证

客户端 ID 用于向 Google 的 OAuth 服务器标识单个代理。如果您的代理在多个平台上运行,那么每个平台都需要有自己的客户端 ID。概括来讲,如需集成基于 OAuth 的代理,您需要执行以下操作:

  1. 创建 OAuth 客户端和凭证。

  2. 将客户端 ID 和 Secret 存储在 Secret Manager 中。(请参阅创建 Secret)。

  3. 在代理中开发期间访问 Secret。

创建 OAuth 客户端凭据

  1. 在 Google Cloud 控制台中,前往 Google Auth Platform > 客户端页面。

    前往“Google Auth Platform”>“客户端”

  2. (如有必要)如果屏幕显示“尚未配置 Google Auth Platform”,请点击开始使用,然后填写项目配置。(可以在以后更新这些内容。)如需详细了解是否可用于生产环境,请访问 OAuth 2.0 政策合规性

  3. 点击创建客户端

  4. 应用类型设置为 Web application

  5. 将 OAuth 客户端的名称设置为 OAUTH_CLIENT_DISPLAY_NAME

  6. 已获授权的重定向 URI 下,添加 REDIRECT_URI 的 URI。

  7. 在“客户端密钥”下,点击“下载 JSON”按钮。这会下载一个包含以下内容的 client_secret.json 文件:

{'web': {
    'client_id': "CLIENT_ID",
    'client_secret': "CLIENT_SECRET",
    'project_id': "PROJECT_ID",
    'redirect_uris': [REDIRECT_URIs],
    'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
    'token_uri': 'https://www.googleapis.com/oauth2/v3/token',
    'auth_provider_x509_cert_url': 'https://www.googleapis.com/oauth2/v1/certs',
    'javascript_origins': "JAVASCRIPT_ORIGINS",  # Optional.
}}
  1. 将客户端 ID 和 Secret 存储在 Secret Manager 中,例如,
from google.cloud import secretmanager
import google_crc32c
import json

client = secretmanager.SecretManagerServiceClient()
secret = client.create_secret(request={
    "parent": "projects/PROJECT_ID",
    "secret_id": "OAUTH_SECRET_ID", # e.g. "oauth-client-demo"
    "secret": {
        "labels": {"type": "oauth_client"},
        "replication": {"automatic": {}},
    },
})

payload_bytes = json.dumps(cred).encode("UTF-8")
crc32c = google_crc32c.Checksum()
crc32c.update(payload_bytes)

client.add_secret_version(request={
    "parent": secret.name,
    "payload": {
        "data": payload_bytes,
        "data_crc32c": int(crc32c.hexdigest(), 16),
    },
})

列出 OAuth 客户端

  1. 在 Google Cloud 控制台中,前往 Google Auth Platform > 客户端页面。

    前往“Google Auth Platform”>“客户端”

  2. 系统会列出您拥有的 OAuth 客户端凭证。

删除 OAuth 客户端

  1. 在 Google Cloud 控制台中,前往 Google Auth Platform > 客户端页面。

    前往“Google Auth Platform”>“客户端”

  2. 选择要删除的 OAuth 客户端凭证,然后点击“删除”。

客户管理的加密密钥 (CMEK)

默认情况下, Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您对保护数据的密钥有特定的合规性或监管要求,则可以将客户管理的加密密钥 (CMEK) 用于所部署的代理。

请参阅 Vertex AI 的 CMEK 文档以了解有关将 CMEK 与 Vertex AI 搭配使用的常规要求和指南,包括以下内容:

  • 项目设置(结算和已启用的 API)
  • 密钥环和密钥的创建
  • 所需的权限授予

如需为代理启用 CMEK,您需要在创建 Agent Engine 实例时指定 encryption_spec 并提供 Cloud KMS 密钥。如需查看代码示例,请参阅配置客户管理的加密密钥

限制

将 CMEK 与 Vertex AI Agent Engine 搭配使用时,存在以下限制:

  • 不允许使用多区域密钥:仅支持单区域密钥。密钥环和密钥的区域必须与 Agent Engine 实例的区域相同。

  • 无法为 CMEK 实例更新加密密钥:如果在部署代理时使用了 CMEK 密钥,则无法针对该部署更改加密密钥。如需使用新密钥,您必须部署新的 Agent Engine 实例。

  • 某些元数据和运营数据未加密:CMEK 会加密代理的静态核心数据。不过,某些元数据和运行时运营数据不会加密。包括:

    • 代理元数据:
      • 显示名
      • 说明
    • 运行时运营数据:
      • 服务账号邮箱
      • 代理对象类方法名称
      • 环境变量