使用 CMEK 保護資料

本頁提供補充資訊,說明如何使用客戶自行管理的加密金鑰 (簡稱 CMEK) 保護資料,適用於 gcloud functions 指令或 Cloud Functions 第 2 代 API 所建立的函式。

有關 CMEK 的詳細說明,包括手動設定、使用 Autokey 和測試 CMEK 保護機制,請參閱 Cloud Run 說明文件

使用 CMEK 時,下列類型的 Cloud Run functions 資料會經過加密:

  • 為了進行部署作業所上傳,並由 Google 儲存在 Cloud Storage 中,用於建構程序的函式原始碼。
  • 函式建構程序的結果,包括:
    • 從函式原始碼建構的容器映像檔。
    • 已部署的每個函式執行個體。

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

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

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

  • Cloud Run functions 的 CMEK 保護機制僅適用於 Google 代管的 Cloud Run functions 資源;您必須負責保護自己管理的資料和資源,例如原始碼存放區、位於客戶專案中的事件管道,或函式使用的任何服務。

事前準備

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

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

  3. 如果是事件導向函式,請執行「為 Google 管道啟用 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 Run 服務代理 (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com)

  • Eventarc 服務代理 (service-PROJECT_NUMBER@gcp-sa-eventarc.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 functions 授予金鑰存取權限,即可為函式啟用 CMEK。

如要為函式啟用 CMEK,請執行下列指令:

gcloud functions deploy FUNCTION \
    --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。您可以選擇啟用 CMEK 組織政策,強制所有新函式都必須符合 CMEK 規定。

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

如果刪除停用金鑰,或是撤銷金鑰的必要權限,系統不會關閉受該金鑰保護的函式現有執行個體。假如 Cloud Run functions 無法存取金鑰,進行中的函式執行作業會繼續執行,但新的執行作業會失敗。