使用標記設定機構政策

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

事前準備

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

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

必要的角色

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

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

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

使用標記設定機構政策

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

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

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

清單規則範例

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

主控台

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

  1. 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。

    前往「機構政策」頁面

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

  3. 在「機構政策」頁面中,從清單選取限制條件。 系統隨即顯示該限制的「Policy details」(政策詳情) 頁面。

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

  5. 在「編輯政策」頁面中,選取「覆寫上層政策」

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

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

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

  7. 按一下 [新增規則]

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

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

    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.matchTagId('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-locationsallowedValues。凡是標記為 location: us-west1 的資源,都會強制執行 gcp.resourceLocations 舊版管理限制,並套用 us-east1-locationsus-west1-locationsallowedValues

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

布林值規則範例

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

主控台

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

  1. 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。

    前往「機構政策」頁面

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

  3. 在「Organization policies」(機構政策) 頁面上的清單選取限制條件。系統應會顯示該限制的「政策詳細資料」頁面。

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

  5. 在「編輯政策」頁面中,選取「覆寫上層政策」

  6. 按一下 [新增規則]

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

  8. 如要根據標記為機構政策設定條件,請按一下「新增條件」。請注意,如果您在機構政策中新增條件式規則,則只能新增一項無條件規則,否則無法儲存政策。

    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. 在機構資源層級建立「限制資源服務使用」機構政策,拒絕存取 Cloud SQL Admin API。例如:

    建立機構政策來限制資源

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

    建立有條件的機構政策

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

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

對資源強制執行必要標記

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

機構政策沿用

使用標記啟用的清單規則限制會與現有機構政策合併,遵循沿用的正常規則。只有在條件為 true 時,這些條件規則才會生效。

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

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

後續步驟

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

如要進一步瞭解如何建立及管理機構政策限制,請參閱「使用限制」一文。