編輯主體存取邊界政策

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

事前準備

  • 設定驗證方法。

    Select the tab for how you plan to use the samples on this page:

    gcloud

      In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

      REST

      如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

    1. 閱讀主體存取邊界政策總覽

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

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

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

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

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

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

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

  • 主體存取權範圍政策使用者 (roles/iam.principalAccessBoundaryUser) 貴機構
  • 編輯繫結至工作團隊身分集區的主體存取權界線政策: 目標工作團隊身分集區的「身分與存取權管理工作團隊集區管理員」 (roles/iam.workforcePoolAdmin)
  • 編輯繫結至工作負載身分集區的主體存取權界線政策: 目標工作負載身分集區所屬專案的「身分與存取權管理 Workload Identity 集區管理員」 (roles/iam.workloadIdentityPoolAdmin)
  • 取得編輯繫結的長時間執行作業狀態,該繫結會參照工作負載身分集區: 身分與存取權管理作業檢視者 (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)

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

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

所需權限

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

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

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

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

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

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

控制台

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

    前往主體存取邊界政策

  2. 選取要編輯主體存取權範圍政策的機構。

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

  4. 按一下「編輯政策」

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

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

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

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

  9. 按一下 [儲存]

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:回覆的格式。使用 jsonyaml

執行下列指令:

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 會以要求主體的內容取代現有政策。

    可接受的值為 displayNamedetailsdetails.rulesdetails.rules.descriptiondetails.rules.resourcesdetails.rules.effectdetails.enforcementVersion

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

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

    替換下列值:

    • DESCRIPTION:選用。主體存取邊界政策規則的說明。說明長度上限為 256 個字元。
    • RESOURCES:您希望主體有權存取的 Resource Manager 資源清單 (專案、資料夾和機構)。凡是受這項政策規範的主體,都有權存取這些資源。

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

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

    可接受的值為 123latest

    如要進一步瞭解強制執行版本,請參閱「主體存取邊界強制執行版本」。

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 或主體組合。因此,如要變更主體存取邊界政策的強制執行對象,請執行下列其中一項操作:

  • 如要調整主體存取邊界政策的強制執行對象,可以修改政策繫結中的條件。如要修改繫結中的條件,請編輯政策繫結
  • 如要對其他主體集強制執行主體存取邊界政策,請建立新的政策繫結,將政策繫結至該主體集。
  • 如要從主體集移除主體存取邊界政策,請刪除政策繫結,將政策繫結至主體集。

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

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

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

控制台

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

    前往主體存取邊界政策

  2. 選取要編輯主體存取權範圍政策的機構。

  3. 找出要編輯繫結的主體存取邊界政策,然後按一下該政策的 ID。

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

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

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

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

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

    1. 按一下條件名稱旁邊的「編輯條件」
    2. 更新條件的標題、說明或運算式。
    3. 按一下 [儲存]
  9. 若要儲存變更,請按一下 [儲存]

gcloud

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

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

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

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

  • 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:回覆的格式。使用 jsonyaml

執行下列指令:

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: [my-binding]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374545618-6181fc272c6f9-55ff07f4-97d0ac76] to complete...done.
Updated policyBinding [my-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 資源類型 (專案、資料夾或機構)。使用 projectsfoldersorganizations

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

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

    可接受的值為 displayNameconditioncondition.expressioncondition.titlecondition.description

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

HTTP 方法和網址:

POST 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/principalAccessBoundaryPolicies/example-policy",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": true,
  "response": {
    PAB_POLICY
  }
}

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

後續步驟