使用 CMEK 的建議做法

本頁面列出建議做法,說明如何在 Cloud de Confiance 資源上設定靜態資料加密,並使用客戶自行管理的加密金鑰 (CMEK)。本指南適用於雲端架構師和安全團隊,說明設計 CMEK 架構時建議採取的做法和決策。

本指南假設您已熟悉 Cloud Key Management Service (Cloud KMS)客戶管理加密金鑰

選擇要使用 CMEK 的位置

如果您希望在雲端中,為自己或客戶的資料建立加密邊界,建議使用客戶自行管理的加密金鑰。詳情請參閱「客戶自行管理的加密金鑰 (CMEK)」。

您可以在相容服務中使用 CMEK,達成下列目標:

  • 擁有加密金鑰。

  • 控管及管理加密金鑰,包括選擇位置、保護等級、建立、存取控制、輪替、使用和銷毀。

  • 在 Cloud KMS 中產生金鑰內容,或匯入在 Cloud de Confiance外部維護的金鑰內容。

  • 設定金鑰的使用位置政策。

  • 在停用服務或補救安全性事件 (加密清除) 時,選擇性刪除受金鑰保護的資料。

  • 建立及使用專屬顧客的金鑰,在資料周圍建立加密界線。

  • 記錄管理員和資料存取權,以加密金鑰。

  • 符合目前或日後要求達成這些目標的法規。

Google 也建議您考慮適用於業務需求的法規遵循架構。不同的法規遵循架構對加密和金鑰管理有不同的要求。法規遵循架構通常會列出加密金鑰管理的高階原則和目標,但不會規定要使用哪個特定產品或設定才能符合法規。您有責任瞭解法規遵循架構的要求,以及控管措施 (包括金鑰管理) 如何協助您滿足這些要求。

如要瞭解 Cloud de Confiance 服務如何協助您符合不同法規遵循架構的要求,請參閱下列資源:

選擇金鑰素材來源

建立金鑰時,您必須允許 Cloud KMS 為您產生金鑰內容,或是手動匯入金鑰內容,這類內容是在 Cloud de Confiance外部產生。建議您盡可能選擇在 Cloud KMS 中產生金鑰內容。這個選項不會有將原始金鑰內容暴露在 Cloud KMS 外部的風險,且會根據您選擇的金鑰輪替週期,自動建立新的金鑰版本。如果必須匯入自己的金鑰材料,建議您評估下列作業考量事項,以及使用自備金鑰 (BYOK) 方法的風險:

  • 您可以導入自動化機制,持續匯入新的金鑰版本嗎?這包括 Cloud KMS 設定,可將金鑰版本限制為僅供匯入,以及 Cloud KMS 外部的自動化功能,可持續產生及匯入金鑰內容。如果自動化動作無法在預期時間建立新的金鑰版本,會有什麼影響?

  • 您打算如何安全儲存或託管原始金鑰內容?

  • 如何降低金鑰匯入程序洩漏原始金鑰內容的風險?

  • 如果原始金鑰內容保留在 Cloud de Confiance外部,重新匯入先前刪除的金鑰會有什麼影響?

  • 自行匯入重要素材資源的優點是否值得承擔營運成本和風險?

選擇金鑰控管和金鑰儲存模型

設計 CMEK 架構時,您必須決定金鑰的管理位置和方式。理想情況下,您會選擇相互配合的金鑰控管和金鑰儲存模型。您選擇的控管和儲存空間模型會影響重要設定,例如強制執行分散權責。

金鑰管理

金鑰控管是指機構中負責管理 Cloud KMS 資源生命週期,以及維護防護措施的人員,以控管 Cloud KMS 的使用方式。金鑰控管方法可分為集中式控管委派式控管

  • 集中式管理:專屬安全或平台團隊負責管理整個機構的所有加密金鑰生命週期。這個模型通常是受到高度監管、必須嚴格遵守法規的企業首選。
  • 委派式控管:中央安全團隊使用防護措施強制執行加密標準,但將金鑰生命週期作業的責任委派給專案中的應用程式擁有者。這些防護措施可包括使用代管限制和自訂限制的組織政策,以及 IAM 授權和拒絕政策。這可消除中央作業瓶頸。
對於有嚴格法規要求,或必須依賴外部金鑰系統管理金鑰生命週期的機構,Google 建議採用集中式金鑰控管。

金鑰儲存

