您可以在资源层次结构的不同级层设置 IAM 政策,从而控制对 Vertex AI Feature Store(旧版)资源的访问权限。例如:
项目级政策 IAM 适用于项目中的所有资源。您可以设置项目级政策,向用户授予读取项目中所有特征存储区的权限。
借助资源级 IAM 政策,您可以指定哪些用户可以访问特定资源。对于一部分用户,您可以设置资源级政策,授予对项目中特定特征存储区的写入权限。
您可以对以下 Vertex AI Feature Store(旧版)资源设置资源级 Identity and Access Management (IAM) 政策:
特征存储区:在特征存储区上设置 Identity and Access Management 政策时,该政策适用于该特征存储区以及在该特征存储区中创建的所有实体类型。
实体类型:在实体类型上设置 Identity and Access Management 政策时,该政策仅适用于该实体类型以及创建该实体类型的特征存储区。
IAM 政策包含一个或多个角色绑定,用于定义哪些 IAM 角色与哪些主账号关联。一个角色对应授予主账号的一组权限。Vertex AI 提供了可在政策中使用的预定义角色。或者,您也可以创建自己的自定义角色。
注意事项
您无法设置有条件的资源政策。例如,您无法创建一项政策来授予对具有或将具有以特定字符串(如 testing
)开头的资源的访问权限。
示例用例
例如,假设您的组织有两组用户。一组用户以 DevOps 管理员角色管理核心基础架构。另一组用户管理特定实体类型及其特征,例如数据工程师。
DevOps 管理员在项目级层管理特征存储区和实体类型。当数据工程师请求新的实体类型时,DevOps 管理员可以创建该实体类型的所有权并委托给数据工程师。数据工程师可以自由管理其拥有的实体类型中的特征,但不能对特征存储区或其他实体类型执行操作。例如,此控制方式可让 DevOps 管理员限制对包含敏感信息的实体类型的访问。
在此场景中,DevOps 管理员在项目级层具有 aiplatform.featurestoreAdmin
角色。当数据工程师请求新的实体类型时,管理员创建新的实体类型,然后在实体类型级层向数据工程师分配 aiplatform.entityTypeOwner
角色(作为资源级政策)。
获取 IAM 政策
您可以使用 Google Cloud 控制台或 API 查看特征存储区或实体类型的当前 IAM 政策。
网页界面
- 在 Google Cloud 控制台的“Vertex AI”部分,转到特征页面。
- 从区域下拉列表中选择一个区域。
- 在特征表中,从特征存储区或实体类型列中选择特征存储区或实体类型。
- 点击权限。
- 如需显示资源级权限,请关闭显示继承的权限。
有权访问所选资源的主账号按角色分组。
- 展开某个角色即可查看分配给该角色的主账号。
REST
如需从资源中获取 IAM 政策,请发送使用 getIamPolicy
方法的 POST 请求。以下示例获取了一项实体类型政策。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:特征存储区所在的区域,例如
us-central1
。 - PROJECT_ID:您的项目 ID。
- FEATURESTORE_ID:特征存储区的 ID。
- ENTITY_TYPE_ID:实体类型的 ID。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:getIamPolicy" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
{ "version": 1, "etag": "BwXTmICm7mI", "bindings": [ { "role": "roles/aiplatform.entityTypeOwner", "members": [ "user:example@example.com" ] } ] }
设置 IAM 政策
您可以为特征存储区或实体类型设置 IAM 政策。
网页界面
- 在 Google Cloud 控制台的“Vertex AI”部分,转到特征页面。
- 从区域下拉列表中选择一个区域。
- 在特征表中,从特征存储区或实体类型列中选择特征存储区或实体类型。
- 点击权限。
- 点击添加主账号。
- 指定主账号以及一个或多个要与该主账号关联的角色。
- 点击保存。
REST
如需对资源设置 IAM 政策,请发送使用 setIamPolicy
方法的 POST 请求。以下示例对一个实体类型设置了政策。
设置 IAM 政策会替换任何现有政策(不附加更改)。如果您想要修改资源的现有政策,请使用 getIamPolicy
方法获取其现有政策,然后进行修改。在 setIamPolicy
请求中添加修改后的政策以及 etag
。
如果您收到 409
错误代码,则表示存在并发 SetIamPolicy
请求,该请求更新了该政策。发出 GetIamPolicy
以获取政策更新后的 etag,然后通过添加新的 etag 重试 SetIamPolicy
请求。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:特征存储区所在的区域,例如
us-central1
。 - PROJECT_ID:您的项目 ID。
- FEATURESTORE_ID:特征存储区的 ID。
- ENTITY_TYPE_ID:实体类型的 ID。
- ROLE:包含要授予的权限的 IAM 角色,例如
roles/aiplatform.featurestoreDataViewer
。 - PRINCIPAL:被授予角色权限的主账号,例如
user:myuser@example.com
。 - ETAG:用于防止政策的同时更新相互覆盖的字符串值。此值作为
getIamPolicy
响应的一部分返回。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:setIamPolicy" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
{ "version": 1, "etag": "BwXTmICm7mI", "bindings": [ { "role": "roles/aiplatform.entityTypeOwner", "members": [ "user:user1@example.com" ] }, { "role": "roles/aiplatform.featurestoreDataViewer", "members": [ "user:user2@example.com", "user:user3@example.com" ] }, { "role": "roles/aiplatform.featurestoreDataWriter", "members": [ "user:user4@example.com", ] } ] }
验证资源的 IAM 权限
您可以验证当前通过身份验证的用户是否具有特征存储区或实体类型的特定 IAM 权限。
REST
如需验证用户是否具有某项资源的特定 IAM 权限,请发送使用 testIamPermissions
方法的 POST 请求。以下示例可让您测试当前通过身份验证的用户是否具有实体类型的一组 IAM 权限。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:特征存储区所在的区域,例如
us-central1
。 - PROJECT_ID:您的项目 ID。
- FEATURESTORE_ID:特征存储区的 ID。
- ENTITY_TYPE_ID:实体类型的 ID。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:testIamPermissions -d
请求 JSON 正文:
{ "permissions": [ "aiplatform.googleapis.com/entityTypes.get", "aiplatform.googleapis.com/entityTypes.readFeatureValues", "aiplatform.googleapis.com/entityTypes.writeFeatureValues" ] }
如需发送请求,请选择以下方式之一:
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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:testIamPermissions -d" | Select-Object -Expand Content
{ "permissions": [ "aiplatform.googleapis.com/entityTypes.get", "aiplatform.googleapis.com/entityTypes.readFeatureValues", "aiplatform.googleapis.com/entityTypes.writeFeatureValues" ] }