根據預設,Cloud Tasks 會加密靜態的客戶內容。Cloud Tasks 會為您處理加密作業,您不必採取其他動作。這項做法稱為「Google 預設加密」。
如要控管加密金鑰,您可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),搭配 Cloud Tasks 等整合 CMEK 的服務。使用 Cloud KMS 金鑰可讓您控管保護等級、位置、輪換時間表、使用權限和存取權,以及加密範圍。使用 Cloud KMS 也能查看稽核記錄,以及控管金鑰生命週期。 您可以在 Cloud KMS 中控制及管理這些金鑰,而不是由 Google 擁有及管理用來保護您資料的對稱金鑰加密金鑰 (KEK)。
使用 CMEK 設定資源後,存取 Cloud Tasks 資源的體驗與使用 Google 預設加密機制類似。如要進一步瞭解加密選項,請參閱客戶管理的加密金鑰 (CMEK)。
受 CMEK 保護的項目
在 Cloud Tasks 中啟用 CMEK 時,會為區域啟用這項功能。啟用後,系統會在靜態時使用您的金鑰,保護在該區域建立的工作內容和標題。如果是在啟用 CMEK 時建立工作,且金鑰隨後停用 (停用或刪除金鑰,或停用 CMEK),工作會以您的金鑰加密,但無法執行。
在下列情況中,工作不會受到 CMEK 保護:
- 工作是在啟用 CMEK 之前建立
- 工作不在啟用 CMEK 的區域中
- 工作受到相容性限制影響
相容性限制
Cloud Tasks 與 CMEK 整合時,不支援下列功能:
google-gax
版本低於4.0.0
:Node.js 的 NPMgoogle-gax
套件在4.0.0
之前的版本中,支援功能有限。在這些版本中,CMEK 僅支援us-central1
區域。即使您只有該區域的工作,仍建議升級至4.0.0
以上版本。App Engine 內建工作佇列服務:使用 App Engine 內建工作佇列服務建立的工作不會受到 CMEK 保護,即使這些工作位於已啟用 CMEK 的區域也是如此。啟用 CMEK 後,系統不會禁止建立或執行這些工作 (例如執行或刪除)。
提取佇列:啟用 CMEK 後,您可以在提取佇列中建立及執行工作,但這些工作不會受到 CMEK 保護。提取佇列並不常見。 如要檢查佇列是否為提取佇列,請在終端機中執行下列 gcloud CLI 指令:
gcloud tasks queues describe QUEUE_NAME
將
QUEUE_NAME
替換成佇列名稱。如果列出的
type
是pull
,表示佇列是提取佇列。如果列出的項目是type
push
,這項限制不會影響佇列中的工作。佇列層級的路由:啟用 CMEK 後,您就無法套用佇列層級的路由。如果啟用佇列層級的路由,就無法啟用 CMEK。如要確認是否已啟用佇列層級的路由功能,請按照下列步驟操作:
在終端機中執行下列 gcloud CLI 指令:
請將gcloud tasks queues describe QUEUE_NAME
QUEUE_NAME
替換為佇列名稱。在輸出內容中,找出
httpTarget
欄位,並檢查是否已設定uriOverride
。如果指定host
,佇列會啟用佇列層級的路由,且不支援 CMEK。如要移除佇列層級的轉送設定,請參閱「更新或移除佇列層級的轉送設定」。如果輸出內容未顯示uriOverride
和指定的host
,表示佇列未使用佇列層級的路由。
工作 TTL:啟用 CMEK 時,您無法將
task_ttl
設為大於 60 天。如果task_ttl
設定超過 60 天,就無法啟用 CMEK。
事前準備
在 Cloud Tasks 中使用 CMEK 前,請先完成下列步驟:
啟用 API。
主控台
-
Enable the Cloud KMS and Cloud Tasks 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.
設定預設專案。這個專案應包含您要以 CMEK 保護的 Cloud Tasks 資源。如果您需要在其他專案中執行指令 (例如包含 Cloud KMS 資源的專案),本頁面會在 gcloud CLI 指令中加入
--project
標記,並說明要指定哪個專案。gcloud config set project PROJECT_ID
將
PROJECT_ID
替換為包含 Cloud Tasks 資源的專案 ID。更新
gcloud
元件。gcloud components update
針對要用來儲存加密金鑰的專案啟用 Cloud KMS 和 Cloud Tasks API。
gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com \ --project=PROJECT_ID
將
PROJECT_ID
替換為專案 ID,該專案會儲存加密金鑰。這可以與 Cloud Tasks 資源位於同一專案,但為了限制 Cloud KMS 金鑰的存取權,建議在獨立專案中設定 Cloud KMS。
當金鑰啟用、停用,或由 Cloud Tasks 資源用於加密及解密資料時,Cloud KMS 會產生 Cloud 稽核記錄。請確認專案已啟用記錄 Cloud KMS API,並決定哪些記錄專用權限和角色適用於您的用途。詳情請參閱「Cloud KMS 稽核記錄資訊」一文。
取得 Identity and Access Management 角色。 <x0A>
如要取得使用 Cloud Tasks 的 CMEK 所需的權限,請要求管理員為您授予專案的下列 IAM 角色:
-
啟用或停用 CMEK:
roles/cloudtasks.admin
-
查看目前使用的金鑰:
roles/cloudtasks.viewer
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
建立 Cloud KMS 金鑰環和金鑰
如果您在與 Cloud Tasks 資源相同的地區中已有金鑰環,且想使用該金鑰和金鑰環,請略過本節。如果沒有,請按照這些操作說明建立 Cloud KMS 金鑰和金鑰環。
-
金鑰環必須位於您要保護的 Cloud Tasks 資源所在區域。詳情請參閱 Cloud KMS 位置和 Cloud Tasks 位置。
金鑰環和受 CMEK 保護的 Cloud Tasks 資源可以位於同一專案,但為了限制 Cloud KMS 金鑰的存取權,建議在獨立專案中設定 Cloud KMS。
擷取 Cloud KMS 金鑰的 ID
為 Cloud Tasks 啟用 CMEK 時,需要 Cloud KMS 金鑰的資源 ID。
控制台
前往 Google Cloud 控制台的「金鑰管理」頁面,然後選取「金鑰清單」分頁標籤。
找到您要擷取資源 ID 的金鑰,然後按一下「動作」more_vert。
按一下「複製資源名稱」。
金鑰的資源 ID 會複製到剪貼簿。格式如下所示:
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
gcloud
列出特定金鑰環上的所有金鑰:
gcloud kms keys list --keyring=KEY_RING --location=LOCATION --project=PROJECT_ID
更改下列內容:
KEY_RING
:金鑰環的名稱LOCATION
:金鑰環的區域PROJECT_ID
:含有金鑰環的專案 ID
輸出結果會包含每個金鑰的金鑰 ID。例如:
NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
授予 Cloud Tasks 服務代理程式金鑰存取權
您必須授予 Cloud Tasks 服務代理人 Cloud KMS CryptoKey Encrypter/Decrypter Identity and Access Management (IAM) 角色,才能存取 Cloud KMS 金鑰:
主控台
前往 Google Cloud 控制台的「IAM」(身分與存取權管理) IAM頁面。
選取「包含 Google 提供的角色授權」核取方塊。
在篩選器中輸入
cloudtasks.iam.gserviceaccount.com
,找出 Cloud Tasks 服務帳戶。Cloud Tasks 服務帳戶的格式為
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
。按一下「編輯負責人」鉛筆圖示。
在隨即開啟的面板中,按一下「新增其他角色」。
搜尋並選取「Cloud KMS CryptoKey Encrypter/Decrypter」(Cloud KMS 加密編譯金鑰加密者/解密者) 角色。
按一下 [儲存]。
gcloud
gcloud kms keys add-iam-policy-binding KEY_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
更改下列內容:
KEY_ID
:金鑰的完整資源 ID。如需相關操作說明,請參閱「擷取 Cloud KMS 金鑰的 ID」。請勿加入金鑰版本號碼。如果包含金鑰版本號碼,這項指令可能會失敗。PROJECT_NUMBER
:您的 Google Cloud 專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面找到專案編號,也可以執行下列指令:PROJECT=$(gcloud info --format='value(config.project)') gcloud projects describe ${PROJECT} --format="value(projectNumber)"
只要服務代理程式具備
roles/cloudkms.cryptoKeyEncrypterDecrypter
角色,CMEK 啟用區域中的工作就能使用 CMEK 金鑰加密及解密資料。如果撤銷這個角色,或是停用或刪除 CMEK 金鑰,就無法存取該資料。請參閱本文的「停用 Cloud Tasks 的 CMEK」一節。為 Cloud Tasks 啟用 CMEK
您可以使用 API 或 gcloud CLI 啟用 CMEK。對於 Cloud Tasks,CMEK 是依區域啟用。這項功能不會由個別工作啟用。在 Cloud Tasks 中為特定區域啟用 CMEK 後,該區域中的所有工作都會受到 CMEK 保護。
gcloud
如要使用 Google Cloud CLI 啟用 CMEK,請執行下列指令:
gcloud tasks cmek-config update --location=LOCATION --kms-key-name=KEY_ID
更改下列內容:
LOCATION
:Cloud Tasks 資源的區域KEY_ID
:金鑰的完整資源 ID。如需相關操作說明,請參閱「擷取 Cloud KMS 金鑰的 ID」。請勿加入金鑰版本號碼。如果包含金鑰版本號碼,這個指令可能會失敗。
REST
您可以呼叫
Update CMEK config
方法來啟用 CMEK。Cloud Tasks API 在 REST 和 RPC API 中都提供Update CMEK config
方法:- REST:使用
updateCmekConfig
方法。 - RPC:使用
UpdateCmekConfigRequest
方法。
如要確認金鑰是否已成功啟用,請按照「找出使用的金鑰」一節的指示操作。
為現有工作啟用
如果是在為 Cloud Tasks 啟用 CMEK 前建立工作,CMEK 不會保護這些工作。如要使用 CMEK 保護現有工作,請按照下列步驟操作:
- 啟用 CMEK (請參閱啟用 CMEK 一節)。
取代先前的工作。主要有兩種做法。最佳做法取決於您重視的事項:
持續執行:如要確保持續執行 (「至少一次」傳送),您可以先重新建立工作,然後確認新工作運作正常後,再刪除先前的工作。這可能會導致重複執行,因為新舊工作都可能在您刪除舊工作前執行。
避免重複:如要避免重複執行 (「最多」一次傳送),請先刪除舊工作,然後重新建立。由於刪除舊工作和建立新工作之間會經過一段時間,因此可能會導致執行作業遺失。
找出使用的金鑰
如要找出 Cloud Tasks 資源使用的 CMEK 金鑰,請執行下列 gcloud CLI 指令:
gcloud tasks cmek-config describe --location=LOCATION
將
LOCATION
替換為 Cloud Tasks 資源的區域。如果沒有輸出內容,表示指定位置未設定 CMEK。
套用 CMEK 機構政策
Cloud Tasks 整合了兩項機構政策限制,可協助確保整個機構使用 CMEK:
constraints/gcp.restrictNonCmekServices
用於要求 CMEK 保護措施。constraints/gcp.restrictCmekCryptoKeyProjects
用於限制用於 CMEK 保護措施的 Cloud KMS 金鑰。
透過這項整合功能,您可以為機構中的 Cloud Tasks 資源指定下列加密法規遵循規定:
套用機構政策的注意事項
套用任何 CMEK 組織政策前,請先瞭解下列事項。
準備好因應傳播延遲
設定或更新機構政策後,新政策最多可能需要 15 分鐘才會生效。
考量現有資源
現有資源不受新建立的機構政策影響。 舉例來說,機構政策不會追溯套用至現有工作。這些資源仍可在沒有 CMEK 的情況下存取,且如果適用,仍會使用現有金鑰加密。如要將政策套用至現有工作,請為現有工作啟用 CMEK。
確認設定機構政策的必要權限
您可能難以取得設定或更新機構政策的權限,以進行測試。您必須獲授予機構政策管理員角色,這個角色只能在機構層級授予 (而非專案或資料夾層級)。
雖然必須在機構層級授予角色,但仍可指定僅適用於特定專案或資料夾的政策。
要求所有新的 Cloud Tasks 資源都使用 CMEK
您可以使用
constraints/gcp.restrictNonCmekServices
限制,要求使用 CMEK 保護機構中的所有新 Cloud Tasks 資源。如果設定這項機構政策,所有未指定 Cloud KMS 金鑰的資源建立要求都會失敗。
設定這項政策後,只會套用至專案中的新資源。如果現有資源未套用 Cloud KMS 金鑰,這些資源仍會存在,且可正常存取。
主控台
前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
使用「篩選器」搜尋下列限制:
constraints/gcp.restrictNonCmekServices
在「名稱」欄中,按一下「限制哪些服務可以在沒有 CMEK 的情況下建立資源」。
按一下「管理政策」圖示
。在「編輯政策」頁面的「政策來源」下方,選取「覆寫父項政策」。
在「規則」下方,按一下「新增規則」。
在「政策值」清單中,選取「自訂」。
在「政策類型」清單中,選取「拒絕」。
在「自訂值」欄位中輸入下列內容:
is:cloudtasks.googleapis.com
依序按一下「完成」和「設定政策」。
gcloud
建立暫存檔案
/tmp/policy.yaml
來儲存政策:name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:cloudtasks.googleapis.com
將
PROJECT_ID
替換為要套用這項限制的專案 ID。請執行
org-policies set-policy
指令。gcloud org-policies set-policy /tmp/policy.yaml
如要確認政策是否已成功套用,請嘗試在專案中建立佇列。除非您指定 Cloud KMS 金鑰,否則程序會失敗。
限制 Cloud Tasks 專案的 Cloud KMS 金鑰
您可以使用
constraints/gcp.restrictCmekCryptoKeyProjects
限制,限制可用於保護 Cloud Tasks 專案中資源的 Cloud KMS 金鑰。舉例來說,您可以指定類似下列的規則:「對於
projects/my-company-data-project
中的所有 Cloud Tasks 資源,這個專案中使用的 Cloud KMS 金鑰必須來自projects/my-company-central-keys
或projects/team-specific-keys
。」主控台
前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
使用「篩選器」搜尋下列限制:
constraints/gcp.restrictCmekCryptoKeyProjects
在「名稱」欄中,按一下「限制哪些專案可提供 CMEK 的 KMS CryptoKey」。
按一下「管理政策」圖示
。在「編輯政策」頁面的「政策來源」下方,選取「覆寫父項政策」。
在「規則」下方,按一下「新增規則」。
在「政策值」清單中,選取「自訂」。
在「政策類型」清單中,選取「允許」。
在「自訂值」欄位中輸入下列內容:
under:projects/KMS_PROJECT_ID
將
KMS_PROJECT_ID
替換為您要使用的 Cloud KMS 金鑰所在專案的 ID。例如
under:projects/my-kms-project
。依序按一下「完成」和「設定政策」。
gcloud
建立暫存檔案
/tmp/policy.yaml
來儲存政策:name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects spec: rules: - values: allowedValues: - under:projects/KMS_PROJECT_ID
取代下列項目
PROJECT_ID
:您要套用這項限制的專案 ID。KMS_PROJECT_ID
:您要使用的 Cloud KMS 金鑰所在專案的 ID。
請執行
org-policies set-policy
指令。gcloud org-policies set-policy /tmp/policy.yaml
如要確認政策是否已順利套用,您可以嘗試使用其他專案的 Cloud KMS 金鑰建立佇列。程序會失敗。
停用 Cloud Tasks 的 CMEK
您可以使用 API 或 gcloud CLI 停用 CMEK。在 Cloud Tasks 中,CMEK 會依區域停用。個別工作不會停用這項功能。在 Cloud Tasks 中停用特定區域的 CMEK 時,該區域中的工作不會受到 CMEK 保護。
停用 CMEK 會影響日後建立的工作,不會影響過去建立的工作:
- 新工作:不受 CMEK 保護
先前建立的工作:在啟用 CMEK 時建立的工作會保持加密狀態,只要 Cloud KMS 金鑰仍處於啟用狀態,工作就會繼續執行。
gcloud
如要使用 Google Cloud CLI 停用 CMEK,請執行下列指令:
gcloud tasks cmek-config update --location=LOCATION --clear-kms-key
更改下列內容:
LOCATION
:Cloud Tasks 資源的區域。
REST
如要停用 CMEK,請呼叫
Update CMEK config
方法,然後將 Cloud KMS 金鑰替換為空字串,藉此清除金鑰。Cloud Tasks API 在 REST 和 RPC API 中都提供Update CMEK config
方法:- REST:使用
updateCmekConfig
方法。 - RPC:使用
UpdateCmekConfigRequest
方法。
移除 Cloud KMS
如要撤銷工作資料的存取權,可以移除 Cloud KMS。方法有三種:
停用客戶管理的加密金鑰。停用 CMEK 金鑰後,只要金鑰處於停用狀態,您就無法存取該金鑰版本保護的所有資料。您無法使用已停用的金鑰存取或建立工作。如果金鑰已停用,嘗試執行受 CMEK 保護的工作會導致 Cloud Logging 發生
UNKNOWN
錯誤。如要重新啟用金鑰,可以稍後再啟用。停用客戶管理的加密金鑰後,最多需要 5 分鐘,變更才會生效。刪除客戶管理的加密金鑰。銷毀 CMEK 金鑰後,您將無法存取該金鑰版本保護的所有資料。如果金鑰已遭刪除,您就無法存取或建立工作。如果是在啟用 CMEK 時建立工作,但金鑰隨後遭到刪除,工作會以您的金鑰加密,但無法執行。如果工作嘗試執行,Cloud Logging 會記錄
UNKNOWN
錯誤。銷毀客戶自行管理的加密金鑰時,變更最多可能需要 5 分鐘才會生效。撤銷 Cloud Tasks 服務代理的
cloudkms.cryptoKeyEncrypterDecrypter
IAM 角色。這會影響Google Cloud 專案中支援使用 CMEK 加密的所有工作。您無法建立新的 CMEK 整合式工作,也無法查看任何 CMEK 加密資源。
雖然這些作業都無法保證立即撤銷存取權,但 IAM 變更通常會更快生效。詳情請參閱「Cloud KMS 資源一致性」和「存取權變更傳播」。
定價
除了金鑰作業費用外,此整合功能不會產生額外的費用。金鑰作業費用會計入您的 Google Cloud 專案中。如要查看目前定價資訊,請參閱 Cloud KMS 定價。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-08-11 (世界標準時間)。
-