金鑰儲存空間說明在機構內建立 Cloud KMS 資源的位置。金鑰儲存方式主要有兩種:專屬專案金鑰儲存功能和同專案金鑰儲存功能。

  • 專屬專案金鑰儲存功能:專屬金鑰專案包含用於多個應用程式的金鑰。通常每個環境資料夾都有自己的金鑰專案。您可以搭配專屬專案金鑰儲存功能使用 Autokey。 如要進一步瞭解專屬專案金鑰儲存模型,請參閱「專屬專案金鑰儲存功能」。

  • 同專案金鑰儲存功能:金鑰會儲存在與受保護資源相同的Cloud de Confiance 專案中。有時會將此描述為「金鑰會跟隨資料」。您可以搭配同專案金鑰儲存功能使用 Autokey。如要進一步瞭解同專案金鑰儲存模型,請參閱「同專案金鑰儲存功能」。

如果您的首要目標是提升開發人員速度、敏捷度和明確責任,Google 建議採用分散式金鑰控管。

下表提供範例,說明如何結合這些控管和儲存空間模型,以滿足不同機構的需求:

管理模型 專屬專案金鑰儲存功能 同專案金鑰儲存功能
集中式管理

完全集中式做法

建議用途:有嚴格法規要求,必須隔離專案邊界的機構。

作業影響:設定複雜度高。需要強大的自動化功能 (例如「專案工廠」),才能避免開發團隊的營運作業延遲。

受管理的擁有權

建議用途:需要集中控管安全,但希望盡量提升開發人員速度的機構。

作業影響:設定複雜度低。中央安全防護會使用防護措施強制執行政策,而金鑰則與受保護的資源位於同一位置,方便管理。

委派治理

不建議使用

導入跨專案 IAM 複雜度,會導致將金鑰管理作業委派給應用程式團隊的用意失效。

自主開發運作

建議用途:適合步調快速、去中心化的機構,且具備強大的開發運作文化。

作業影響:設定複雜度最低。應用程式團隊在專案界線內,對資源和金鑰擁有完全自主權。

在各個環境中使用一致的架構

建議您針對任何應用程式,在開發、測試和實際工作環境中使用相同的金鑰儲存模式。這種架構一致性有助於確保 IAM 權限、部署管道和安全控管措施在部署至正式環境前,已在較低環境中經過完整測試。如果為環境選擇不同的架構,可能會導致設定漂移,進而造成部署失敗。

專屬專案金鑰儲存功能

在專屬專案金鑰儲存模式中,特定環境資料夾 (例如「Production」) 的所有金鑰都會儲存在集中式共用金鑰專案中。金鑰管理權限會授予共用的安全團隊,他們通常也會管理金鑰生命週期作業和防護措施,例如 CMEK 機構政策、IAM 政策和角色授權。

用途

如果貴機構優先考量對加密金鑰的嚴格集中控管 (通常是受到法規要求),或是金鑰託管於外部 HSM,建議使用專案專屬的金鑰儲存模型。

如果貴機構受限於需要密碼長官或金鑰管理員的法規遵循架構 (例如 PCI DSS 或 BSI C5),則這個模型是不錯的選擇。將應用程式的所有金鑰隔離在單一專屬金鑰專案中,您就能只將 Cloud KMS 管理員角色授予一小群經過稽核的安全管理員。這樣一來,您只需要檢查少數專案的主要管理存取權政策,即可簡化法規遵循稽核程序。

注意事項

這種做法可能會導致跨專案 IAM 複雜化,並為開發團隊帶來潛在瓶頸。 為協助減輕這類問題,您可以實作自動專案佈建 (有時稱為「專案工廠」),自動建立重要項目及指派權限。

範例

下圖顯示實際工作環境的資源階層範例,其中使用專案專屬的金鑰儲存模型:

  • Prod 資料夾包含不同應用程式的個別資料夾和專案,以及 Shared 資料夾。
  • 應用程式專案包含各種不同的資源,例如 Compute Engine 執行個體和 Cloud Storage 值區,但不含任何 Cloud KMS 金鑰。
  • 「Shared」資料夾包含不同應用程式之間共用的資源。
  • 在共用資料夾中,有一個專屬的金鑰專案,其中已啟用 Cloud KMS API。這個專案包含用於保護 Prod 資料夾內資源的所有金鑰。
  • 機構層級和資料夾層級的防護措施 (例如機構政策限制和 IAM 政策) 會強制執行分散權責和其他做法。
  • 開發人員可以在個別應用程式資料夾或專案中擁有進階權限 (例如專案擁有者角色),但不會獲得主要專案的權限。

專屬專案金鑰儲存功能

同專案金鑰儲存功能

在這個模型中,金鑰會儲存在與受保護資源相同的專案中。即使開發人員管理自家應用程式的金鑰生命週期,核心安全團隊通常也會實作金鑰管理防護措施。

