編輯主體存取邊界政策

主體存取邊界 (PAB) 政策可限制一組主體可存取的資源。本頁說明如何編輯現有的主體存取邊界政策,以及如何編輯主體存取邊界政策的政策繫結,以變更政策適用對象。

事前準備

編輯主體存取邊界政策所需的角色

如要取得編輯主體存取權範圍政策所需的權限,請要求管理員授予您機構的主體存取權範圍管理員 (roles/iam.principalAccessBoundaryAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備 iam.principalaccessboundarypolicies.update 權限,可編輯主體存取邊界政策。

您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

編輯主體存取邊界政策繫結所需的角色

如要編輯主體存取邊界政策的政策繫結,您需要的權限取決於繫結至政策的主體集。

如要取得編輯主體存取權範圍政策的政策繫結所需的權限,請要求管理員授予您下列 IAM 角色:

  • 機構的主體存取邊界使用者 (roles/iam.principalAccessBoundaryUser)
  • 編輯繫結至工作團隊身分集區的主體存取權界線政策的政策繫結: 目標工作團隊身分集區的身分與存取權管理工作團隊集區管理員 (roles/iam.workforcePoolAdmin)
  • 編輯繫結至工作負載身分集區的主體存取權界線政策: 在擁有目標工作負載身分集區的專案中,身分與存取權管理 Workload Identity 集區管理員 (roles/iam.workloadIdentityPoolAdmin)
  • 取得編輯繫結的長時間執行的作業狀態,該繫結會參照 workload identity pool: 目標 workload identity pool 所屬專案的 IAM 作業檢視者 (roles/iam.operationViewer)
  • 編輯繫結至 Google Workspace 網域的主體存取邊界政策: Workspace Pool IAM 管理員 (roles/iam.workspacePoolAdmin) 組織
  • 編輯繫結至專案主體集的專案主體存取邊界政策: 專案的專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin)
  • 取得長時間執行的作業狀態,以編輯參照專案主體集的繫結: 專案的「IAM 作業檢視者 」(roles/iam.operationViewer)
  • 編輯繫結至資料夾主體集的資料夾主體存取權範圍政策: 資料夾的資料夾 IAM 管理員 (roles/resourcemanager.folderIamAdmin)
  • 編輯繫結至機構主體集的機構主體存取權範圍政策: 機構的機構管理員 (roles/resourcemanager.organizationAdmin)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備編輯主體存取邊界政策繫結所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要編輯主體存取權範圍政策的政策繫結,必須具備下列權限:

  • iam.principalaccessboundarypolicies.bind 組織
  • 編輯繫結至工作團隊身分集區的主體存取邊界政策: iam.workforcePools.updatePolicyBinding 在目標工作團隊身分集區上
  • 編輯繫結至工作負載身分集區的主體存取邊界政策: iam.workloadIdentityPools.updatePolicyBinding 在擁有目標工作負載身分集區的專案中
  • 取得編輯繫結的長時間執行的作業狀態,該繫結會參照 workload identity pool: iam.operations.get 在擁有目標 workload identity pool 的專案中
  • 編輯繫結至 Google Workspace 網域的主體存取邊界政策: iam.workspacePools.updatePolicyBinding 在機構上
  • 編輯繫結至專案主體組合的主體存取邊界政策: resourcemanager.projects.updatePolicyBinding 在專案上
  • 取得編輯繫結的長時間執行的作業狀態,該繫結會參照專案的主體集: iam.operations.get 在專案上
  • 編輯繫結至資料夾主體組合的主體存取邊界政策: resourcemanager.folders.updatePolicyBinding 在資料夾上
  • 編輯繫結至機構主體集的機構主體存取權範圍政策: resourcemanager.organizations.updatePolicyBinding 在機構

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

編輯現有的主體存取邊界政策

如要新增/移除主體存取邊界政策的規則,或修改主體存取邊界政策的中繼資料,請編輯主體存取邊界政策。

您可以使用 Cloud de Confiance 控制台、gcloud CLI 或 IAM REST API 編輯主體存取權界線政策。

