建立標記之後,您就能將資源是否具備特定標記設為條件,並按照這個條件允許或拒絕政策。只要使用標記並依據條件強制執行機構政策,即可集中控管階層中的資源。
事前準備
如要進一步瞭解標記及其運作方式,請參閱「標記總覽」。
如需標籤使用方式的詳細說明,請參閱建立及管理標籤。
必要的角色
如要取得管理機構政策所需的權限,請要求管理員為您授予機構的機構政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
您可以將身分與存取權管理條件新增至機構政策管理員角色繫結,藉此委派機構政策的管理權。如要控管主體可管理機構政策的資源,您可以根據特定標記設定角色繫結條件。詳情請參閱「使用限制」一文。
使用標記設定機構政策
如要使用標記判斷機構政策的生效位置,您必須在機構政策 YAML 檔案中指定條件。您可以設定條件來比對特定標記鍵/值組合,要求設定特定標記值,才能強制執行機構政策。
您也可以設定條件來比對標記鍵。這樣一來,您就能針對具有該標記鍵的所有資源啟用或停用強制執行功能,無論附加的標記值為何。
建立或更新資源時,系統會評估並強制執行大多數機構政策。必要標記可用於控管資源建立程序。
清單規則範例
以下範例說明如何設定機構政策,強制執行 gcp.resourceLocations 舊版受管理限制。這項機構政策同時使用條件值和無條件值,且是在同一個政策檔案中設定。
主控台
如要設定機構政策,請按照下列步驟操作:
前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。
在專案選擇工具中,選取要設定機構政策的專案。
在「機構政策」頁面中,從清單選取限制條件。 系統隨即顯示該限制的「Policy details」(政策詳情) 頁面。
如要更新資源的機構政策,請按一下「管理政策」。
在「編輯政策」頁面中,選取「覆寫上層政策」。
在「Policy enforcement」(強制執行) 下方,選取強制執行選項:
如要合併與評估機構政策,請選取「與上層合併」。如要進一步瞭解繼承和資源階層,請參閱「瞭解階層評估」。
如要覆寫從父項資源繼承的政策,請選取「取代」。
按一下 [新增規則]。
在「Policy values」(政策值) 下,選取機構政策應允許所有值、拒絕所有值,還是指定一組自訂值。
- 政策接受的特定值取決於政策適用的服務。如需限制清單和可接受的值,請參閱「機構政策限制」。
如要根據標記為機構政策設定條件,請按一下「新增條件」。
在「Title」(名稱) 欄位中,輸入條件名稱。
在「說明」欄位中,為條件加上說明。說明會提供必要標記的相關資訊,以及這些標記對資源的影響。
您可以使用條件建立工具建立條件,規定必須有特定標記,限制才會生效。
在「條件類型」方塊中,選取「代碼」。
選取條件的運算子。
如要比對整個標記,請搭配使用 has value 運算子和標記的命名空間名稱,或搭配使用 has value ID 運算子和標記的鍵值 ID。
如要只比對標記鍵,請使用 has key 運算子和標記鍵的命名空間名稱,或使用 has key ID 運算子和標記鍵 ID。
按一下「新增」即可建立多個條件。如果新增其他條件,可以切換「And」,將條件邏輯設為要求所有條件。您可以切換「或」,將條件式邏輯設為只要符合其中一個條件即可。
如要刪除運算式,請按一下條件欄位右側的大「X」X。
編輯完條件後,按一下「儲存」。
您可以使用條件編輯器,以程式輔助方式建立條件運算式。系統也會以程式輔助方式,顯示目前的條件集。
條件運算式必須包含 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')
- 您可以使用條件編輯器套用
!邏輯運算子。舉例來說,查詢!resource.matchTag('ORGANIZATION_ID/location', 'us-west1')會將機構政策限制套用至沒有us-west1標記的任何資源。
如要強制執行這項政策,請按一下「設定政策」。
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_TYPE:organizations、folders或projectsRESOURCE_ID:您的機構 ID、資料夾 ID、專案 ID 或專案編號,視RESOURCE_TYPE中指定的資源類型而定ORGANIZATION_ID:代碼金鑰的上層機構
對於這項機構政策,資源和所有子項資源都已強制執行 gcp.resourceLocations 舊版受管理限制,且僅有 us-east1-locations 的 allowedValues。凡是標記為 location: us-west1 的資源,都會強制執行 gcp.resourceLocations 舊版管理限制,並套用 us-east1-locations 和 us-west1-locations 的 allowedValues。
這樣一來,單一機構政策中的限制就能同時強制執行條件式和無條件式值集。
布林值規則範例
以下範例說明如何設定機構政策,強制執行 compute.disableSerialPortAccess 舊版受管理限制。這項機構政策指定資源可存取所有序列埠,但會使用條件,只限制具有相符標記的資源存取序列埠。
主控台
如要設定機構政策,請按照下列步驟操作:
前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。
在專案選擇工具中,選取要設定機構政策的專案。
在「Organization policies」(機構政策) 頁面上的清單選取限制條件。系統應會顯示該限制的「政策詳細資料」頁面。
如要更新資源的機構政策,請按一下「管理政策」。
在「編輯政策」頁面中,選取「覆寫上層政策」。
按一下 [新增規則]。
在「Enforcement」(強制執行) 下,選取是否要強制執行這項機構政策。
如要根據標記為機構政策設定條件,請按一下「新增條件」。請注意,如果您在機構政策中新增條件式規則,則只能新增一項無條件規則,否則無法儲存政策。
在「Title」(名稱) 欄位中,輸入條件名稱。
在「說明」欄位中,為條件加上說明。說明會提供必要標記的相關資訊,以及這些標記對資源的影響。
您可以使用條件建立工具建立條件,規定必須有特定標記,限制才會生效。
在「條件類型」方塊中,選取「代碼」。
選取條件的運算子。
如要比對整個標記,請搭配使用 has value 運算子和標記的命名空間名稱,或搭配使用 has value ID 運算子和標記的鍵值 ID。
如要只比對標記鍵,請使用 has key 運算子和標記鍵的命名空間名稱,或使用 has key ID 運算子和標記鍵 ID。
按一下「新增」即可建立多個條件。如果新增其他條件,可以切換「And」,將條件邏輯設為要求所有條件。您可以切換「或」,將條件式邏輯設為只要符合其中一個條件即可。
如要刪除運算式,請按一下條件欄位右側的大「X」X。
編輯完條件後,按一下「儲存」。
如果組織政策強制執行條件,就只能有一項無條件規則。按一下「新增規則」,然後設定是否預設啟用或停用這項機構政策。
您可以使用條件編輯器,以程式輔助方式建立條件運算式。系統也會以程式輔助方式,顯示目前的條件集。
條件運算式必須包含 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。
- 您可以使用條件編輯器套用
!邏輯運算子。舉例來說,查詢!resource.matchTag('ORGANIZATION_ID/location', 'us-west1')會將機構政策限制套用至沒有us-west1標記的任何資源。
如要完成並套用機構政策,請按一下 [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_TYPE:organizations、folders或projectsRESOURCE_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。
建立標記,判斷資源是否已套用適當的控管措施。舉例來說,您可以建立鍵為
sqlAdmin且值為enabled的標記,指派這個資源允許使用 Cloud SQL Admin API。例如:
按一下新建立的代碼名稱。您需要標記鍵的命名空間名稱 (列於「標記鍵路徑」下方),才能在後續步驟中建立條件。
在機構資源層級建立「限制資源服務使用」機構政策,拒絕存取 Cloud SQL Admin API。例如:

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

!resource.matchTag("012345678901/sqlAdmin", "enabled")
現在,專案必須附加或繼承 sqlAdmin=enabled 標記,開發人員才能透過該專案使用 Cloud SQL Admin API。
對資源強制執行必要標記
您可以透過自訂機構政策,強制在資源上使用標記。強制執行必要標記後,您只能建立符合機構標記政策的資源,也就是資源會繫結至政策中指定必要標記鍵的標記值。詳情請參閱「設定自訂限制來強制執行標記」。
機構政策沿用
使用標記啟用的清單規則限制會與現有機構政策合併,遵循沿用的正常規則。只有在條件為 true 時,這些條件規則才會生效。
使用標記啟用布林值規則的限制會覆寫現有的機構政策。此外,由於布林值規則只有兩種狀態 (true 或 false),因此所有條件陳述式都必須與非條件陳述式相反,才能避免多個代碼彼此衝突。
舉例來說,假設某項機構政策強制執行disableSerialPortAccess舊版代管限制,無條件值 (如果沒有條件覆寫該值,則會使用這個值) 為 true。因此,這項政策的任何其他條件陳述式都必須設為 false,以免發生衝突。
後續步驟
如要進一步瞭解如何使用標記,請參閱「建立及管理標記」頁面。
如要進一步瞭解如何建立及管理機構政策限制,請參閱「使用限制」一文。