控制对 Vertex AI 端点的访问权限

本页面介绍了如何通过对 Vertex AI 端点设置 IAM 政策来控制对其的访问权限。本教程假定您已熟悉 IAM 概念,例如政策、角色、权限和主账号,如使用 IAM 进行 Vertex AI 访问权限控制以及与访问管理相关的概念中所述。

IAM 政策包含一个或多个角色绑定,用于定义哪些 IAM 角色与哪些主账号关联。一个角色对应授予主账号的一组权限。Vertex AI 提供了可在政策中使用的预定义角色。或者,您也可以创建自己的自定义角色。

获取 IAM 政策

您可以使用 REST API 查看 Vertex AI 端点的当前 IAM 政策。为此,您必须对端点或项目拥有 endpoints.getIamPolicy 权限。Vertex AI Administrator 角色 (roles/aiplatform.admin) 可授予此权限。

REST

如需从资源中获取 IAM 政策,请发送使用 getIamPolicy 方法的 POST 请求。

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION_ID:端点所在的区域,例如 us-central1
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • ENDPOINT_ID:端点的 ID。

HTTP 方法和网址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy"

PowerShell

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy" | Select-Object -Expand Content

您应该会收到包含当前 IAM 政策的 JSON 响应:

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

设置 IAM 政策

您可以使用 REST API 为端点设置 IAM 政策。为此,您必须对端点或项目拥有 endpoints.setIamPolicy 权限。Vertex AI Administrator 角色 (roles/aiplatform.admin) 可授予此权限。

REST

如需对资源设置 IAM 政策,请发送使用 setIamPolicy 方法的 POST 请求。

设置 IAM 政策会替换任何现有政策;不会附加更改。如需修改资源的现有政策,请使用 getIamPolicy 方法获取其现有政策,然后进行修改。在 setIamPolicy 请求中添加修改后的政策以及 etag

如果您收到 409 错误代码,则表示并发的 setIamPolicy 请求已更新该政策。使用 getIamPolicy 方法获取政策更新后的 etag,然后使用新的 etag 重试 setIamPolicy 请求。

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION_ID:端点所在的区域,例如 us-central1
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • ENDPOINT_ID:端点的 ID。
  • ROLE:包含要授予的权限的 IAM 角色,例如 roles/aiplatform.user
  • PRINCIPAL:被授予角色权限的主账号,例如 user:myuser@example.com
  • ETAG:用于防止政策的同时更新相互覆盖的字符串值。此值作为 getIamPolicy 响应的一部分返回。

HTTP 方法和网址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy

请求 JSON 正文:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "PRINCIPAL"
        ]
      },
      ...
    ],
    "etag": "ETAG"
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy" | Select-Object -Expand Content

您应该会收到包含当前 IAM 政策的 JSON 响应:

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

验证用户对端点的 IAM 权限

您可以验证当前通过身份验证的用户是否具有端点的特定 IAM 权限。

REST

如需验证用户是否具有某项资源的特定 IAM 权限,请发送使用 testIamPermissions 方法的 POST 请求。以下示例可让您测试当前通过身份验证的用户是否具有端点的一组 IAM 权限。

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION_ID:端点所在的区域,例如 us-central1
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • ENDPOINT_ID:端点的 ID。

HTTP 方法和网址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d

请求 JSON 正文:

{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应。响应仅包含来自当前经过身份验证的用户可用的请求 JSON 正文中的权限。
{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}

后续步骤

如需详细了解如何设置项目以对端点实施更安全的访问权限控制,请参阅为团队设置项目