使用標記設定機構政策的適用範圍

建立標記之後,您就能將資源是否具備特定標記設為條件,並按照這個條件允許或拒絕政策。您可以使用標記並依條件強制執行組織政策,集中控管階層中的資源。

事前準備

如要進一步瞭解標記及其運作方式,請參閱「標記總覽」。

如需標籤的詳細使用說明,請參閱「建立及管理標籤」。

必要的角色

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

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

您可以將身分與存取權管理條件新增至機構政策管理員角色繫結,藉此委派組織政策的管理權。如要控管主體可管理組織政策的資源,您可以根據特定標記,設定角色繫結條件。詳情請參閱「建立組織政策」。

標記的限制支援

您可以透過附加至機構、資料夾和專案資源的標記,有條件地強制執行任何類型的組織政策。直接附加至支援服務資源 (例如 Compute Engine 執行個體) 的標記,可用於代管或自訂限制的條件。詳情請參閱「支援代碼的服務」。

下列舊版代管限制支援涉及附加至服務資源的標記條件:

  • constraints/sql.restrictNoncompliantDiagnosticDataAccess
  • constraints/gcp.restrictCmekCryptoKeyProjects
  • constraints/sql.restrictAuthorizedNetworks
  • constraints/gcp.resourceLocations
  • constraints/gcp.restrictNonCmekServices
  • constraints/sql.restrictNoncompliantResourceCreation
  • constraints/sql.restrictPublicIp

如果舊版代管限制不在這份清單中,就不支援涉及附加至服務資源的標記條件。

使用標記設定機構政策

如要使用標記判斷組織政策的生效位置,您必須在組織政策 YAML 檔案中指定條件。您可以設定條件來比對特定標記鍵/值組合,要求設定特定標記值,才能強制執行機構政策。

您也可以設定條件,比對代碼鍵。這樣一來,您就能針對具有該標記鍵的所有資源啟用或停用強制執行功能,無論附加的標記值為何。

建立或更新資源時,系統會評估並強制執行大多數組織政策。必要標記可用於控管資源建立程序。

清單規則範例

以下範例說明如何設定機構政策,強制執行 gcp.resourceLocations 舊版受管理限制。這項機構政策同時使用條件值和無條件值,且這些值是在同一個政策檔案中設定。

控制台

