本页面介绍了如何通过对 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" ] }