本页面介绍了如何通过对 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
{ "permissions": [ "aiplatform.googleapis.com/aiplatform.endpoints.get", "aiplatform.googleapis.com/aiplatform.endpoints.predict" ] }