由客戶管理的加密金鑰 (CMEK)

根據預設,Dialogflow 會加密靜態儲存的客戶內容。Dialogflow 會為您處理加密作業,您不必採取其他動作。這個選項稱為「Google 預設加密」。Google 的預設加密功能會使用強化金鑰管理系統,這個系統與 Google 在自己的加密資料上使用的相同。這些系統包括嚴格的金鑰存取權控管與稽核措施。

如果您想控制加密金鑰,可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),並搭配使用整合 CMEK 的服務,例如 Dialogflow。使用 Cloud KMS 金鑰可讓您控制金鑰的保護等級、位置、輪替時間表、使用權限和存取權,以及加密範圍。使用 Cloud KMS 還可讓您查看稽核記錄,並控管金鑰生命週期。您可以在 Cloud KMS 中控制及管理用來保護資料的對稱金鑰加密金鑰 (KEK),而非由 Google 擁有及管理這些金鑰。

使用 CMEK 設定資源後,存取 Dialogflow 資源的體驗就會類似於使用 Google 預設加密機制。如要進一步瞭解加密選項,請參閱「客戶管理的加密金鑰 (CMEK)」。

受保護的資料

所有 Conversational Agents (Dialogflow CX) 代理程式的靜態資料都可以使用 CMEK 進行保護。

限制

  • 系統支援金鑰輪替,但不支援資料重新加密。也就是說,系統不支援使用新金鑰版本重新加密先前加密的資料。
  • 不支援下列地區
    • global
    • eu
  • 每個專案位置應使用一個金鑰。
  • 如要還原已啟用 CMEK 的代理程式,您必須選擇 Cloud Storage 選項。
  • 非 CMEK 整合專案中的現有資源無法回溯整合 CMEK。建議您改為在 CMEK 的新專案中匯出及還原資源。
  • AI 應用程式有部分 Cloud KMS 限制

建立金鑰

如要建立金鑰,請使用 KMS 服務。如需操作說明,請參閱「建立對稱金鑰」。建立或選擇金鑰時,您必須設定下列項目:

  • 請務必選取用於服務專員的位置,否則要求會失敗。

設定服務專員以使用您的金鑰

建立代理程式時,您可以指定代理程式的位置,以及代理程式是否會針對該位置使用 Google 管理或已設定的客戶管理金鑰。請在此時選取所需項目。

事前準備

  1. 使用 Google Cloud CLI 為專案建立 CCAI CMEK 服務帳戶。詳情請參閱 gcloud 服務身分說明文件

    gcloud beta services identity create --service=dialogflow.googleapis.com --project=PROJECT_ID

    系統會建立服務帳戶。這項資訊不會在建立回應中傳回,但會採用以下格式:

    service-PROJECT_NUMBER@gcp-sa-ccai-cmek.iam.gserviceaccount.com
  2. Cloud KMS CryptoKey 加密者/解密者 角色授予 CCAI CMEK 服務帳戶,確保服務具備使用金鑰加密及解密的權限。

    gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
    --project=PROJECT_ID \
    --location=LOCATION_ID \
    --keyring=KMS_KEY_RING \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-ccai-cmek.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

為 Conversational Agents (Dialogflow CX) 位置設定索引鍵

  1. 使用 InitializeEncryptionSpec API 設定金鑰。

    您需要提供下列變數:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • LOCATION_ID:您在 Conversational Agents (Dialogflow CX) 中選擇啟用 CMEK 的位置。
    • KMS_KEY_RING:建立 KMS 金鑰的金鑰環。(金鑰環中的位置 (例如 projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KMS_KEY_RING) 必須與啟用 CMEK 的位置相符)。
    • KMS_KEY_ID:KMS 金鑰名稱,用於在所選位置加密及解密 Conversational Agents (Dialogflow CX) 資料。

    例如:

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        -d "{ encryption_spec: { kms_key: 'projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY_ID' } }" \
        "https://LOCATION_ID-dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/encryptionSpec:initialize"

    您應該會收到如下的 JSON 回應:

    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID"
    }
  2. 使用 GetOperation API 檢查長時間執行的作業結果。

    例如:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://LOCATION_ID-dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID"

檢查 CMEK 設定

使用 GetEncryptionSpec API 檢查為位置設定的加密金鑰。

例如:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://LOCATION_ID-dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/encryptionSpec"
  

撤銷金鑰

如要撤銷對話式服務機器人 (Dialogflow CX) 的金鑰存取權,您可以停用 KMS 金鑰版本,或從 KMS 金鑰移除服務帳戶的 Cloud KMS CryptoKey 加密者/解密者 角色。

金鑰遭到撤銷後,Conversational Agents (Dialogflow CX) 就無法存取加密資料,且在金鑰權限恢復前,服務將無法再處於運作狀態。