關於客戶自行管理的加密金鑰 (CMEK)

根據預設,PostgreSQL 適用的 Cloud SQL 會加密靜態客戶內容。PostgreSQL 適用的 Cloud SQL 會為您處理加密作業,您不必採取其他動作。這項做法稱為「Google 預設加密」

如要控管加密金鑰,您可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),搭配整合 CMEK 的服務,包括 Cloud SQL for PostgreSQL。使用 Cloud KMS 金鑰可讓您控管保護等級、位置、輪換時間表、使用權限和存取權,以及加密範圍。使用 Cloud KMS 也能追蹤金鑰使用情形、查看稽核記錄,以及控管金鑰生命週期。您可以在 Cloud KMS 中控制及管理這些金鑰,而不是由 Google 擁有及管理用來保護您資料的對稱金鑰加密金鑰 (KEK)

使用 CMEK 設定資源後,存取 PostgreSQL 適用的 Cloud SQL 資源時,體驗與使用 Google 預設加密機制類似。如要進一步瞭解加密選項,請參閱客戶管理的加密金鑰 (CMEK)

使用 Cloud KMS Autokey 的 CMEK

您可以手動建立 CMEK 來保護 PostgreSQL 適用的 Cloud SQL 資源,也可以使用 Cloud KMS Autokey。使用 Autokey 時,系統會在 PostgreSQL 適用的 Cloud SQL 中建立資源時,視需要產生金鑰環和金鑰。如果服務代理尚未建立,系統會建立服務代理,並授予必要的 Identity and Access Management (IAM) 角色,供服務代理使用金鑰進行加密和解密作業。詳情請參閱「Autokey 總覽」。

Autokey 不會為 PostgreSQL 適用的 Cloud SQL BackupRun 資源建立金鑰。建立 PostgreSQL 適用的 Cloud SQL 執行個體備份時,系統會使用主要執行個體的客戶管理金鑰加密備份。

使用 Terraform 或 REST API 建立資源時,PostgreSQL 適用的 Cloud SQL 僅與 Cloud KMS Autokey 相容。

如要瞭解如何使用手動建立的 CMEK 保護 PostgreSQL 適用的 Cloud SQL 資源,請參閱「使用客戶管理的加密金鑰 (CMEK)」。

如要使用 Cloud KMS Autokey 建立的 CMEK 保護 PostgreSQL 適用的 Cloud SQL 資源,請參閱「搭配 Secret Manager 資源使用 Autokey」一文,瞭解如何使用 Secret Manager。

Google 管理的加密金鑰與客戶管理的加密金鑰

下圖顯示使用 Google 預設加密機制和客戶自行管理的加密金鑰時,Cloud SQL 執行個體內的靜態資料加密運作方式。

不使用 CMEK

資料上傳至 Google 後,會分成多個區塊,每個區塊都會以專屬的資料加密金鑰加密。資料加密金鑰會使用金鑰加密金鑰包裝。使用預設的 Google 加密方式時,金鑰加密金鑰會從 Google 內部金鑰庫擷取。加密區塊和經過包裝的加密金鑰會散布於 Google 的儲存基礎架構。

使用 CMEK

資料上傳至 Google 後,會分成多個區塊,每個區塊都會以專屬的資料加密金鑰加密。資料加密金鑰會使用金鑰加密金鑰包裝。使用 Cloud KMS 的 CMEK 時,系統會從 Cloud KMS 擷取金鑰加密金鑰。加密區塊和經過包裝的加密金鑰會散布於 Google 的儲存基礎架構。

解密以客戶管理的加密金鑰包裝的資料時,Cloud SQL 會使用 KEK 解密 DEK,並使用未加密的 DEK 解密靜態資料。

以 DEK 加密資料區塊,並與經過包裝的 DEK 一併儲存。系統會將解開 DEK 包裝的要求傳送至 KMS 儲存空間,該空間會儲存無法匯出的 KEK。KMS 儲存空間會傳回已解開包裝的 DEK。

Cloud SQL 何時會與 CMEK 金鑰互動?

作業 注意事項
建立執行個體 建立執行個體時,請將執行個體設定為使用客戶自行管理的加密金鑰。
建立備份 為啟用 CMEK 的執行個體備份資料時,系統會使用客戶自行管理的加密金鑰,加密使用者查詢和回覆等使用者資料。從啟用 CMEK 的執行個體建立的備份,會沿用來源執行個體的加密方式,並使用相同的 Cloud KMS 金鑰。
執行個體還原 還原已啟用 CMEK 的執行個體時,Cloud SQL 會使用金鑰存取要還原的備份執行個體資料。還原至其他執行個體時,目標執行個體可使用不同的金鑰進行加密。
建立副本 在相同區域中建立 Cloud SQL 執行個體的唯讀備用資源時,該資源會沿用父項執行個體的 CMEK。如果您要在其他區域建立唯讀副本,請從該區域選取 CMEK。每個區域都會使用自己的金鑰組。
建立副本 從啟用 CMEK 的執行個體複製時,會沿用與來源執行個體相同的 Cloud KMS 金鑰,並繼承 CMEK 加密設定。
執行個體更新 更新啟用 CMEK 的執行個體時,Cloud SQL 會檢查 CMEK 金鑰。