如要設定組織政策,請按照下列步驟操作:

  1. 前往 Cloud de Confiance 控制台的「Organization policies」(組織政策) 頁面。

    前往「Organization policies」(組織政策)

  2. 在專案選擇工具中,選取要設定組織政策的專案。

  3. 在「組織政策」 頁面中,從清單選取限制。系統隨即顯示該限制的「Policy details」(政策詳細資料) 頁面。

  4. 如要更新這項資源的機構政策,請按一下「管理政策」

  5. 在「Edit policy」(編輯政策) 頁面,選取「Override parent's policy」(覆寫上層政策)

  6. 在「Policy enforcement」(強制執行) 下方,選取強制執行選項:

    • 如要合併與評估您的組織政策,請選取「與上層合併」。如要進一步瞭解繼承和資源階層,請參閱「階層評估」。

    • 如要覆寫從父項資源繼承的政策,請選取「取代」

  7. 按一下「Add rule」(新增規則)

  8. 在「Policy values」(政策值) 下,選取機構政策應允許所有值、拒絕所有值,還是指定一組自訂值。

    • 政策接受的特定值取決於政策適用的服務。如需限制清單和可接受的值,請參閱「機構政策限制」。
  9. 選用:如要根據標記設定組織政策的條件,請按一下「Add condition」(新增條件)

    1. 在「Title」(標題) 欄位中,輸入條件名稱。

    2. 在「說明」欄位中,為條件加上說明。說明會提供必要標記的脈絡資訊,以及這些標記對資源的影響。

    3. 您可以使用條件建構工具建立條件,規定必須有特定標記,限制才會生效。

      1. 在「條件類型」方塊中,選取「代碼」

      2. 選取條件的運算子

        • 如要比對整個標記,請搭配使用 has value 運算子和標記的命名空間名稱,或搭配使用 has value ID 運算子和標記的鍵值 ID。

        • 如要只比對標記鍵,請使用 has key 運算子和標記鍵的命名空間名稱,或使用 has key ID 運算子和標記鍵 ID。

      3. 按一下「新增」即可建立多個條件。如要新增其他條件,可以切換「And」,將條件邏輯設為必須符合所有條件。您可以切換「或」,將條件邏輯設為只要符合其中一個條件即可。

      4. 如要刪除運算式,請按一下條件欄位右側的大「X」X

      5. 編輯完條件後,按一下「儲存」

    4. 您可以使用條件編輯器,以程式輔助方式建立條件運算式。系統也會以程式輔助方式,顯示目前設定的條件。

      條件運算式必須包含 1 到 10 個子運算式,並以 ||&& 運算子連結。每個子運算式都必須是下列其中一個函式:

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        更改下列內容:

        • KEY_NAME,並將其替換為標記鍵的命名空間名稱。例如:123456789012/env

        • VALUE_SHORT_NAME 替換為標記值的簡短名稱。例如:prod

        例如:resource.matchTag('123456789012/environment, 'prod')

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        更改下列內容:

        • KEY_ID 換成標記鍵的永久 ID。例如:tagKeys/123456789012

        • VALUE_ID 換成標記值的永久 ID。例如:tagValues/567890123456

        例如:resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

      • "resource.hasTagKey('KEY_NAME')"

        KEY_NAME 替換為標記鍵的命名空間名稱。例如:123456789012/env

        例如:resource.matchTag('123456789012/environment, 'prod')

      • "resource.hasTagKeyId('KEY_ID')"

        KEY_ID 替換為標記鍵的永久 ID。例如:tagKeys/123456789012

        例如:resource.hasTagKeyId('tagKeys/123456789012')

      1. 您可以使用條件編輯器套用 ! 邏輯運算子。舉例來說,查詢 !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') 會將機構政策限制套用至沒有 us-west1 標記的任何資源。
  10. 如要強制執行這項政策,請按一下「設定政策」

gcloud

如要設定組織政策,請建立 YAML 檔案來儲存組織政策:

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations
spec:
  rules:
  # As there is no condition specified, this allowedValue is enforced unconditionally.
  - values:
      allowedValues:
      - us-east1-locations
  # This condition applies to the values block.
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
    values:
      allowedValues:
      - us-west1-locations

您可以使用 resource.matchTag 運算子,搭配代碼的命名空間名稱,比對整個代碼與條件。

如要只比對標記鍵,請搭配使用 resource.hasTagKey 運算子和標記鍵的命名空間名稱。如要比對特定標記鍵的任何標記值,請搭配標記鍵 ID 使用 resource.hasTagKeyID 運算子。

執行 set-policy 指令:

gcloud org-policies set-policy POLICY_PATH

更改下列內容:

  • POLICY_PATH:組織政策 YAML 檔案的完整路徑

  • RESOURCE_TYPEorganizationsfoldersprojects

  • RESOURCE_ID:機構 ID、資料夾 ID、專案 ID 或專案編號,視 RESOURCE_TYPE 中指定的資源類型而定

  • ORGANIZATION_ID:代碼金鑰的上層機構

對於這項組織政策,資源和所有子項資源都已強制執行 gcp.resourceLocations 舊版受管理限制,且僅允許 us-east1-locations 中的 allowedValues。凡是標記為 location: us-west1 的資源,都會強制執行 gcp.resourceLocations 舊版管理限制,並套用 us-east1-locationsus-west1-locationsallowedValues

這樣一來,單一機構政策中的限制就能同時強制執行條件式和無條件式值集。

布林值規則範例

以下範例說明如何設定機構政策,強制執行 compute.disableSerialPortAccess 舊版受管理限制。這項機構政策指定資源可存取所有序列埠,但會使用條件,只限制具有相符標記的資源存取序列埠。

控制台

如要設定組織政策,請按照下列步驟操作:

  1. 前往 Cloud de Confiance 控制台的「Organization policies」(組織政策) 頁面。

    前往「Organization policies」(組織政策)

  2. 在專案選擇工具中,選取要設定組織政策的專案。

  3. 在「組織政策」 頁面上的清單選取限制條件。系統隨即顯示該限制的「Policy details」(政策詳細資料) 頁面。

  4. 如要更新這項資源的機構政策,請按一下「管理政策」

  5. 在「Edit policy」(編輯政策) 頁面,選取「Override parent's policy」(覆寫上層政策)

  6. 按一下「Add rule」(新增規則)

  7. 在「Enforcement」(強制執行) 下,選取是否要強制執行這項機構政策。

  8. 選用:如要根據標記設定組織政策的條件,請按一下「Add condition」(新增條件)。請注意,如果為組織政策新增條件式規則,您必須只新增一項無條件規則,否則無法儲存政策。

    1. 在「Title」(標題) 欄位中,輸入條件名稱。

    2. 在「說明」欄位中,為條件加上說明。說明會提供必要標記的脈絡資訊,以及這些標記對資源的影響。

    3. 您可以使用條件建構工具建立條件,規定必須有特定標記,限制才會生效。

      1. 在「條件類型」方塊中,選取「代碼」

      2. 選取條件的運算子

        • 如要比對整個標記,請搭配使用 has value 運算子和標記的命名空間名稱,或搭配使用 has value ID 運算子和標記的鍵值 ID。

        • 如要只比對標記鍵,請使用 has key 運算子和標記鍵的命名空間名稱,或使用 has key ID 運算子和標記鍵 ID。

      3. 按一下「新增」即可建立多個條件。如要新增其他條件,可以切換「And」,將條件邏輯設為必須符合所有條件。您可以切換「或」,將條件邏輯設為只要符合其中一個條件即可。

      4. 如要刪除運算式,請按一下條件欄位右側的大「X」X

      5. 編輯完條件後,按一下「儲存」

      6. 如果組織政策強制執行條件,就只能有一項無條件規則。按一下「新增規則」,然後設定是否預設強制執行這項機構政策。

    4. 您可以使用條件編輯器,以程式輔助方式建立條件運算式。系統也會以程式輔助方式,顯示目前設定的條件。

      條件運算式必須包含 1 到 10 個子運算式,並以 ||&& 運算子連結。每個子運算式都必須採用下列其中一種形式:

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        更改下列內容:

        • KEY_NAME,並將其替換為標記鍵的命名空間名稱。例如:123456789012/env

        • VALUE_SHORT_NAME 替換為標記值的簡短名稱。例如:prod

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        更改下列內容:

        • KEY_ID 換成標記鍵的永久 ID。例如:tagKeys/123456789012

        • VALUE_ID 換成標記值的永久 ID。例如:tagValues/567890123456

      1. 您可以使用條件編輯器套用 ! 邏輯運算子。舉例來說,查詢 !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') 會將機構政策限制套用至沒有 us-west1 標記的任何資源。
  9. 如要完成並套用機構政策,請按一下 [Save] (儲存)

gcloud

如要設定組織政策,請建立 YAML 檔案來儲存組織政策:

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/disableSerialAccess', 'yes')"
    enforce: true
  - enforce: false

您可以使用 resource.matchTag 運算子,搭配代碼的命名空間名稱,比對整個代碼與條件。

如要只比對標記鍵,請搭配使用 resource.hasTagKey 運算子和標記鍵的命名空間名稱。如要比對特定標記鍵的任何標記值,請搭配標記鍵 ID 使用 resource.hasTagKeyID 運算子。

執行 set-policy 指令:

gcloud org-policies set-policy POLICY_PATH

更改下列內容:

  • POLICY_PATH:組織政策 YAML 檔案的完整路徑

  • RESOURCE_TYPEorganizationsfoldersprojects

  • RESOURCE_ID:您的機構 ID、資料夾 ID、專案 ID 或專案編號

  • ORGANIZATION_ID:代碼金鑰的上層機構

就這項組織政策而言,資源和所有子項資源都已強制執行 gcp.disableSerialPortAccess 舊版受管理限制。凡是具有 disableSerialAccess: yes 標記的資源,都會遭到機構政策拒絕。如果資源沒有標記,disableSerialAccess: yes就不會強制執行舊版代管限制。

有條件地將規則新增至機構政策

您可以根據資源附加的標記,有條件地將限制規則新增至資源。您可以在同一項組織政策中新增多項條件,精細控管要套用該政策的資源。

一般運算語言 (CEL) 是用來指定條件運算式的運算式語言。條件運算式由一或多個陳述式組成,並使用邏輯運算子 (&&||!) 聯結。詳情請參閱 CEL 規格與相關語言定義

您可以考慮使用機構政策,根據套用至資源的標記,限制資源的建立位置。如要這麼做,請建立組織政策,強制執行gcp.resourceLocations舊版受管理限制,並使用條件將強制執行範圍縮小至特定資源。

首先,請建立臨時檔案 /tmp/policy.yaml,用來存放機構政策:

name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-east')"
    values:
      allowedValues:
      - in:us-east1-locations
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west')"
    values:
      allowedValues:
      - in:us-west1-locations
  - values:
      deniedValues:
      - in:asia-south1-locations

ORGANIZATION_ID 替換為代碼金鑰的上層機構。

在本例中,凡是附加 location: us-east 代碼的資源,都會限制在 us-east1-locations 值群組內的位置。凡是附加 location: us-west 標記的資源,都會限制在 us-west1-locations 值群組內的位置。機構中的所有資源都會遭到封鎖,無法存取asia-south1-locations值群組中的位置。

然後使用 set-policy 指令設定政策:

gcloud org-policies set-policy /tmp/policy.yaml

限制未標記的資源

您可以使用標記和條件式組織政策,限制任何未使用特定標記的資源。如果您在資源上設定機構政策,限制服務的使用,並規定必須有標記才能使用服務,則除非子項資源已加上標記,否則無法使用。因此,資源必須先按照控管計畫設定,才能使用。

如要限制未加上標記的機構、資料夾或專案資源,您可以在建立機構政策時,使用條件式查詢中的 ! 邏輯運算子。

舉例來說,如要只允許在具有 sqladmin=enabled 標記的專案中使用 sqladmin.googleapis.com,您可以建立機構政策,禁止在沒有 sqladmin=enabled 標記的專案中使用 sqladmin.googleapis.com

  1. 建立標記,判斷資源是否已套用適當的控管措施。舉例來說,您可以建立鍵為 sqlAdmin 且值為 enabled 的標記,指明這個資源應允許使用 Cloud SQL Admin API。例如:

    建立標記鍵和值

  2. 按一下新建立的代碼名稱。您需要標記鍵的命名空間名稱 (列於「標記鍵路徑」下方),才能在後續步驟中建立條件。

  3. 在機構資源層級建立「Restrict Resource Service Usage」(限制資源服務使用情形) 機構政策,拒絕存取 Cloud SQL Admin API。例如:

    建立機構政策來限制資源

  4. 在上述機構政策中新增條件,指定如果沒有管理標記,就強制執行政策。條件建構工具不支援 NOT 邏輯運算子,因此必須在條件編輯器中建構這個條件。例如:

    建立條件式機構政策

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

現在,專案必須附加或繼承 sqlAdmin=enabled 標記,開發人員才能透過該專案使用 Cloud SQL Admin API。

對資源強制執行必要標記

您可以使用自訂機構政策,強制在資源上使用標記。強制執行必要標記後,您只能建立符合機構標記政策的資源,也就是資源會繫結至政策中指定必要標記鍵的標記值。詳情請參閱「設定自訂限制來強制執行標記」。

機構政策沿用

使用標記啟用的清單規則限制,會根據沿用的正常規則,與現有的機構政策合併。只有在條件為 true 時,系統才會套用這些條件式規則。

使用標記啟用的布林規則限制會覆寫現有的機構政策。此外,由於布林規則只有兩種狀態 (true 或 false),因此所有條件陳述式都必須與非條件陳述式相反,才能避免多個代碼彼此衝突。

舉例來說,假設某項機構政策強制執行disableSerialPortAccess舊版代管限制。無條件值 (即未遭任何條件覆寫時使用的值) 為 true。因此,這項政策的任何其他條件陳述式都必須設為 false,以免發生衝突。

後續步驟

如要進一步瞭解如何使用標記,請參閱「建立及管理標記」頁面。

如要進一步瞭解如何建立及管理組織政策限制,請參閱「建立組織政策」。