本頁面說明如何使用「組織政策服務」自訂限制條件,限制對下列 Google Cloud 資源執行的特定作業:
dns.googleapis.com/ManagedZonedns.googleapis.com/Policydns.googleapis.com/ResponsePolicydns.googleapis.com/ResponsePolicyRuledns.googleapis.com/ResourceRecordSet
如要進一步瞭解組織政策,請參閱「自訂組織政策」。
關於組織政策和限制
Google Cloud 組織政策服務可讓您透過程式輔助,集中控管組織的資源。組織政策管理員可以定義組織政策,也就是一組稱為「限制」的限制條件,適用於Google Cloud 資源和這些資源在Google Cloud 資源階層中的子系。您可以在組織、資料夾或專案層級,強制執行組織政策。
組織政策提供各種 Google Cloud 服務的內建代管限制。不過,如要更精細地自訂組織政策中受限的特定欄位,您也可以建立「自訂限制」,並用於組織政策。
政策繼承
根據預設,您強制執行政策的資源子系會繼承組織政策。舉例來說,如果您對資料夾強制執行政策, Google Cloud 會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為及變更方式,請參閱「階層評估規則」。
優點
您可以透過自訂組織政策,允許或拒絕 Cloud DNS 資源的特定值。舉例來說,如果建立或更新 Cloud DNS 執行個體的要求,無法滿足組織政策設定的自訂限制驗證,要求就會失敗,並向呼叫端傳回錯誤。
限制
如同所有組織政策限制,政策變更不會回溯套用至現有執行個體。
- 新政策不會影響現有的執行個體設定。
- 除非您使用Google Cloud 控制台、Google Cloud CLI 或 RPC,將現有執行個體設定從符合規範的值變更為不符合規範的值,否則現有設定仍有效。
- ManagedZone 的
resource.visibility欄位必須設為允許值,且全為大寫:PUBLICPRIVATE
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init - 請確認您知道組織 ID。
ORGANIZATION_ID:組織 ID,例如123456789。CONSTRAINT_NAME:新自訂限制的名稱。自訂限制必須以custom.開頭,且只能包含大/小寫英文字母或數字,例如custom.restrictManagedZoneWithDeniedDescription。這個欄位的長度上限為 70 個字元。RESOURCE_NAME:內含要限制的物件和欄位的Google Cloud 資源完整名稱,例如dns.googleapis.com/ManagedZone。CONDITION:為支援服務資源表示法所撰寫的 CEL 條件。這個欄位的長度上限為 1,000 個字元。如要進一步瞭解可編寫條件的資源,請參閱「支援的資源」。例如resource.description.contains('denied')。ACTION:符合condition時採取動作。可能的值為ALLOW和DENY。DISPLAY_NAME:容易記得的限制名稱。這個欄位的長度上限為 200 個字元。DESCRIPTION:違反政策時,會以錯誤訊息形式顯示且易於理解的限制說明。這個欄位的長度上限為 2,000 個字元。- 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
- 在專案選擇工具中,選取要設定組織政策的專案。
- 在「Organization policies」(組織政策) 頁面的清單中選取限制,即可查看該限制的「Policy details」(政策詳細資料) 頁面。
- 如要為這項資源設定組織政策,請按一下「Manage policy」(管理政策)。
- 在「Edit policy」(編輯政策) 頁面,選取「Override parent's policy」(覆寫上層政策)。
- 按一下「Add a rule」(新增規則)。
- 在「Enforcement」(強制執行) 部分,選取是否要強制執行這項組織政策。
- 選用:如要根據標記設定組織政策的條件,請按一下「Add condition」(新增條件)。請注意,如果為組織政策新增條件式規則,您必須至少新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定組織政策」。
- 按一下「Test changes」(測試變更),模擬組織政策的影響。舊版代管限制不支援政策模擬功能。詳情請參閱「使用 Policy Simulator 測試組織政策變更」。
- 如要完成並套用組織政策,請按一下「Set policy」(設定政策)。政策最多需要 15 分鐘才會生效。
-
PROJECT_ID:要強制執行限制的專案。 -
CONSTRAINT_NAME:要為自訂限制定義的名稱,例如custom.restrictManagedZoneWithDeniedDescription。
必要的角色
如要取得管理自訂組織政策所需的權限,請要求管理員授予組織資源的組織政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立自訂限制
自訂限制是在 YAML 檔案中定義,其中包含您要強制執行組織政策的服務所支援的資源、方法、條件和動作。自訂限制的條件是使用一般運算語言 (CEL) 來定義。如要進一步瞭解如何使用 CEL 在自訂限制中建構條件,請參閱「建立及管理自訂限制」的 CEL 相關章節。
如要建立自訂限制,請使用下列格式建立 YAML 檔案:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
更改下列內容:
如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。
設定自訂限制
為新的自訂限制建立 YAML 檔案後,您必須加以設定,才能用於組織的組織政策。如要設定自訂限制,請使用gcloud org-policies set-custom-constraint 指令:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH 替換成自訂限制檔案的完整路徑,例如 /home/user/customconstraint.yaml。完成後,自訂限制會顯示在 Google Cloud 組織政策清單中,供組織政策使用。如要確認是否存在自訂限制,請使用 gcloud org-policies list-custom-constraints 指令:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID 替換成組織資源的 ID。詳情請參閱「查看組織政策」。強制執行自訂組織政策
如要強制執行限制,請建立參照該限制的組織政策,然後將組織政策套用至 Google Cloud 資源。控制台
gcloud
如要建立含有布林值規則的組織政策,請建立參照限制的政策 YAML 檔案:
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
更改下列內容:
如要強制執行包含限制的組織政策,請執行下列指令:
gcloud org-policies set-policy POLICY_PATH
請將 POLICY_PATH 替換為組織政策 YAML 檔案的完整路徑。政策最多需要 15 分鐘才會生效。
常見用途的自訂組織政策範例
下表提供一些常見自訂限制的語法範例。
| 說明 | 限制語法 |
|---|---|
| 限制 Cloud DNS 執行個體的記錄 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictManagedZoneWithDeniedDescription resourceTypes: - dns.googleapis.com/ManagedZone methodTypes: - CREATE - UPDATE condition: resource.description.contains('denied') actionType: DENY displayName: Restrict create / update for Cloud DNS ManagedZone resources description: Prevents users from creating / updating for Cloud DNS ManagedZone resources |
Cloud DNS 支援的資源
下表列出自訂限制中可參照的 Cloud DNS 資源。| 資源 | 欄位 |
|---|---|
| dns.googleapis.com/ManagedZone |
resource.cloudLoggingConfig.enableLogging
|
resource.description
| |
resource.dnsName
| |
resource.dnssecConfig.defaultKeySpecs.algorithm
| |
resource.dnssecConfig.defaultKeySpecs.keyLength
| |
resource.dnssecConfig.defaultKeySpecs.keyType
| |
resource.dnssecConfig.nonExistence
| |
resource.dnssecConfig.state
| |
resource.forwardingConfig.targetNameServers.domainName
| |
resource.forwardingConfig.targetNameServers.forwardingPath
| |
resource.forwardingConfig.targetNameServers.ipv4Address
| |
resource.forwardingConfig.targetNameServers.ipv6Address
| |
resource.name
| |
resource.privateVisibilityConfig.gkeClusters.gkeClusterName
| |
resource.privateVisibilityConfig.networks.networkUrl
| |
resource.serviceDirectoryConfig.namespace.namespaceUrl
| |
resource.visibility
| |
| dns.googleapis.com/Policy |
resource.alternativeNameServerConfig.targetNameServers.forwardingPath
|
resource.alternativeNameServerConfig.targetNameServers.ipv4Address
| |
resource.alternativeNameServerConfig.targetNameServers.ipv6Address
| |
resource.description
| |
resource.dns64Config.scope.allQueries
| |
resource.enableInboundForwarding
| |
resource.enableLogging
| |
resource.name
| |
resource.networks.networkUrl
| |
| dns.googleapis.com/ResourceRecordSet |
resource.name
|
resource.routingPolicy.geo.enableFencing
| |
resource.routingPolicy.geo.item.healthCheckedTargets.externalEndpoints
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.ipAddress
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.ipProtocol
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.loadBalancerType
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.networkUrl
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.port
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.project
| |
resource.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.region
| |
resource.routingPolicy.geo.item.location
| |
resource.routingPolicy.geo.item.rrdata
| |
resource.routingPolicy.healthCheck
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.enableFencing
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.externalEndpoints
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.ipAddress
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.ipProtocol
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.loadBalancerType
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.networkUrl
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.port
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.project
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.region
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.location
| |
resource.routingPolicy.primaryBackup.backupGeoTargets.item.rrdata
| |
resource.routingPolicy.primaryBackup.primaryTargets.externalEndpoints
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.ipAddress
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.ipProtocol
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.loadBalancerType
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.networkUrl
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.port
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.project
| |
resource.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.region
| |
resource.routingPolicy.primaryBackup.trickleTraffic
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.externalEndpoints
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.ipAddress
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.ipProtocol
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.loadBalancerType
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.networkUrl
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.port
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.project
| |
resource.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.region
| |
resource.routingPolicy.wrr.item.rrdata
| |
resource.routingPolicy.wrr.item.weight
| |
resource.rrdata
| |
resource.ttl
| |
resource.type
| |
| dns.googleapis.com/ResponsePolicy |
resource.description
|
resource.gkeClusters.gkeClusterName
| |
resource.networks.networkUrl
| |
resource.responsePolicyName
| |
| dns.googleapis.com/ResponsePolicyRule |
resource.behavior
|
resource.dnsName
| |
resource.localData.localData.name
| |
resource.localData.localData.routingPolicy.geo.enableFencing
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.externalEndpoints
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.ipAddress
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.ipProtocol
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.loadBalancerType
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.networkUrl
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.port
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.project
| |
resource.localData.localData.routingPolicy.geo.item.healthCheckedTargets.internalLoadBalancer.region
| |
resource.localData.localData.routingPolicy.geo.item.location
| |
resource.localData.localData.routingPolicy.geo.item.rrdata
| |
resource.localData.localData.routingPolicy.healthCheck
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.enableFencing
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.externalEndpoints
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.ipAddress
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.ipProtocol
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.loadBalancerType
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.networkUrl
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.port
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.project
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.healthCheckedTargets.internalLoadBalancer.region
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.location
| |
resource.localData.localData.routingPolicy.primaryBackup.backupGeoTargets.item.rrdata
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.externalEndpoints
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.ipAddress
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.ipProtocol
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.loadBalancerType
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.networkUrl
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.port
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.project
| |
resource.localData.localData.routingPolicy.primaryBackup.primaryTargets.internalLoadBalancer.region
| |
resource.localData.localData.routingPolicy.primaryBackup.trickleTraffic
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.externalEndpoints
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.ipAddress
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.ipProtocol
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.loadBalancerType
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.networkUrl
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.port
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.project
| |
resource.localData.localData.routingPolicy.wrr.item.healthCheckedTargets.internalLoadBalancer.region
| |
resource.localData.localData.routingPolicy.wrr.item.rrdata
| |
resource.localData.localData.routingPolicy.wrr.item.weight
| |
resource.localData.localData.rrdata
| |
resource.localData.localData.ttl
| |
resource.localData.localData.type
| |
resource.ruleName
|