哪些位置支援啟用 CMEK 的 Cloud SQL 執行個體?

CMEK 適用於所有 Cloud SQL 執行個體位置

關於服務帳戶

如果 Cloud SQL 執行個體已啟用 CMEK,您必須使用服務帳戶向 Cloud KMS 要求金鑰存取權。

如要在專案中使用客戶管理的加密金鑰,您必須擁有服務帳戶,並授予服務帳戶客戶管理的加密金鑰存取權。服務帳戶必須位於專案內。服務帳戶會顯示在所有區域中。

如果您使用 Cloud Console 建立執行個體,首次選擇「客戶管理的金鑰」選項時,Cloud SQL 會自動建立服務帳戶 (如果服務帳戶尚不存在)。Cloud SQL 自動建立服務帳戶時,您不需要使用者帳戶的特殊權限。

關於金鑰

在 Cloud KMS 中,您需要建立含有加密編譯金鑰的金鑰環,並設定位置。建立新的 Cloud SQL 執行個體時,請選取這個金鑰來加密執行個體。

建立使用客戶管理加密金鑰的新 Cloud SQL 執行個體時,您需要知道金鑰 ID 和金鑰區域。您必須將新的 Cloud SQL 執行個體放在與執行個體相關聯的客戶自行管理加密金鑰相同的區域。您可以為這兩個金鑰和 Cloud SQL 執行個體建立一個專案,也可以分別建立專案。

客戶自行管理的加密金鑰採用下列格式:

projects/[KMS_PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY_NAME]

如果 Cloud SQL 無法存取金鑰 (例如停用金鑰版本),Cloud SQL 會暫停執行個體。金鑰恢復存取權後,Cloud SQL 會自動繼續執行個體。

輪替金鑰時,系統不會自動使用新的主要金鑰版本,重新加密以該金鑰加密的執行個體。您可以使用新的主要金鑰版本,重新加密任何現有的 CMEK 主要執行個體或副本。如要進一步瞭解如何在金鑰輪替後重新加密 Cloud SQL 執行個體或副本,請參閱「重新加密已啟用 CMEK 的現有執行個體或副本」。

外部金鑰管理員

您可以使用儲存在外部金鑰管理工具 (例如 Fortanix、Futurex 或 Thales) 中的金鑰,做為客戶自行管理的加密金鑰。如要瞭解如何搭配使用外部金鑰與 Cloud KMS,請參閱 Cloud External Key Manager (Cloud EKM)

金鑰存取依據

您可以將金鑰存取理由與 Cloud EKM 搭配使用。您可以使用 Key Access Justifications 查看每項 Cloud EKM 要求的原因。此外,您也可以根據提供的理由,自動核准或拒絕要求。詳情請參閱金鑰存取依據總覽

因此,每次嘗試解密資料時,「金鑰存取依據」都會提供原因說明,進一步控管資料。

如要瞭解如何將金鑰用於 Cloud SQL 執行個體,請參閱使用 CMEK 建立 Cloud SQL 執行個體

如何讓 CMEK 加密資料永久無法存取?

您可能需要永久銷毀以 CMEK 加密的資料。如要這麼做,請銷毀客戶自行管理的加密金鑰版本。您無法刪除金鑰環或金鑰,但可以刪除金鑰的金鑰版本。

如何從啟用 CMEK 的執行個體匯出資料,以及匯入資料至這類執行個體?

如要在匯出或匯入資料時,使用客戶管理的金鑰保持資料加密狀態,您必須先在 Cloud Storage 值區中設定客戶管理的加密金鑰,再將資料匯出至該值區。如果資料先前儲存在已啟用客戶自行管理加密金鑰的執行個體中,將資料匯入新執行個體時,沒有特殊規定或限制。

限制

下列限制適用於客戶代管的加密金鑰:

  • 您無法在現有執行個體上啟用客戶自行管理的加密金鑰。
  • 您無法為與主要執行個體位於相同區域的副本指派其他金鑰。如果是跨區域副本,您需要為副本區域建立新金鑰。
  • 您無法為副本指派其他金鑰。
  • 您無法使用客戶自行管理的加密金鑰加密下列項目:
    • 外部伺服器 (外部主要執行個體和外部副本)
    • 執行個體中繼資料,例如執行個體 ID、資料庫版本、機器類型、標記、備份排程等。
  • 您無法使用客戶自行管理的加密金鑰,加密傳輸中的使用者資料,例如使用者查詢和回應。
  • 建立 Cloud SQL 執行個體後,您就無法變更加密金鑰類型。您無法從Google-owned and Google-managed encryption key 切換為 Cloud Key Management Service (KMS) 金鑰,反之亦然。

後續步驟