使用 CMEK 保護資料

本頁提供補充資訊,協助您使用客戶代管加密金鑰 (CMEK) 保護使用 gcloud functions 指令或 Cloud Functions v2 API 建立的函式。

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

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

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

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

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

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

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

事前準備

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

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

  3. 如果是事件驅動函式,請按照「為 Google 管道啟用 CMEK」一文中所述的額外設定步驟進行操作。

授予服務帳戶金鑰存取權

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

  • 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 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. 在「權限」分頁中,按一下「授予存取權」

  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,請執行下列指令:

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 函式一律會使用金鑰的主要版本來提供 CMEK 保護。為函式啟用 CMEK 時,您無法指定要使用的特定金鑰版本。

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