使用 CMEK (第 1 代) 保護資料

您可以使用 Cloud Key Management Service 的客戶管理的加密金鑰 (CMEK) 保護 Cloud Run 函式和相關靜態資料。這類金鑰會透過 Cloud KMS 建立及管理,並以軟體金鑰的形式儲存在 HSM 叢集外部

使用 CMEK 部署函式時,系統會使用您完全控管的加密金鑰保護與函式相關聯的資料。這類加密方式可讓您遵守金融服務等特定產業的法規遵循要求。由於金鑰由您擁有,並非由 Google 控管,因此當金鑰遭到停用或刪除時,任何人 (包括您) 都無法存取這些加密金鑰所保護的資料。

使用 CMEK 時,系統會將下列類型的 Cloud Run 函式資料加密:

  • 為部署而上傳的函式原始碼,並由 Google 儲存在 Cloud Storage 中,用於建構程序。
  • 函式建構程序的結果,包括:
    • 從函式原始碼建構的容器映像檔。
    • 每個已部署函式的例項。
  • 內部事件傳輸管道的靜止資料。

函式建構程序本身會受到專為每個版本產生的暫時性金鑰保護。詳情請參閱「Cloud Build 中的 CMEK 法規遵循」。此外,請注意下列事項:

  • 檔案中繼資料 (例如檔案系統路徑或修改時間戳記) 不會加密。

  • 如果關鍵已停用,就無法部署容器映像檔,也無法啟動新的執行個體。

  • Cloud Run 函式 CMEK 保護功能僅適用於 Google 管理的 Cloud Run 函式資源;您必須負責保護自己管理的資料和資源,例如原始碼存放區或函式使用的任何服務。

為 Cloud Run 函式設定 CMEK 需要完成以下步驟:

  • 授予必要的服務帳戶存取金鑰權限:

    • 針對所有函式,您必須將金鑰存取權授予 Cloud Run 函式、Artifact Registry 和 Cloud Storage 服務帳戶。
  • 建立 CMEK 保護的 Artifact Registry 存放區,用於儲存函式映像檔。

  • 在函式中啟用 CMEK。

  • 您可以選擇啟用 CMEK 組織政策,強制執行所有新函式符合 CMEK 法規。

以下將詳細說明這些步驟。

事前準備

  1. 建立單一區域金鑰,用於加密函式。如要瞭解如何建立金鑰,請參閱「建立對稱式加密金鑰」。

  2. 建立已啟用 CMEK 的 Artifact Registry 存放區。為函式啟用 CMEK 時,您必須為 Artifact Registry 存放區使用相同的金鑰。

授予服務帳戶金鑰存取權

對於所有函式,您必須將金鑰存取權授予下列服務帳戶:

  • Cloud Run 函式服務代理人 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

  • Artifact Registry 服務代理人 (service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com)

  • Cloud Storage 服務代理人 (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

如要授予這些服務帳戶金鑰存取權,請將每個服務帳戶設為金鑰的實體,然後授予服務帳戶 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

主控台

  1. 前往 Google Cloud 控制台的「Cloud Key Management Service」頁面:
    前往「Cloud KMS」頁面

  2. 按一下包含所選金鑰的金鑰環名稱。

  3. 按一下鍵的名稱,即可查看鍵的詳細資料。

  4. 在「權限」分頁中,按一下「授予存取權」

  5. 在「新增主體」欄位中,輸入先前顯示的三個服務帳戶電子郵件地址,一次為三個帳戶指派權限。

  6. 在「Select a role」(選取角色) 下拉式清單中,選取「Cloud KMS CryptoKey Encrypter/Decrypter」(Cloud KMS 加密編譯金鑰加密者/解密者)

  7. 按一下 [儲存]

gcloud

針對先前討論的每個服務帳戶,執行下列指令:

gcloud kms keys add-iam-policy-binding KEY \
--keyring KEY_RING \
--location LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

更改下列內容:

  • KEY:金鑰名稱。例如:my-key

  • KEY_RING:金鑰環的名稱。例如:my-keyring

  • LOCATION:鍵的位置。例如:us-central1

  • SERVICE_AGENT_EMAIL:服務帳戶的電子郵件地址。

為函式啟用 CMEK

設定啟用 CMEK 的 Artifact Registry 存放區,並授予 Cloud Run 函式存取金鑰的權限後,您就可以為函式啟用 CMEK。

如何為函式啟用 CMEK:

主控台

  1. 前往 Google Cloud 控制台的「Cloud Run 函式」頁面:
    前往「Cloud Run 函式」頁面

  2. 按一下要啟用 CMEK 的函式名稱。

  3. 按一下 [編輯]

  4. 按一下「Runtime, build...」展開進階設定選項。

  5. 選取「安全性和映像檔存放區」分頁標籤。

  6. 在「Encryption」區段中,選取「Customer-managed encryption key (CMEK)」

  7. 從下拉式選單中選取所選金鑰。

  8. 在「容器位置」下方,選取「客戶管理的 Artifact Registry」

  9. 在「Artifact registry」下拉式選單中,選取受 CMEK 保護的存放區。

  10. 點按「Next」

  11. 按一下 [Deploy] (部署)

gcloud

執行下列指令。

gcloud functions deploy FUNCTION \
--no-gen2 \
--kms-key=KEY \
--docker-repository=REPOSITORY \
--source=YOUR_SOURCE_LOCATION
FLAGS...

更改下列內容:

  • FUNCTION:要啟用 CMEK 的函式名稱。例如:cmek-function

  • KEY:完整的鍵名稱,格式如下:projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

  • REPOSITORY:Artifact Registry 存放區的完整名稱,格式如下:projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY

  • YOUR_SOURCE_LOCATION:為現有函式啟用 CMEK 時,請明確指定此參數,確保系統重新部署所需的原始碼。

  • FLAGS...:部署函式時可能需要的其他標記,特別是建立部署作業。詳情請參閱「部署 Cloud Run 函式」。

為該函式啟用 CMEK。

請注意,Cloud Run 函式一律會使用金鑰的主要版本來提供 CMEK 保護。為函式啟用 CMEK 時,您無法指定要使用的特定金鑰版本。

如果金鑰遭到刪除停用,或是其上必要的權限遭到撤銷,則不會關閉受該金鑰保護的函式活動執行個體。已執行中的函式會繼續執行,但如果 Cloud Run 函式無法存取金鑰,新執行作業就會失敗。

測試 CMEK 保護

如要確認 CMEK 防護機制是否運作正常,您可以停用用於為函式啟用 CMEK 的金鑰,然後嘗試觸發函式:

  1. 停用用於保護函式的金鑰

  2. 嘗試查看與這個函式相關聯的原始碼。嘗試應會失敗。

  3. 嘗試觸發受 CMEK 保護的函式。嘗試應該會失敗。

  4. 確認 CMEK 保護機制運作正常後,請啟用金鑰

函式的 CMEK 保護功能已確認。

後續步驟