使用 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 規定。
以下將詳細說明這些步驟。
事前準備
建立單一區域金鑰,用於加密函式。想瞭解如何建立金鑰,請參閱「建立對稱式加密金鑰」。
建立 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 角色:
控制台
前往 Google Cloud 控制台的 Cloud Key Management Service 頁面:
前往 Cloud KMS 頁面按一下包含所選金鑰的金鑰環名稱。
按一下金鑰名稱,查看金鑰詳細資料。
在「Permissions」(權限) 分頁中,按一下「Grant access」(授予存取權)。
在「New principals」(新增主體) 欄位中,輸入先前顯示的所有三個服務帳戶電子郵件地址,一次為這三個帳戶指派權限。
在「Select a role」(選取角色) 下拉式選單中,選取「Cloud KMS CryptoKey Encrypter/Decrypter」(Cloud KMS CryptoKey 加密者/解密者)。
按一下「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,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run 函式頁面:
前往 Cloud Run 函式頁面按一下要啟用 CMEK 的函式名稱。
按一下「Edit」(編輯)。
點按「Runtime, build...」(執行階段,版本...),展開進階設定選項。
選取「Security and image repo」(安全性和映像檔存放區) 分頁標籤。
在「Encryption」(加密) 部分中,選取「Customer-managed encryption key (CMEK)」(客戶自行管理的加密金鑰 (CMEK))。
從下拉式選單中選取所選金鑰。
在「Container location」(容器位置) 下方,選取「Customer-managed Artifact Registry」(客戶自行管理的 Artifact Registry)。
在「Artifact registry」(構件註冊資料庫) 下拉式選單中,選取受 CMEK 保護的存放區。
點按「Next」(繼續)。
按一下「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 的金鑰,然後嘗試觸發函式:
嘗試查看與這個函式相關聯的原始碼,嘗試應會失敗。
嘗試觸發受 CMEK 保護的函式,嘗試應會失敗。
確認 CMEK 保護機制正常運作後,請啟用金鑰。
現在已確認函式受到 CMEK 保護。
後續步驟
- 瞭解如何輪替金鑰。
- 進一步瞭解 Google 預設加密機制。
- 進一步瞭解 CMEK。
- 進一步瞭解 CMEK 組織政策。