根據預設,Workflows 會加密靜態儲存的客戶內容。工作流程會為您處理加密作業,您不必採取任何其他動作。這個選項稱為「Google 預設加密」。
如果您想控制加密金鑰,可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),並搭配使用 CMEK 整合服務,包括工作流程。使用 Cloud KMS 金鑰可讓您控制金鑰的保護等級、位置、輪替時間表、使用權限和存取權,以及加密範圍。使用 Cloud KMS 還可讓您追蹤金鑰使用情形、查看稽核記錄,以及控管金鑰生命週期。您可以在 Cloud KMS 中控制及管理用來保護資料的對稱金鑰加密金鑰 (KEK),而非由 Google 擁有及管理這些金鑰。
使用 CMEK 設定資源後,使用者存取 Workflows 資源的體驗就會類似於使用 Google 的預設加密機制。如要進一步瞭解加密選項,請參閱「客戶管理的加密金鑰 (CMEK)」。
您可以使用只有您可以存取的加密金鑰,保護工作流程和相關的靜態資料,並透過 Cloud KMS 控制及管理這些金鑰。
受 CMEK 保護的內容
部署工作流程時,您可以指定 Cloud KMS 金鑰。這個金鑰用於加密工作流程及其執行作業:
工作流程需要包含有效工作流程定義的原始檔案。這個來源檔案會使用金鑰加密。
工作流程執行程序會執行目前的工作流程定義 (特定工作流程修訂版本)。使用與工作流程修訂版本相關聯的金鑰,即可在部署時加密已編譯的工作流程,以及任何儲存的執行輸入、輸出和執行階段資料。這包括執行引數、結果、錯誤和例外狀況;傳送的 Eventarc 事件;以及回呼和 HTTP 要求和回應。
事前準備
在工作流程中使用 CMEK 前,請先完成下列步驟:
啟用 API。
主控台
-
Enable the Cloud KMS and Workflows APIs.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- 更新
gcloud
元件。gcloud components update
- 針對要用來儲存加密金鑰的專案啟用 Cloud KMS 和 Workflows API。
gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
-
當金鑰啟用、停用,或由工作流程資源用於加密及解密資料時,Cloud KMS 會產生 Cloud 稽核記錄。請確認專案中的 Cloud KMS API 已啟用記錄功能 ,且您已決定要為您的用途套用哪些記錄專屬權限和角色。詳情請參閱 Cloud KMS 稽核記錄資訊。
建立 Cloud KMS 金鑰環和金鑰
您可以建立新的鑰匙圈,或使用現有鑰匙圈。您可以在金鑰環中新增金鑰或使用現有金鑰。
擷取 Cloud KMS 金鑰的資源 ID
為工作流程啟用 CMEK 時,必須提供 Cloud KMS 金鑰的資源 ID。請參閱本文件中的「為工作流程啟用 CMEK」一節。
控制台
前往 Google Cloud 控制台的「Key management」頁面。
按一下包含金鑰的金鑰環。
找到您要擷取資源 ID 的金鑰,按一下 more_vert「更多」。
按一下「複製資源名稱」。
金鑰的資源 ID 會複製到剪貼簿。格式如下所示:
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
金鑰包含零個或多個金鑰版本。金鑰版本的資源 ID 是金鑰 ID 加上斜線 (
/
) 加上版本 ID。如要列出金鑰的所有版本,請按照下列步驟操作:- 按一下金鑰名稱。
- 如要查看特定版本,請按一下 「更多」。
- 按一下「複製資源名稱」。
gcloud
列出指定金鑰環上的所有金鑰:
gcloud kms keys list --keyring RING_NAME --location LOCATION
更改下列內容:
RING_NAME
:金鑰環的名稱LOCATION
:金鑰環的區域
輸出結果包含每個金鑰的資源 ID。例如:
NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
金鑰有零個或多個金鑰版本。金鑰版本的資源 ID 是金鑰 ID 加上斜線 (
/
) 加上版本 ID。列出金鑰的所有版本:gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
輸出結果包含每個金鑰版本的資源 ID。例如:
NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
授予 Workflows 服務代理的金鑰存取權
您必須授予 Workflows 服務代理人 Cloud KMS CryptoKey 加密者/解密者 身分和存取權管理 (IAM) 角色,才能存取 Cloud KMS 金鑰:
主控台
透過控制台為工作流程啟用 CMEK 時,系統會提示您將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予服務帳戶。如需更多資訊,請參閱本文件中的「為工作流程啟用 CMEK」一節。
gcloud
gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring RING_NAME \ --location LOCATION \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
更改下列內容:
KEY_NAME
:鍵的名稱。例如:my-key
。RING_NAME
:金鑰環的名稱。例如:my-keyring
。LOCATION
:金鑰的位置。例如:us-central1
。PROJECT_NUMBER
:您的 Google Cloud 專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面上找到專案編號,也可以執行下列指令:export PROJECT=$(gcloud info --format='value(config.project)') gcloud projects describe ${PROJECT} --format="value(projectNumber)"
只要服務代理具有 roles/cloudkms.cryptoKeyEncrypterDecrypter
角色,專案中的工作流程就能使用 CMEK 金鑰加密及解密資料。如果您撤銷這個角色,或是停用或刪除 CMEK 金鑰,就無法存取該資料。請參閱本文件中的「停用 Cloud KMS」一節。
為工作流程啟用 CMEK
建立工作流程或之後更新時,您可以指定工作流程應用於資料加密的 Cloud KMS 金鑰。
主控台
前往 Google Cloud 控制台的「Workflows」頁面。
按一下要更新的工作流程名稱。
系統隨即會顯示「工作流程詳細資料」頁面。
按一下「編輯」圖示
。選取「Cloud KMS 金鑰」。
選取「Key type」。
您可以手動管理金鑰,也可以使用 Autokey,讓系統視情況產生金鑰環和金鑰。如果 Autokey 選項已停用,表示尚未與目前的資源類型整合。
在「Select a Cloud KMS key」清單中,選取或篩選 Cloud KMS 金鑰。
選用:如要手動輸入金鑰的資源名稱,請在「Select a customer-managed key」清單中按一下「Enter key manually」,然後按照指定格式輸入金鑰資源名稱。
如果系統提示,請將
cloudkms.cyptoKeyEncrypterDecrypter
角色授予具有workflows.serviceAgent
角色的 Workflows 服務帳戶。點按「Next」。
如要儲存變更並部署更新後的工作流程,請按一下「部署」。
gcloud
gcloud workflows deploy WORKFLOW_NAME \ --source=SOURCE_FILE \ --kms-key=KEY \ --location LOCATION \ --service-account=SERVICE_ACCOUNT
更改下列內容:
WORKFLOW_NAME
:工作流程名稱SOURCE_FILE
:工作流程來源檔案,如果是 YAML 檔案,則檔案副檔名為yaml
;如果是 JSON 檔案,則檔案副檔名為json
,例如myWorkflow.yaml
。KEY
:以projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
格式表示的鍵資源 ID。您可以擷取金鑰 ID。LOCATION
:工作流程的位置SERVICE_ACCOUNT
:工作流程會用來存取其他 Google Cloud 服務的服務帳戶,例如SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
。強烈建議您使用權限最少的服務帳戶,以便存取所需資源。如果留空,系統會使用預設服務帳戶。詳情請參閱「授予工作流程權限,以便存取 Google Cloud 資源」。
注意事項:
- 工作流程修訂版本和執行作業會使用部署時指定的金鑰加密;先前以舊版金鑰加密的資源,仍會使用該舊版金鑰加密。如果之後編輯工作流程並指定新金鑰,系統會使用新金鑰加密該工作流程的修訂版本,後續執行作業都會使用新金鑰。
- 先前未使用 CMEK 加密的工作流程修訂版本和執行作業仍未加密。
- 如果您為工作流程修訂版本停用 CMEK,後續執行作業就不會使用 CMEK 加密。請參閱本文件中的「為工作流程停用 CMEK」一節。現有工作流程修訂版本和執行作業仍會使用先前加密時的金鑰進行加密。
驗證 Cloud KMS 整合
您可以顯示工作流程的中繼資料,驗證 CMEK 整合。
主控台
前往 Google Cloud 控制台的「Workflows」頁面。
按一下要驗證的工作流程名稱。
系統隨即會顯示「工作流程詳細資料」頁面。
按一下 [Details] (詳細資料) 分頁標籤。
「Encryption」值會顯示 Cloud KMS 金鑰的資源 ID,用於保護工作流程及其執行作業。
gcloud
gcloud workflows describe WORKFLOW_NAME \ --location=LOCATION
畫面會顯示如下的輸出內容:
createTime: '2022-08-10T19:57:58.233177709Z' cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME revisionCreateTime: '2022-11-18T19:44:04.933633237Z' revisionId: 000009-8be serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com sourceContents: [...] state: ACTIVE updateTime: '2022-11-18T19:44:05.171793128Z'
cryptokeyName
值是 Cloud KMS 金鑰的資源 ID,用於保護工作流程及其執行作業。
為工作流程停用 CMEK
您可以為工作流程停用 CMEK,讓工作流程不再使用相關聯的 Cloud KMS 金鑰。
主控台
前往 Google Cloud 控制台的「Workflows」頁面。
按一下要更新的工作流程名稱。
系統隨即會顯示「工作流程詳細資料」頁面。
按一下「編輯」圖示
。如要清除「Cloud KMS key」圓形按鈕,請選取「Google-managed encryption key」。
點按「Next」。
如要儲存變更並部署更新後的工作流程,請按一下「部署」。
gcloud
gcloud workflows deploy WORKFLOW_NAME \ --source=SOURCE_FILE \ --clear-kms-key \ --service-account=SERVICE_ACCOUNT
這會為目前的工作流程修訂版本停用 CMEK,後續執行作業則會在未加密的情況下建立。現有的工作流程修訂版本和執行作業仍會使用先前加密時的金鑰加密。
停用 Cloud KMS
如要撤銷工作流程或工作流程執行作業的資料存取權,您可以採取下列任一做法來停用 Cloud KMS:
停用或刪除客戶管理加密金鑰的主鍵版本。停用 CMEK 金鑰版本後,系統就會暫停存取受該金鑰版本保護的所有資料。刪除金鑰版本是這項操作的永久對應項目。這兩種方法只會影響與特定鍵相關聯的工作流程和工作流程執行作業。您無法建立新的執行作業,也無法查看與停用或毀損金鑰相關聯的資源。任何有效的執行作業都會失敗,並顯示對應的錯誤訊息。
撤銷 Workflows 服務代理人的
cloudkms.cryptoKeyEncrypterDecrypter
IAM 角色。這會影響Google Cloud 專案中所有支援使用 CMEK 加密的作業流程。您無法建立新的整合 CMEK 的工作流程和執行作業,也無法查看任何使用 CMEK 加密的資源。任何有效的執行作業都會失敗,並顯示對應的錯誤訊息。
雖然這兩項作業都無法保證立即撤銷存取權,但 IAM 變更通常會更快傳播。詳情請參閱「Cloud KMS 資源一致性」和「存取權變更傳播」。
疑難排解
在工作流程中使用 Cloud KMS 時,您可能會遇到錯誤。下表說明各種問題及其解決方法。
問題 | 說明 |
---|---|
權限 cloudkms.cryptoKeyVersions.useToEncrypt 遭拒 |
提供的 Cloud KMS 金鑰不存在,或是權限未正確設定。 解決方法:
|
未啟用金鑰版本 | 已停用提供的 Cloud KMS 金鑰版本。 解決方案:重新啟用 Cloud KMS 金鑰版本。 |
金鑰環區域與要保護的資源不符 | 提供的 KMS 金鑰環區域與工作流程的區域不同。 解決方案:使用來自同一個區域的 Cloud KMS 金鑰環和受保護的工作流程。(請注意,這些項目可以位於不同的專案中)。詳情請參閱「Cloud KMS 位置」和「工作流程位置」。 |
已超出 Cloud KMS 配額限制 | 已達 Cloud KMS 要求配額上限。
解決方法:限制 Cloud KMS 呼叫次數或提高配額限制。詳情請參閱「Cloud KMS 配額」。 |
如何處理無法使用的金鑰狀態
如果 Cloud KMS 因某些原因無法使用,Workflows 可能無法從 Cloud KMS 擷取金鑰狀態。
如果無法取得鍵狀態,工作流程或其執行作業會在 stateError
欄位中傳回 state: UNAVAILABLE
值和相關詳細資料。
如果在工作流程執行期間無法取得金鑰狀態 (例如在回呼期間撤銷權限),就會發生執行階段錯誤,並在 error
欄位中傳回 state: FAILED
值和相關詳細資料。
定價
除了金鑰作業費用外,此整合功能不會產生額外的費用。金鑰作業費用會計入您的 Google Cloud 專案中。如要查看目前定價資訊,請參閱 Cloud KMS 定價。