用途

如果您的首要目標是提升開發人員速度、靈活度和明確責任,建議使用同專案金鑰儲存模型。將金鑰與受保護的資源放在一起,可讓金鑰擁有權與資料擁有權保持一致:金鑰會隨著資料移動。這個模式可將重要管理責任委派給工作負載擁有者,由他們負責遵守 CMEK 機構政策,並在專案中管理金鑰生命週期作業。

注意事項

雖然這個模型可賦予應用程式團隊權限,但必須認真稽核每個專案中的 IAM 角色,才能強制執行最小權限原則。如果機構導入自備金鑰 (BYOK) 或使用 Cloud EKM 金鑰,這個模型可能會增加營運複雜度,因為需要協調各個系統的作業。

範例

下圖顯示實際工作環境的資源階層範例,該環境使用同專案金鑰儲存模型:

  • Prod 資料夾包含不同應用程式的個別資料夾和專案。
  • 應用程式專案包含各種不同的資源,例如 Compute Engine 執行個體和 Cloud Storage 值區,包括保護這些資源的任何 Cloud KMS 金鑰。
  • 機構層級和資料夾層級的防護措施 (例如組織政策限制和 IAM 政策) 會強制執行分散權責和其他做法,但強制執行分散權責可能需要更謹慎的設定。
  • 開發人員必須在資源專案中擁有 Cloud KMS 的進階權限,才能建立及管理金鑰。

同專案金鑰儲存功能

強制執行分散權責

無論採用哪種儲存空間模型,您都必須為加密金鑰管理員和使用者分別設定主體和權限。為落實最低權限原則和嚴格的職責分離,請根據特定作業責任授予 IAM 角色。

下表概略說明 Cloud KMS 的建議角色區隔:

責任 建議角色 權限摘要

金鑰管理,例如金鑰生命週期和控管

這可以包括需要進階權限的人類系統管理員和 IaC 主體。

Cloud KMS 管理員 (roles/cloudkms.admin)
  • 建立、輪替、啟用、停用及銷毀金鑰和相關資源。
  • 管理 IAM 政策。

資源佈建,例如建立受 CMEK 保護的資源

這包括沒有權限提升的人類開發人員和 IaC 主體。

服務專屬的管理員或編輯者角色,例如:

  • BigQuery 使用者 (roles/bigquery.user)
  • Compute 管理員 (roles/compute.admin)
在建立資源時選取金鑰。

金鑰用途,例如加密和解密

請只將這個角色授予服務代理。如果是用於 CMEK 整合的金鑰,則不需要這些權限。

Cloud KMS CryptoKey 加密者/解密者 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 使用金鑰加密及解密資料。

為 IaC 管道套用最低權限提權

許多機構會使用基礎架構即程式碼 (IaC) 管道 (例如 Terraform 執行器),自動佈建資源。您如何設計金鑰儲存空間,會直接影響這些管道的資安態勢。

如要自動佈建 Cloud KMS 金鑰,必須授予 IaC 管道高權限的管理角色,才能產生金鑰及修改 IAM 政策。如果攻擊者入侵 IaC 管道,就能全面控管金鑰管理層。

  • 如果您使用專屬專案金鑰儲存空間,管道就必須具備中央 Cloud KMS 專案的管理存取權。如果管道遭到入侵,整個機構的金鑰管理平面就可能暴露在風險中。
  • 如果您使用同專案金鑰儲存功能,管道只需要資源專案的管理存取權。這樣做可將潛在風險範圍限制在特定應用程式,但仍須管理專案中的進階權限。

Cloud KMS Autokey 會將金鑰佈建作業委派給安全的 Google 代管服務代理,藉此解決這項風險,讓您為持續進行的金鑰佈建作業實作最低權限管道:

  • 低權限管道:IaC 管道只需要低權限的 Cloud KMS Autokey 使用者角色 (roles/cloudkms.autokeyUser),即可透過建立 KeyHandle 資源要求金鑰。
  • 自動佈建:實際的金鑰建立和 IAM 政策更新作業,會在幕後由 Google 管理的 Cloud KMS 服務代理程式處理。
  • 降低風險範圍:這個設計會盡量減少授予管道的權限,避免授予部署管道高階金鑰建立或安全管理員權限,或指派輔助角色,大幅降低管道遭入侵的風險。

啟用 Autokey 的 IaC 管道需要 Cloud KMS Autokey 管理員 (roles/cloudkms.autokeyAdmin) 等權限較寬鬆的角色,因此如果您使用 IaC 管道管理 Autokey 啟用作業,也必須對個別 IaC 主體套用分散權責原則。

