您可以在資源階層的不同層級設定 IAM 政策,控管 Vertex AI 特徵儲存庫 (舊版) 資源的存取權。例如:
專案層級的 IAM 政策會套用至專案中的所有資源。您可以設定專案層級政策,授予使用者讀取專案中所有特徵存放區的權限。
資源層級的 IAM 政策可讓您指定哪些使用者可以存取特定資源。您可以為部分使用者設定資源層級政策,授予專案中特定特徵商店的寫入權限。
您可以在下列 Vertex AI 特徵儲存庫 (舊版) 資源上,設定資源層級的 Identity and Access Management (IAM) 政策:
特徵儲存庫:在特徵儲存庫中設定 Identity and Access Management 政策時,該政策會套用至特徵儲存庫,以及在該特徵儲存庫中建立的所有實體類型。
實體類型:在實體類型上設定 Identity and Access Management 政策時,該政策只會套用至實體類型,以及建立實體類型的 featurestore。
IAM 政策包含一或多個角色繫結,用於定義哪些 IAM 角色與哪些主體相關聯。角色是一組您授予主體的權限。Vertex AI 提供預先定義的角色,可在政策中使用。或者,您也可以建立自己的自訂角色。
注意事項
您無法設定條件式資源政策。舉例來說,您無法建立政策,授予存取權給名稱開頭為特定字串 (例如 testing
) 的任何資源。
應用實例範本
舉例來說,假設貴機構有兩組使用者。一組用於以開發運作管理員角色管理核心基礎架構。另一組則管理特定實體類型及其特徵,例如資料工程師。
DevOps 管理員會在專案層級管理特徵商店和實體類型。資料工程師要求建立新的實體類型時,DevOps 管理員可以建立該實體類型,並將擁有權委派給資料工程師。資料工程師可以自由管理所屬實體類型中的特徵,但無法操作特徵商店或其他實體類型。舉例來說,DevOps 管理員可透過這項控制項,限制存取含有私密資訊的實體類型。
在這個情境中,DevOps 管理員在專案層級具有 aiplatform.featurestoreAdmin
角色。接著,當資料工程師要求新的實體類型時,管理員會建立新的實體類型,然後在實體類型層級 (做為資源層級政策),將 aiplatform.entityTypeOwner
角色指派給資料工程師。
取得 IAM 政策
您可以使用 Google Cloud 控制台或 API,查看特徵商店或實體類型的現行 IAM 政策。
網路使用者介面
- 在 Google Cloud 控制台的 Vertex AI 專區,前往「Features」頁面。
- 從「Region」(區域) 下拉式清單中選取一個區域。
- 在特徵表格中,從「特徵儲存庫」或「實體類型」欄選取特徵儲存庫或實體類型。
- 按一下 [權限]。
- 如要顯示資源層級的權限,請關閉「顯示繼承的權限」。
系統會依角色分組,列出可存取所選資源的主體。
- 展開角色,查看指派給該角色的主體。
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 專區,前往「Features」頁面。
- 從「Region」(區域) 下拉式清單中選取一個區域。
- 在特徵表格中,從「特徵儲存庫」或「實體類型」欄選取特徵儲存庫或實體類型。
- 按一下 [權限]。
- 按一下「新增主體」。
- 指定主體和要與主體建立關聯的一或多個角色。
- 按一下 [儲存]。
REST
如要為資源設定 IAM 政策,請使用 setIamPolicy
方法傳送 POST 要求。以下範例會為實體類型設定政策。
設定 IAM 政策會覆寫任何現有政策 (不會附加變更)。如要修改資源的現有政策,請使用 getIamPolicy
方法取得現有政策,然後進行修改。請在etag
要求中附上修改後的政策。setIamPolicy
如果收到 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 權限,可存取特徵商店或實體型別。
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" ] }