使用 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. 建立 Artifact Registry 存放區,並啟用 CMEK。用於 Artifact Registry 存放區的金鑰,必須與您為函式啟用 CMEK 時使用的金鑰相同。

將服務帳戶存取權授予金鑰

您必須將下列服務帳戶存取權授予金鑰,才能使用所有函式:

  • Cloud Run functions 服務代理 (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. 在「Permissions」(權限) 分頁中,按一下「Grant access」(授予存取權)

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

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

  7. 按一下「Save」(儲存)

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

設定 Artifact Registry 存放區並啟用 CMEK,接著將 Cloud Run 函式存取權授予金鑰後,即可為函式啟用 CMEK。

如要為函式啟用 CMEK,請按照下列步驟操作:

控制台

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

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

  3. 按一下「Edit」(編輯)

  4. 點按「Runtime, build...」(執行階段,版本...),展開進階設定選項。

  5. 選取「Security and image repo」(安全性和映像檔存放區) 分頁標籤。

  6. 在「Encryption」(加密) 部分中,選取「Customer-managed encryption key (CMEK)」(客戶自行管理的加密金鑰 (CMEK))

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

  8. 在「Container location」(容器位置) 下方,選取「Customer-managed Artifact Registry」(客戶自行管理的 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 保護。

後續步驟