控制台

  1. 前往 Cloud de Confiance 控制台的「Principal Access Boundary policies」(主體存取邊界政策) 頁面。

    前往主體存取邊界政策

  2. 選取要編輯的主體存取邊界政策所屬機構。

  3. 按一下要編輯的主體存取邊界政策 ID。

  4. 點選 「Edit policy」(編輯政策)。

  5. 如要編輯政策規則,請按照下列步驟操作:

    1. 按一下要編輯的規則。
    2. 編輯規則說明或規則中包含的資源。
    3. 按一下「完成」。
  6. 如要從政策中刪除規則,請按一下該規則列中的「刪除」。

  7. 如要編輯政策的顯示名稱,請編輯「顯示名稱」欄位。

  8. 如要編輯政策的強制執行版本,請點選「強制執行版本」清單,然後選擇新值。

  9. 選用:如要使用 Policy Simulator 測試主體存取邊界政策的變更,請按一下「測試變更」。查看模擬結果,並視需要更新政策。

    如要進一步瞭解如何使用 Policy Simulator 測試主體存取邊界政策,請參閱「主體存取邊界政策的 Policy Simulator」。

  10. 按一下 [儲存]。

gcloud

這項 gcloud iam principal-access-boundary-policies update 指令會更新現有的主體存取邊界政策。

使用下列任何指令資料之前,請先替換以下項目:

  • PAB_POLICY_ID:您要更新的主體存取邊界政策 ID,例如 example-policy。
  • ORG_ID:擁有主體存取權範圍政策的機構 ID。機構 ID 為數字,例如 123456789012。
  • FIELD_TO_UPDATE=UPDATED_VALUE:要更新的欄位和對應的更新值。

    以下列舉幾個可用於更新政策欄位的旗標:

    • --display-name=DISPLAY_NAME:將政策的顯示名稱替換為 DISPLAY_NAME。
    • --details-enforcement-version=ENFORCEMENT_VERSION:將政策的強制執行版本更新為 ENFORCEMENT_VERSION。
    • --details-rules=RULES_FILE.json:以 RULES_FILE.json 中的規則取代主體存取權範圍政策的規則。如要瞭解如何設定規則檔案格式,請參閱「建立主體存取邊界政策」。

      如果使用這個旗標,就無法使用 --add-details-rules 旗標。

    • --add-details-rules=RULES_FILE:將 RULES_FILE.json 中的規則附加至政策的現有規則。如要瞭解如何設定規則檔案格式,請參閱「建立主體存取邊界政策」。

      使用這個旗標時,無法使用 --details-rules 旗標。

    • --remove-details-rules=RULES_FILE:從政策的現有規則中移除 RULES_FILE.json 中的規則。如要瞭解如何設定規則檔案格式,請參閱「建立主體存取邊界政策」。只有完全符合 RULES_FILE.json 中其中一項規則的規則會遭到移除。

      使用這個旗標時,無法使用 --clear-rule-details 旗標。

    • --clear-details-rules:清除主體存取邊界政策中的所有規則。

      使用這個旗標時,無法使用 --remove-rule-details 旗標。

    如需可用於更新主體存取邊界政策的完整旗標清單,請參閱 gcloud iam principal-access-boundary-policies update 指令參考資料。

  • FORMAT:回應格式。使用 json 或 yaml。

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud iam principal-access-boundary-policies update PAB_POLICY_ID \
    --organization=ORG_ID --location=global \
    --FIELD_TO_UPDATE=UPDATED_VALUE \
    --format=FORMAT

Windows (PowerShell)