採用建議的金鑰管理做法

Google 建議您遵循金鑰位置、防護等級、輪替時間表、精細度和權限的最佳做法。 您可以使用加密指標資訊主頁,瞭解金鑰是否符合這些做法。您可以使用 Security Command Center 安全漏洞發現項目,偵測分散權責的違規行為。

金鑰位置

您必須在計畫部署 Cloud de Confiance 資源的位置建立 Cloud KMS 金鑰環,這些資源會以 CMEK 加密。 您必須先完成這項操作,才能建立金鑰。

  • 區域和可用區資源必須使用與資源位於相同區域或 global 位置的金鑰環和金鑰。
  • 全域資源必須使用 global 位置的金鑰環和金鑰。

在大多數情況下,這些限制是由 Cloud de Confiance服務強制執行。

強制使用地區金鑰是成功實施資料區域化策略的一環。強制使用特定區域的金鑰環和金鑰,也能確保資源與金鑰環的區域相符。

選擇金鑰精細程度策略

精細度是指每個金鑰預期用途的規模和範圍。舉例來說,如果某個金鑰保護多個資源,就表示該金鑰的精細度較低;如果金鑰只保護一個資源,則精細度較高。選擇合適的鍵粒度策略,有助於遵循 NIST 建議,為每個金鑰設定特定用途。

一般來說,我們建議每個金鑰的用途如下:

  • 用於單一 Cloud de Confiance 專案。
  • 用於單一位置,例如 us-central1
  • 用於單一服務或產品,例如 BigQuery。
  • 盡可能用於單一資源,例如單一 Cloud Storage bucket。

對大多數機構而言,這項策略可妥善平衡維護大量精細金鑰的額外負擔,以及在多個專案、服務或資源之間共用精細度較低的金鑰所帶來的潛在風險。

遵循這些細微程度指南,可輕鬆安全地停用或銷毀金鑰版本,並限制意外或惡意銷毀金鑰的風險。

選擇金鑰的防護等級

建立金鑰時,您有責任根據以 CMEK 加密資料和工作負載的需求,為每個金鑰選取適當的保護等級。 * 如要將金鑰內容儲存在 Cloud de Confiance以外的位置,請使用 Cloud EKM 金鑰。建議您使用 EXTERNAL_VPC 保護層級,以提高可用性。* 如果不需要在 Cloud de Confiance以外的位置儲存金鑰材料,建議使用軟體支援的金鑰。

選擇輪替週期

Cloud KMS 支援軟體支援和採用專屬硬體的對稱金鑰自動金鑰輪替,例如用於 CMEK 的金鑰。如果是軟體支援的金鑰,建議您採用業界標準的 90 天輪替週期。如果是 Cloud HSM 金鑰,建議採用業界標準的 365 天輪替週期。您必須按照所選時間表手動輪替外部金鑰。

建議您評估適合自身需求的金鑰輪替週期。金鑰輪替頻率取決於工作負載的敏感度或法規遵循需求。舉例來說,為符合特定法規標準,您可能每年至少需要金鑰輪替一次,或者您可能會為高度敏感的工作負載選擇更頻繁的輪替週期。

經常輪替金鑰有助於限制以相同金鑰版本加密的訊息數量,進而降低金鑰遭駭的風險和後果。

套用最小權限原則

授予 IAM 角色時,請遵循最小權限原則。強烈建議您避免使用「擁有者」、「編輯者」和「檢視者」等基本角色。請改為授予預先定義的 Cloud KMS 角色,降低過度授權存取權導致安全事件的風險。舉例來說,如果主體只需要匯入金鑰材料,請授予 Cloud KMS 匯入者角色 (roles/cloudkms.importer),而非權限較寬鬆的 Cloud KMS 管理員角色 (roles/cloudkms.admin)。

設定作業防護機制

下列各節說明可採取的控管措施,有助於降低不一致的金鑰使用情形,或意外刪除或毀損等風險。

強制執行專案防刪除鎖定

建議您使用防刪除鎖定功能保護專案 (搶先版),避免 Cloud KMS 專案和其中的金鑰遭到誤刪。專案設有防刪除鎖定時,必須先移除防刪除鎖定,才能刪除專案。對於含有 Cloud KMS 金鑰的專案,這項功能可避免意外刪除金鑰。

要求使用 CMEK 金鑰

建議您使用機構政策限制,在整個環境中強制執行 CMEK 用法。

使用 constraints/gcp.restrictNonCmekServices 封鎖要求,在未指定 CMEK 金鑰的情況下建立特定資源類型。

要求最短的刪除排程時長

