代管限制是預先定義的組織政策,以現代化平台為基礎建構而成,可透過程式輔助集中控管 Compute Engine 資源。包括內建支援安全發布工具,例如 Policy Simulator 和模擬測試。
受管理限制會以 compute.managed.* 前置字元標示,並直接取代舊版 compute.* 限制。
優點
- 安全推出及監控:使用完整工具實作政策、加快變更控管速度,並運用模擬和試執行功能逐步部署。
- 記錄一致性:強制執行記錄和錯誤訊息的統一性,簡化集中式監控作業,並簡化稽核程序。
政策繼承
您在資源上設定的組織政策,會由該資源在資源階層中的子系繼承。舉例來說,如果您對資料夾強制執行政策, Google Cloud 會對該資料夾中的所有專案強制執行政策。
定價
組織政策服務 (包括預先定義 (舊版)、代管和自訂組織政策) 免費提供。
事前準備
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上的分頁,瞭解如何使用範例:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
- 設定預設地區和區域。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
- 請確認您知道組織 ID。
- 如果尚未安裝 gcloud CLI,請安裝並執行
gcloud init初始化。 - 為測試設定預設專案。
必要的角色
如要取得管理具有代管限制的組織政策所需的權限,請要求管理員授予您下列 IAM 角色:
-
機構資源的機構政策管理員 (
roles/orgpolicy.policyAdmin) -
如要測試限制:
在專案中,Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備管理代管限制的組織政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要透過代管限制管理組織政策,必須具備下列權限:
-
orgpolicy.constraints.list -
orgpolicy.policies.create -
orgpolicy.policies.delete -
orgpolicy.policies.list -
orgpolicy.policies.update -
orgpolicy.policy.get -
orgpolicy.policy.set -
如要測試限制:
- 專案的
compute.instances.create權限 - 如要使用自訂映像檔建立 VM,請按一下映像檔上的
compute.images.useReadOnly。 - 如要使用快照建立 VM,請按一下快照上的
compute.snapshots.useReadOnly - 如要使用執行個體範本建立 VM,請按一下執行個體範本上的
compute.instanceTemplates.useReadOnly - 如要將舊版網路指派給 VM:專案的
compute.networks.use權限 - 如要為 VM 指定靜態 IP 位址:專案的
compute.addresses.use權限 - 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中啟用
compute.networks.useExternalIp - 為 VM 指定子網路:專案或所選子網路的
compute.subnetworks.use - 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上擁有
compute.subnetworks.useExternalIp權限 - 如要為專案中的 VM 設定 VM 執行個體中繼資料,請執行下列指令:
compute.instances.setMetadata - 如要為 VM 設定標記,請在 VM 上執行
compute.instances.setTags - 如要為 VM 設定標籤,請在 VM 上執行下列步驟:
compute.instances.setLabels - 如要設定 VM 使用的服務帳戶,請在 VM 上執行
compute.instances.setServiceAccount - 如要為 VM 建立新磁碟,請取得專案的
compute.disks.create權限 - 如要以唯讀或讀寫模式連接現有磁碟,請對磁碟擁有
compute.disks.use權限 - 如要以唯讀模式連接現有磁碟,請對磁碟擁有
compute.disks.useReadOnly權限
- 專案的
可用的代管限制
下列代管式組織政策限制適用於 Compute Engine:
| 限制 | 說明 |
|---|---|
| 允許 VLAN 連結加密設定 |
這項清單限制定義了新 VLAN 連結允許的加密設定。 constraints/compute.managed.allowedVlanAttachmentEncryption
|
| 封鎖 Compute Engine 預先發布版功能 |
這項限制可確保預先發布版功能遭到封鎖,除非明確允許。設為允許後,您就能控管專案中要啟用或停用哪些預先發布功能。專案中只能存取已啟用的預先發布版功能。隨後停用政策不會變更已設定的個別預先發布功能狀態,但可以個別停用。這項限制僅適用於 Compute Alpha 版 API 功能。 constraints/compute.managed.blockPreviewFeatures
|
| 封鎖全專案適用的安全殼層金鑰 |
預覽版:如果對機構、專案或資料夾強制執行這項限制,就無法在專案、專案可用區或執行個體層級,將 block-project-ssh-keys 中繼資料鍵設為 false,以用於機構、專案或資料夾中的 Compute Engine VM。根據預設,系統會允許全專案 SSH 金鑰,並可使用這個中繼資料鍵在專案、專案區域或執行個體層級停用。如要允許特定 VM 使用專案層級的安全殼層金鑰,可以使用標記和條件規則,將這些 VM 排除在這項政策之外。 constraints/compute.managed.blockProjectSshKeys
|
| 停用 Compute Engine 中繼資料的訪客屬性 |
預覽版:強制執行這項限制後,Compute Engine API 就無法存取 Compute Engine VM 的訪客屬性。 constraints/compute.managed.disableGuestAttributesAccess
|
| 停用 VM 巢狀虛擬化功能 |
針對將這項布林限制設為 constraints/compute.managed.disableNestedVirtualization
|
| 停用不符合 FIPS 規範的機型 |
預覽版:如果強制執行這項限制,系統會禁止使用不符 FIPS 規範的機型建立或更新 VM 執行個體。根據預設,系統會允許所有機器類型。您可以使用標記和條件規則,排除特定 VM。 constraints/compute.managed.disableNonFIPSMachineTypes
|
| 限制啟用 VM 序列埠存取權中繼資料 |
如果機構、專案或資料夾強制執行這項限制,系統就不會將其中的 Compute Engine VM 序列埠啟用中繼資料鍵設為 true。根據預設,您可以使用這個中繼資料金鑰,對個別 VM、區域或專案啟用序列埠存取權。如要允許特定 VM 存取序列埠,可以使用標記和條件規則,將這些 VM 排除在這項政策之外。 constraints/compute.managed.disableSerialPortAccess
|
| 停用 Stackdriver 的 VM 序列埠記錄功能 |
強制執行這項限制後,系統就不會將 Compute Engine VM 的序列埠記錄到 Stackdriver。 constraints/compute.managed.disableSerialPortLogging
|
| 禁止建立使用已淘汰容器啟動代理程式 (konlet) 的 Compute Engine 執行個體。 |
預覽版:這項布林值限制會禁止建立使用 konlet (已淘汰的容器啟動代理程式) 的 Compute Engine 執行個體。啟用這項限制後,您就無法建立具有 `gce-container-declaration` 中繼資料鍵的運算執行個體。這項限制也會禁止從含有 `gce-container-declaration` 中繼資料鍵的執行個體範本建立運算執行個體,進而影響使用這類執行個體範本的代管執行個體群組 (MIG)。 constraints/compute.managed.disableVmsWithContainerStartupAgent
|
| 針對 DNS 設定為「僅限區域性」的專案,限制使用全域內部 DNS (gDNS)。 |
如果強制執行這項限制,gDNS 的使用就會受到限制。這項限制會停用 gDNS VM 建立作業,並禁止更新 VM 以使用 gDNS。將 zDNS 專案還原為 gDNS 不會遭到封鎖,但後續呼叫 Instance API 時會導致政策違規強制執行。 constraints/compute.managed.disallowGlobalDns
|
| 須完成 OS 設定 |
如果強制執行這項限制,所有新專案都必須啟用 VM 管理員 (OS 設定)。如果在新專案和現有專案中設定這項限制,就無法進行會在專案、專案區域或執行個體層級停用 VM 管理員的中繼資料更新作業。您可以允許特定 VM 執行個體停用 VM 管理員。請先套用標記來標示執行個體,然後根據標記值使用條件式規則,將這些執行個體適當排除在強制執行範圍之外。 constraints/compute.managed.requireOsConfig
|
| 需要 OS 登入 |
如果強制執行這項限制,所有新建立的專案都必須啟用 OS 登入。如果在新專案和現有專案中設定這項限制,就無法進行會在專案、專案區域或執行個體層級停用 OS 登入的中繼資料更新作業。您可以允許特定 VM 執行個體停用 OS 登入功能。請先套用標記來標示執行個體,然後根據標記值使用條件式規則,將這些執行個體適當排除在強制執行範圍之外。 constraints/compute.managed.requireOsLogin
|
| 限制非機密運算 |
預覽版:所有新 VM 都必須啟用機密運算。根據預設,不需有新 VM 即可使用機密運算。您可以透過標記 VM 執行個體,然後根據套用的標記,使用條件式規則強制執行限制,藉此套用/豁免這項限制。 constraints/compute.managed.restrictNonConfidentialComputing
|
| 限制使用通訊協定轉送 |
這項限制可讓您限制機構中可建立的通訊協定轉送部署作業類型 (內部或外部)。如要設定限制,請指定允許部署的通訊協定轉送類型許可清單。允許清單只能包含下列值:
constraints/compute.managed.restrictProtocolForwardingCreationForTypes
|
| 限制 VM IP 轉送 |
這項限制會定義 Compute Engine VM 執行個體是否可啟用 IP 轉送功能。根據預設,如未指定政策,任何 VM 都可在任何虛擬網路中啟用 IP 轉送功能。如果強制執行這項限制,系統就會拒絕建立或更新已啟用 IP 轉送功能的 VM 執行個體。您可以允許特定 VM 執行個體啟用 IP 轉送功能。請先套用標記來標示執行個體,然後根據標記值使用條件式規則,將這些執行個體適當排除在強制執行範圍之外。 constraints/compute.managed.vmCanIpForward
|
| 限制 VM 執行個體的外部 IP |
這項限制定義 Compute Engine VM 執行個體是否可使用 IPv4 外部 IP 位址。根據預設,所有 VM 執行個體皆可使用外部 IP 位址。如果強制執行這項限制,系統會拒絕建立或更新具有 IPv4 外部 IP 位址的 VM 執行個體。但不會限制使用 IPv6 外部 IP 位址。您可以允許特定 VM 執行個體使用外部 IPv4 IP 位址。請先套用標記來標示執行個體,然後根據標記值使用條件式規則,將這些執行個體適當排除在強制執行範圍之外。 constraints/compute.managed.vmExternalIpAccess
|
階層式中繼資料評估
依據預先定義的中繼資料金鑰 (例如 OS 登入或序列埠存取權) 代管的限制,支援階層式評估。Compute Engine 評估這些限制時,會檢查在 VM 執行個體、專案或可用區層級設定的中繼資料值。
在專案或可用區層級設定中繼資料值,可大規模管理 VM 執行個體。不過,只有在建立 VM 執行個體或更新 API 呼叫時,才會強制執行限制。因此,只有在建立或更新 VM 執行個體時,專案或區域中繼資料的變更才會影響該執行個體的限制合規性。
以中繼資料為準的限制和層級
| 限制 | 中繼資料鍵 | 中繼資料階層層級 |
|---|---|---|
compute.managed.disableSerialPortAccess |
serial-port-enable |
專案、可用區、執行個體 |
compute.managed.requireOsLogin |
enable-oslogin |
專案、可用區、執行個體 |
compute.managed.disableGuestAttributesAccess |
enable-guest-attributes |
專案、可用區、執行個體 |
compute.managed.requireOsConfig |
enable-osconfig |
專案、可用區、執行個體 |
compute.managed.disallowGlobalDns |
VmDnsSetting |
專案、執行個體 |
安全發布:政策生命週期
為避免逐步導入新限制時服務中斷,Google 建議按照下列步驟導入受管理限制:
使用 Policy Simulator 進行分析
強制執行政策前,請先使用 Policy Simulator,查看哪些現有資源違反政策。步驟如下:
前往 Google Cloud 控制台的「Organization Policies」(機構政策) 頁面。
在篩選列中搜尋限制條件,然後按一下限制條件名稱,前往「政策詳細資料」頁面。
按一下「測試變更」,即可產生模擬報表。
階層式中繼資料變更可能需要幾小時,才會反映在 VM 中繼資料設定限制的模擬報表中。
查看報告,重新設定不符規定的資源或申請豁免。
使用模擬測試驗證
模擬測試模式會將違規事項記錄到 Cloud Logging,但不會強制執行限制。
如要測試限制,請使用 gcloud org-policies set-policy 指令,如下所示:
建立政策 YAML 檔案 (例如
dry-run-policy.yaml),並使用以下內容:dryRunSpec:name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin dryRunSpec: rules: - enforce: true將
PROJECT_ID替換為專案 ID。套用政策:
gcloud org-policies set-policy dry-run-policy.yaml
全面執行
模擬及測試政策後,即可對資源強制執行政策。政策變更最多可能需要 15 分鐘,才會在所有系統中生效。Google Cloud
測試限制強制執行
設定政策後,您可以使用 gcloud CLI 驗證強制執行情況。舉例來說,如要測試 compute.managed.requireOsLogin 限制,請按照下列步驟操作:
列出現有政策,確認設定:
gcloud org-policies list --project=PROJECT_ID使用 YAML 檔案套用強制執行政策:
gcloud org-policies set-policy enforce_managed_constraint.yaml呼叫變動 API,確認強制執行狀態。嘗試使用不符規定的中繼資料建立 VM 執行個體時,應該會失敗:
gcloud compute instances create VM_NAME \ --machine-type=MACHINE_TYPE \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --metadata=enable-oslogin=false更改下列內容:
VM_NAME:新 VM 執行個體的名稱。MACHINE_TYPE:有效機型,例如e2-micro。IMAGE_FAMILY:有效的映像檔系列,例如debian-11。IMAGE_PROJECT:映像檔系列的專案,例如debian-cloud。
請查看錯誤訊息。您應該會看到拒絕訊息,指出違反的特定限制條件:
ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Operation denied by org policy: [constraints/compute.managed.requireOsLogin]
使用標記設定條件式豁免
您可以根據業務需求,使用標記為特定資源授予例外狀況。在本範例中,我們會使用名為 osLoginOptional 的標記,識別免除 OS 登入需求的資源。將這個標記繫結至資源,並將值設為 true 時,即使政策仍嚴格套用至環境中的其他資源,機構政策也會允許該特定資源存在,且不必啟用 OS 登入功能。
如要使用標記授予例外狀況,請按照下列步驟操作:
建立標記:使用 gcloud CLI 建立標記鍵和標記值。
建立標記鍵:
gcloud resource-manager tags keys create osLoginOptional \ --parent=organizations/ORGANIZATION_ID建立標記值:
gcloud resource-manager tags values create true \ --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
請將
ORGANIZATION_ID替換成組織 ID。將標記繫結至資源。如要將專案從
compute.managed.requireOsLogin限制中排除,請使用gcloud resource-manager tags bindings create指令,將osLoginOptional=true標記繫結至專案:gcloud resource-manager tags bindings create \ --tag-value=ORGANIZATION_ID/osLoginOptional/true \ --parent=//cloudresourcemanager.googleapis.com/projects/PROJECT_ID \ --location=global將
ORGANIZATION_ID替換為機構 ID,並將PROJECT_ID替換為要豁免的專案 ID。如要瞭解如何將標記繫結至其他資源,請參閱「將標記繫結至資源」。
更新政策:建立或更新政策 YAML 檔案 (例如
policy.yaml),加入條件式規則。name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin spec: rules: - condition: expression: "resource.matchTag('ORGANIZATION_ID/osLoginOptional', 'true')" enforce: false - enforce: true更改下列內容:
PROJECT_ID:您的專案 ID。ORGANIZATION_ID:您的機構 ID。
套用政策:使用下列 gcloud CLI 指令啟用設定:
gcloud org-policies set-policy policy.yaml
從舊版限制遷移
遷移時請注意,代管限制會改善舊版政策的行為,但不會完全複製。代管限制只會在建立或修改資源的 API 要求期間檢查違規情形,因此可提供更高的預測性。如果要求違反限制,API 呼叫就會失敗,並顯示明確的錯誤訊息。這與舊版政策不同,舊版政策可在作業的各個階段強制執行,或做為資源屬性,因此強制執行行為較難預測。
從舊版 compute.* 限制條件改用現代化 compute.managed.* 等效限制條件時,請按照下列步驟操作,避免無意間加嚴限制:
- 探索:找出新的代管限制替代方案。
- 分析及驗證:如前文所述,使用政策模擬器和模擬測試。
- 強制執行受管理限制:同時套用新舊受管理限制。
- 刪除舊版政策:
- 前往 Google Cloud 控制台中的資產清單,然後依
orgpolicy.Policy和舊版限制名稱篩選,找出使用舊版限制的所有政策。 - 刪除所有使用舊版限制的政策。刪除政策會將該政策重設為 Google 代管的預設行為,適用於該限制。
- 前往 Google Cloud 控制台中的資產清單,然後依
後續步驟
- 如要進一步瞭解這項服務的基本概念和優點,請參閱「機構政策服務簡介」。
- 如需建立及管理政策的詳細操作說明,請參閱 Resource Manager 說明文件。
- 查看完整限制清單,瞭解所有 Google Cloud 服務適用的限制。
- 瞭解如何使用Policy Simulator,進一步分析組織政策的影響。