gcloud iam principal-access-boundary-policies update PAB_POLICY_ID `
    --organization=ORG_ID --location=global `
    --FIELD_TO_UPDATE=UPDATED_VALUE `
    --format=FORMAT

Windows (cmd.exe)

gcloud iam principal-access-boundary-policies update PAB_POLICY_ID ^
    --organization=ORG_ID --location=global ^
    --FIELD_TO_UPDATE=UPDATED_VALUE ^
    --format=FORMAT

回應會包含代表您要求的長時間執行的作業。作業完成後,回應會列印更新後的主體存取權範圍政策。

Request issued for: [example-policy]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374208720-6181fae5e2034-2d8a712b-5c92e5b9] to complete...done.
Updated principalAccessBoundaryPolicy [example-policy].
{
  "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-policy",
  "uid": "puid_13364150419245236225",
  "etag": "W/\"Gh/PcTdJD/AWHUhPW45kdw==\"",
  "displayName": "Updated display name",
  "createTime": "2024-05-07T00:05:48.295209Z",
  "updateTime": "2024-05-10T20:50:09.200421Z",
  "details": [
    "rules": {
      [
        "description": "Make principals eligible to access example.com"
        "resources": {
          "//cloudresourcemanager.googleapis.com/organizations/123456789012"
        },
        "effect": ALLOW
      ]
    },
    "enforcementVersion": "1"
  ]
}

REST

principalAccessBoundaryPolicies.patch 方法會更新現有的主體存取邊界政策。

使用任何要求資料之前,請先修改下列項目的值:

  • ORG_ID:擁有主體存取權範圍政策的機構 ID。機構 ID 為數字,例如 123456789012。
  • PAB_POLICY_ID:您要更新的主體存取邊界政策 ID,例如 example-policy。
  • FIELDS_TO_UPDATE:以半形逗號分隔的欄位清單,當中列有要更新的欄位。如果未指定要更新的欄位,IAM 會以要求主體的內容取代現有政策。

    可接受的值為 displayName、details、details.rules、details.rules.description、details.rules.resources、details.rules.effect 和 details.enforcementVersion。

  • DISPLAY_NAME:選用。主體存取邊界政策的易讀說明,例如「Example policy」。顯示名稱長度上限為 63 個半形字元。
  • PAB_RULES:主體存取邊界規則清單,定義受影響主體可存取的資源。主體存取邊界政策最多可有 500 條規則。每項規則的格式如下:

    {
      "description": "DESCRIPTION",
      "resources": [
        RESOURCES
      ],
      "effect": "ALLOW"
    }

    替換下列值:

    • DESCRIPTION:選用。主體存取邊界政策規則的說明。說明不得超過 256 個半形字元。
    • RESOURCES:您希望主體有權存取的 Resource Manager 資源清單 (專案、資料夾和機構)。凡是受這項政策約束的主體,都有權存取這些資源。

      每項主體存取邊界政策最多可參照政策中所有規則的 500 項資源。

  • ENFORCEMENT_VERSION:IAM 在強制執行政策時使用的 Principal Access Boundary 政策版本。強制執行版本會決定 IAM 對主體存取邊界政策強制執行的權限。

    可接受的值為 1、2、3、4 和 latest。

    如要進一步瞭解如何設定及管理強制執行版本,請參閱「強制執行版本管理」。

HTTP 方法和網址:

PATCH https://iam.googleapis.com/v3/organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID?updateMask=FIELDS_TO_UPDATE

JSON 要求主體:

{
  "displayName": DISPLAY_NAME,
  "details": {
    "rules": [
      PAB_RULES
    ],
    "enforcementVersion": "ENFORCEMENT_VERSION",
  }
}

請展開以下其中一個選項,以傳送要求:

回應會包含代表您要求的長時間執行的作業。如要瞭解如何取得長時間執行的作業狀態,請參閱本頁面的「檢查長時間執行的作業狀態」。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715626721931-6185a7953ef76-76f80ee4-19cd1bf7",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3.OperationMetadata",
    "createTime": "2024-05-13T18:58:43.721277235Z",
    "target": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-policy",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": false
}

變更主體存取邊界政策的強制執行對象

為主體存取邊界政策建立政策繫結後,您就無法變更繫結中的政策 ID 或主體集。因此,如要變更主體存取邊界政策的強制執行對象,請採取下列任一做法:

編輯主體存取邊界政策的現有政策繫結

建立政策繫結後,您可以編輯繫結,修改繫結中的條件或繫結的顯示名稱。

您可以使用 Cloud de Confiance 控制台、gcloud CLI 或 IAM REST API 編輯政策繫結。

控制台

  1. 前往 Cloud de Confiance 控制台的「Principal Access Boundary policies」(主體存取邊界政策) 頁面。

    前往主體存取邊界政策

  2. 選取要編輯的主體存取邊界政策所屬機構。

  3. 按一下要編輯繫結的主體存取邊界政策 ID。

  4. 按一下「繫結」分頁標籤。

  5. 找出要編輯的繫結 ID。在該繫結的資料列中,依序點選「動作」和「編輯繫結」。

  6. 如要更新繫結的顯示名稱,請編輯「顯示名稱」欄位。

  7. 如要為繫結新增條件,請按照下列步驟操作:

    1. 按一下「新增條件」。
    2. 在「Title」(標題) 欄位中,簡要說明條件的用途。
    3. 選用:在「Description」(說明) 欄位中輸入條件的詳細說明。
    4. 在「運算式」欄位中,輸入使用一般運算語言 (CEL) 語法的條件運算式。運算式必須參照 principal.type 或 principal.subject 屬性。系統不支援其他屬性。
    5. 按一下 [儲存]。
  8. 如要更新現有條件,請按照下列步驟操作:

    1. 按一下條件名稱旁的「編輯條件」。
    2. 更新條件的名稱、說明或運算式。
    3. 按一下 [儲存]。
  9. 選用:如要使用 Policy Simulator 測試主體存取邊界政策繫結的變更,請按一下「測試變更」。查看模擬結果,並視需要更新政策繫結。

    如要進一步瞭解如何使用 Policy Simulator 測試主體存取邊界政策,請參閱「主體存取邊界政策的 Policy Simulator」。

  10. 點按「儲存」,儲存變更。

gcloud

這個 gcloud iam policy-bindings update 指令會更新現有的政策繫結。

使用下列任何指令資料之前,請先替換以下項目:

  • BINDING_ID:您要更新的政策繫結 ID,例如 example-binding。
  • RESOURCE_TYPE:政策繫結所屬的 Resource Manager 資源類型 (專案、資料夾或機構)。使用 project、folder 或 organization 值

    資源類型取決於政策繫結中設定的主體。如要瞭解應使用哪種資源類型,請參閱「支援的主體類型」。

  • RESOURCE_ID:政策繫結所屬專案、資料夾或機構的 ID。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 都是數字,例如 123456789012。
  • FIELD_TO_UPDATE=UPDATED_VALUE:要更新的欄位和對應的更新值。

    以下是可用於更新政策繫結中欄位的旗標範例:

    • --display-name=DISPLAY_NAME:將繫結的顯示名稱替換為 DISPLAY_NAME。
    • --condition-description=CONDITION_DESCRIPTION:如果繫結有條件,請將條件說明替換為 CONDITION_DESCRIPTION。否則,請在繫結中新增條件,並提供指定說明。如果使用這個旗標更新沒有條件的繫結,也必須設定 --condition-expression 旗標。
    • --condition-expression=CONDITION_EXPRESSION:如果繫結有條件,請將條件的運算式替換為 CONDITION_EXPRESSION。否則,請使用指定運算式,在繫結中新增條件。
    • --condition-title=CONDITION_TITLE:如果繫結有條件,請將條件的標題替換為 CONDITION_TITLE。否則,請為繫結新增具有指定標題的條件。如果使用這個旗標更新沒有條件的繫結,也必須設定 --condition-expression 旗標。

    如需可更新的完整欄位清單,請參閱 gcloud iam policy-bindings update 指令參考資料。

  • FORMAT:回應格式。使用 json 或 yaml。

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud iam policy-bindings update BINDING_ID \
    --RESOURCE_TYPE=RESOURCE_ID --location=global \
    --FIELD_TO_UPDATE=UPDATED_VALUE \
    --format=FORMAT

Windows (PowerShell)

gcloud iam policy-bindings update BINDING_ID `
    --RESOURCE_TYPE=RESOURCE_ID --location=global `
    --FIELD_TO_UPDATE=UPDATED_VALUE `
    --format=FORMAT