建議您設定預定銷毀的最短時間。金鑰刪除後即無法復原,可能會導致資料永久遺失。根據預設,Cloud KMS 會在金鑰內容永久銷毀前,使用 30 天的「已排定銷毀」時間 (有時稱為「軟刪除期」)。這樣一來,萬一不慎刪除金鑰,您還有時間可以還原。不過,具備 Cloud KMS 管理員角色的使用者可以建立預定刪除日數僅 24 小時的金鑰,這可能不足以讓您偵測問題並還原金鑰。預定銷毀時間只能在建立金鑰時設定。

排定刪除作業後,金鑰就無法用於加密編譯作業,且任何使用金鑰的要求都會失敗。在此期間,請監控稽核記錄,確認金鑰未在使用中。如要再次使用金鑰,您必須在排定銷毀期限前還原金鑰。

為確保建立的所有金鑰都符合最短預定刪除時間,建議您將機構政策限制 constraints/cloudkms.minimumDestroyScheduledDuration 設定為至少 30 天,或您偏好的時間長度。這項機構政策會禁止使用者建立金鑰,且預定刪除時間長度不得低於政策中指定的值。

強制執行 CMEK 適用的保護等級

建議您使用機構政策限制,在環境中強制執行金鑰保護等級規定。

使用 constraints/cloudkms.allowedProtectionLevels 強制規定新金鑰、金鑰版本和匯入工作必須使用您允許的防護等級。

設定 CMEK 的偵測性控制項

Cloud de Confiance 提供各種 CMEK 偵測控制項。以下各節將介紹如何啟用及使用與 Cloud KMS 相關的控制項。

啟用並彙整稽核記錄

建議您在集中位置匯總機構中所有資源的 Cloud KMS 管理員活動稽核記錄。這可讓安全團隊或稽核人員一次查看所有與建立或修改 Cloud KMS 資源相關的活動。如需設定匯總記錄接收器的指南,請參閱「匯總並儲存貴機構的記錄檔」。

您可以選擇啟用資料存取記錄,記錄使用金鑰的作業,包括加密和解密作業。使用 CMEK 時,這可能會產生大量記錄,並影響您的費用,因為每個使用 CMEK 的服務都會建立資料存取記錄。啟用資料存取記錄前,建議您先明確定義額外記錄的用途,並評估記錄費用會增加多少。

最佳做法摘要

下表摘要說明本文建議的最佳做法:

主題 工作
Cloud KMS 金鑰專案 為個別環境使用單一集中式金鑰專案,請勿在金鑰保護的資源 Cloud de Confiance所在專案建立 Cloud KMS 資源。
Cloud KMS 金鑰環 為要保護 Cloud de Confiance資源的每個位置建立 Cloud KMS 金鑰環
索引鍵精細程度 選擇符合風險容許度、成本和作業負荷需求的金鑰細微程度模式
防護等級 如果金鑰內容必須儲存在 Cloud de Confiance 以外的位置,或是需要第 2 級或第 3 級的 FIPS 140-2 認證,請選擇 Cloud EKM。否則請選擇軟體金鑰。請參閱選取防護等級的指南
金鑰內容 如要使用 Cloud de Confiance代管的金鑰內容,請盡可能使用 Cloud de Confiance產生的金鑰內容。如果您使用匯入的金鑰材料,請實作自動化和程序來降低風險
金鑰用途與演算法 所有 CMEK 金鑰都必須使用對稱式 ENCRYPT_DECRYPT 金鑰用途和 GOOGLE_SYMMETRIC_ENCRYPTION 演算法。
輪替週期 使用自動金鑰輪替功能,確保金鑰會依排程輪替。選擇並套用符合需求的輪替週期,最好每年至少輪替一次。針對機密工作負載,更頻繁地輪替金鑰。
最小權限 授予權限最小的預先定義角色,讓主體完成工作。請勿使用基本角色。
分散權責 為重要管理員和使用金鑰的主體維持個別權限。
專案防刪除鎖定 使用專案防刪除鎖定,避免重要專案遭到誤刪。
要求使用 CMEK 使用 constraints/gcp.restrictNonCmekServices 限制。
要求最短的刪除排程時長 使用 constraints/cloudkms.minimumDestroyScheduledDuration 限制。
強制執行 CMEK 適用的保護等級 使用 constraints/cloudkms.allowedProtectionLevels 限制。
啟用及彙整稽核記錄 匯總機構中所有資源的管理活動稽核記錄。請考慮是否要啟用使用金鑰的作業記錄。
評估法規遵循要求 檢查 Cloud KMS 架構,並與您必須遵守的任何法規遵循要求進行比較。