在受限制的 Google Cloud 環境中開發應用程式

我們的文件通常是為了協助您啟動及執行產品或功能而撰寫,但如果貴機構套用安全性限制,部分文件可能無法正常運作。舉例來說,貴公司可能會實作Cloud Foundation Toolkit 中的部分安全限制、Google Cloud 安全藍圖,或自行建立安全限制。

本文可協助您排解使用安全限制的機構中,可能遇到的應用程式部署錯誤。

排解安全性限制問題

IT 作業或安全團隊可以透過機構政策啟用安全限制。這些限制會控管機構資源的使用方式。

如果 API 要求傳回錯誤,API 回應應會說明是否因違反政策所致。回覆應說明違反的限制。請按照下列疑難排解步驟,判斷並瞭解是否發生違規情事:

  1. 查看 API 回應錯誤訊息。您是否能找出部署作業違反的安全限制?

    以下範例說明 sql.restrictPublicIp 限制是問題所在:

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. 瞭解政策違規事項後,請更新資源部署設定,確保符合限制。

    在先前的範例中,我們限制了外部公開 IP 位址,因此請將 Cloud SQL 執行個體設定為使用內部私人 IP 位址。

  3. 如果不確定套用限制的原因或該如何處理,請與安全團隊合作,瞭解政策在貴機構階層中的套用位置,以及他們建議的解決方法。

    檢查機構中是否共用任何部署範本,例如 Terraform 範本。這些範本應詳細說明Google Cloud 基礎架構的設定方式,並限制應用程式的部署作業。

常見的安全限制問題

在 Google Cloud中部署應用程式時,可能會遇到類似下列範例的錯誤:

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

在本範例中,您無法將 Cloud SQL 執行個體設定為使用外部公開 IP 位址。系統正在強制執行套用至您環境的政策所設下的安全限制。

開發應用程式時,可能會啟用下列常見的安全限制,並在 API 錯誤回應中詳細說明。

Compute Engine

限制名稱 實作原因 建議的解決方法
constraints/compute.disableNestedVirtualization 禁止在 VM 內安裝 KVM 相容管理程序。如果沒有適當修補及管理,這種行為可能會造成安全風險。 設定 VM,停用硬體加速的巢狀虛擬化功能。

根據預設,在 Intel Haswell 或更新 CPU 平台上執行的所有 Compute Engine VM 都會啟用這項功能。
constraints/compute.requireShieldedVm 要求新的 VM 執行個體使用已啟用安全啟動、vTPM 和完整性監控選項的受防護磁碟映像檔。這些選項可防止 VM 遭到竄改,以及資料遭到存取或修改。 建立 VM 時,請勿啟用受防護 VM。

如要建立 GKE 叢集,請啟用受保護的 GKE 節點。

Dataflow 目前不支援 Shielded VM 工作站。
constraints/compute.disableSerialPortAccess 移除與 VM 互動或查看診斷輸出內容的安全向量,這些向量可能用於發動攻擊。 建立 VM 時,請勿啟用序列埠存取權。
constraints/compute.disableGuestAttributesAccess 盡量減少惡意應用程式可能濫用的基礎主機和平台資訊。 請勿使用 Compute Engine API 讀取 Compute Engine VM 的訪客屬性
constraints/compute.vmExternalIpAccess 禁止應用程式使用外部 IP 位址執行,且可從網際網路存取。 停用 VM 的外部 IP 存取功能。您只能使用內部私有 IP 位址。

GKE 可以使用沒有公開 IP 位址的私人叢集

Dataprep 和 Dataflow 目前不支援私人 IP 位址。

虛擬網路和 IP 位址

限制名稱 實作原因 建議的解決方法
constraints/compute.skipDefaultNetworkCreation 確保只能建立公司管理的虛擬私有雲 (VPC),並套用網路流量或篩選規則。 將應用程式連線至貴機構中現有的虛擬私有雲。系統不會為新專案部署預設自動建立的虛擬私有雲。
constraints/compute.restrictXpnProjectLienRemoval 如果其他專案的資源依賴共用虛擬私有雲提供的網路服務,請避免誤刪共用虛擬私有雲。 請勿嘗試刪除共用虛擬私有雲。請確認您要刪除的資源正確無誤。
constraints/sql.restrictPublicIp 如果套用這項限制,Cloud SQL 執行個體就無法使用外部 IP 位址,也無法從網際網路存取。 請勿將 Cloud SQL 執行個體設定為使用外部公開 IP 位址。

將 Cloud SQL 執行個體設定為使用內部私人 IP 位址

身分識別與驗證

限制名稱 實作原因 建議的解決方法
constraints/iam.disableServiceAccountKeyCreation 服務帳戶金鑰一旦外洩,就會造成安全風險,因此請禁止匯出。 使用 比服務帳戶金鑰更安全的替代方案進行驗證。
constraints/storage.uniformBucketLevelAccess 只允許使用身分與存取權管理 (IAM),盡量避免將錯誤或不一致的權限套用至儲存空間值區。 啟用統一值區層級存取權,確保 Cloud Storage 值區安全無虞。
constraints/iam.allowedPolicyMemberDomains 限制 Google Cloud 資源存取權,僅限核准的網域。 使用核准網域內的帳戶。這項限制還有其他 已知問題

API 回應錯誤範例

在先前的範例中,我們使用 Cloud SQL 限制外部公開 IP 位址,如果違反政策,API 就會傳回錯誤。以下更詳細的範例顯示 API 回應,說明導致要求失敗的限制。查看自己的 API 回應,瞭解應用程式部署作業失敗的原因。

使用 Google Cloud CLI 時發生 Cloud SQL 失敗:

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

使用 Terraform 時發生 Cloud SQL 失敗:

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

列出套用至專案的機構政策

專案可能會從資料夾或機構層級繼承政策。 視存取角色而定,您可能無法查看階層中較高層級強制執行的政策,因此無法瞭解違規限制的套用位置。

如要查看專案套用的政策或例外狀況,請使用 gcloud org-policies list 指令:

gcloud org-policies list --project=PROJECT_ID

PROJECT_ID 替換為要查看強制執行政策的專案。

如要進一步瞭解套用的政策,請使用 gcloud org-policies describe 指令。提供要說明的政策名稱,以及含有 --project 參數的專案 ID:

gcloud org-policies describe POLICY_NAME \
  --project=PROJECT_ID

更改下列內容:

  • POLICY_NAME:機構政策名稱

  • PROJECT_ID:您要查看強制執行的政策所屬專案

後續步驟

如果無法判斷政策的套用位置,以及如何規避安全限制,請與 IT 作業或安全團隊聯絡。各機構會根據自身環境套用自訂政策和藍圖。

如要進一步瞭解可在機構中套用的所有控制項,請參閱機構政策限制清單