Windows (cmd.exe)

gcloud iam policy-bindings update BINDING_ID ^
    --RESOURCE_TYPE=RESOURCE_ID --location=global ^
    --FIELD_TO_UPDATE=UPDATED_VALUE ^
    --format=FORMAT

回應會包含代表您要求的長時間執行的作業。如要瞭解如何取得長時間執行的作業狀態,請參閱本頁面的「檢查長時間執行的作業狀態」。

Update request issued for: [example-binding]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374545618-6181fc272c6f9-55ff07f4-97d0ac76] to complete...done.
Updated policyBinding [example-binding].
{
  "createTime": "2024-05-06T18:08:24.729843Z",
  "displayName": "Updated display name",
  "etag": "W/\"xkdnPfTxoxyVqOwhQSJbMg==\"",
  "name": "organizations/123456789012/locations/global/policyBindings/example-binding",
  "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
  "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
  "policyUid": "puid_9519202237377675265",
  "target": {
    "principalSet": "//cloudresourcemanager.googleapis.com/organizations/123456789012"
  },
  "uid": "buid_9904260005517852673", 
  "updateTime": "2024-05-06T18:11:16.798841Z"
}

REST

policyBindings.patch 方法會更新現有政策繫結。

使用任何要求資料之前,請先修改下列項目的值:

  • RESOURCE_TYPE:政策繫結所屬的 Resource Manager 資源類型 (專案、資料夾或機構)。使用 projects、folders 或 organizations 值

    資源類型取決於政策繫結中設定的主體。如要瞭解應使用哪種資源類型,請參閱「支援的主體類型」。

  • RESOURCE_ID:政策繫結所屬專案、資料夾或機構的 ID。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 都是數字,例如 123456789012。
  • BINDING_ID:您要更新的政策繫結 ID,例如 example-binding。
  • FIELDS_TO_UPDATE:以半形逗號分隔的欄位清單,當中列有要更新的欄位。如未指定要更新的欄位,IAM 會以要求主體的內容取代現有繫結。

    可接受的值為 displayName、condition、condition.expression、condition.title 和 condition.description。

  • DISPLAY_NAME:選用。繫結的人類可讀說明,例如 Example binding。顯示名稱的長度上限為 63 個半形字元。
  • CONDITION_DETAILS:選用。條件運算式,指定要對主體集中的哪些主體強制執行主體存取邊界政策。包含下列欄位:

