默认情况下,Dialogflow 会对静态客户内容进行加密。Dialogflow 会为您处理加密,您无需执行任何其他操作。此选项称为 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。
- Vertex AI Agent Builder 存在一些 Cloud KMS 限制
创建密钥
如需创建密钥,请使用 KMS 服务。如需相关说明,请参阅创建对称密钥。创建或选择密钥时,您必须配置以下内容:
- 确保选择要用于代理的位置,否则请求将失败。
配置代理以使用密钥
创建代理时,您可以指定代理位置,以及代理是使用 Google 管理的密钥还是为该位置配置好的客户管理的密钥。请在此时进行选择。
前提条件
使用 Google Cloud CLI 为您的项目创建 CCAI CMEK 服务账号。如需了解详情,请参阅 gcloud services identity 文档。
gcloud beta services identity create --service=dialogflow.googleapis.com --project=PROJECT_ID
系统将创建服务账号。系统不会在创建响应中返回此 ID,但其格式如下:
service-PROJECT_NUMBER@gcp-sa-ccai-cmek.iam.gserviceaccount.com
向 CCAI CMEK 服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色,以确保该服务有权使用您的密钥进行加密和解密。
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) 位置配置键
使用
InitializeEncryptionSpec
API 配置密钥。您需要提供以下变量:
PROJECT_ID
:您的 Google Cloud 项目 ID。LOCATION_ID
:您在对话式 AI 客服 (Dialogflow CX) 中选择启用 CMEK 的位置。KMS_KEY_RING
:用于创建 KMS 密钥的密钥环。(密钥环中的位置(例如projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KMS_KEY_RING
)必须与您要启用 CMEK 的位置一致。)KMS_KEY_ID
:KMS 密钥的名称,用于对所选位置中的对话式 AI 客服 (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" }
使用
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 Encrypter/Decrypter 角色。
撤消密钥后,对话式代理 (Dialogflow CX) 将无法访问加密数据,并且在恢复密钥权限之前,该服务将不再处于正常运行状态。