HTTP 方法和網址:

PATCH https://iam.googleapis.com/v3/RESOURCE_TYPE/RESOURCE_ID/locations/global/policyBindings/BINDING_ID?updateMask=FIELDS_TO_UPDATE

JSON 要求主體:

{
  "displayName": "DISPLAY_NAME",
  "condition": {
    CONDITION_DETAILS
  }
}

請展開以下其中一個選項,以傳送要求:

回應會包含代表您要求的長時間執行的作業。如要瞭解如何取得長時間執行的作業狀態,請參閱本頁面的「檢查長時間執行的作業狀態」。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715373159010-6181f6fcccfa7-dcd0055c-00c22cad",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3.OperationMetadata",
    "createTime": "2024-05-10T20:32:39.254910121Z",
    "target": "organizations/123456789012/locations/global/policyBindings/example-binding",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": false
}

查看長時間執行的作業狀態

使用 REST API 或用戶端程式庫時,任何會變更政策或繫結的方法都會傳回長時間執行的作業 (LRO)。長時間執行的作業會追蹤要求狀態,並指出政策或繫結的變更是否完成。

REST

operations.get 方法會傳回長時間執行的作業的狀態。

使用任何要求資料之前,請先修改下列項目的值:

  • OPERATION_NAME:作業的完整名稱。您會在原始要求的相關回覆中收到這個名稱。

    作業名稱的格式如下:

    RESOURCE_TYPE/RESOURCE_ID/locations/global/operations/OPERATION_ID
        

HTTP 方法和網址:

GET https://iam.googleapis.com/v3/OPERATION_NAME

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "name": "organizations/314340013352/locations/global/operations/operation-1732752311821-627edd607a3df-9a62cdea-2a7d9f07",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3.OperationMetadata",
    "createTime": "2024-11-28T00:05:12.006289686Z",
    "endTime": "2024-11-28T00:05:12.192141801Z",
    "target": "organizations/314340013352/locations/global/POLICY_TYPE/POLICY_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": true,
  "response": {
    POLICY
  }
}

如果作業的 done 欄位不存在,請繼續重複取得作業,以監控其狀態。請使用部分指數輪詢,在每次要求之間加入延遲。當 done 欄位設為 true 時,即代表作業完成,您可以停止取得作業。

後續步驟