默认情况下,Dialogflow CX 会静态加密客户内容。Dialogflow CX 会为您处理加密,您无需执行任何其他操作。此选项称为“Google 默认加密”。Google 默认加密功能使用的是 Google 为自己的加密数据所使用的同一强化密钥管理系统。这些系统包含严格的密钥访问权限控制和审核机制。
如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Dialogflow CX)搭配使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。
使用 CMEK 设置资源后,访问 Dialogflow CX 资源的体验与使用 Google 默认加密功能类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)。
受保护数据
您可以使用 CMEK 保护所有 Dialogflow CX 代理静态数据。
限制
- 支持密钥轮替,但不支持数据重新加密。不支持使用新的密钥版本重新加密之前已加密的数据。
- 不支持以下区域:
global
- 每个项目位置应使用一个密钥。
- 如需恢复已启用 CMEK 的代理,您必须选择 Cloud Storage 选项。
- 非 CMEK 集成项目中的现有资源无法追溯性地集成 CMEK。请改为在新项目中导出和恢复资源以使用 CMEK。
- Vertex AI Agent Builder 存在一些 Cloud Key Management Service 限制。
创建密钥
如需创建密钥,请使用 Cloud KMS。如需了解相关说明,请参阅创建对称密钥。创建或选择密钥时,请确保您配置了以下内容:
- 选择要用于代理的位置,因为如果位置不匹配,请求会失败。
确定 Dialogflow 服务账号
如需识别 Dialogflow 服务账号,请执行以下操作:
- 打开 Conversational Agents 控制台。
- 选择您的项目。
- 选择您的代理。
- 在导航菜单中,点击设置,然后前往安全标签页。
- 点击管理安全设置,系统会将您重定向到 CCAI 控制台。
- 在 CCAI 控制台中,前往 CMEK 标签页。
- 点击检查或创建服务账号。
- 记下显示的服务账号名称(例如
service-665989447347@gcp-sa-ccai-cmek.IAM.gserviceaccount.com)。
向服务账号授予权限
如需向服务账号授予权限,请执行以下操作:
- 前往 Cloud KMS 页面。
- 选择您创建的密钥环。
- 选择您在该密钥环中创建的密钥。
- 前往权限标签页。
- 点击授予访问权限。
- 在新的主账号字段中,输入您在上一步中确定的 Dialogflow 服务账号。
- 在选择角色列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter。
- 点击保存。
复制密钥资源名称
如需复制密钥资源名称,请执行以下操作:
- 前往 KMS 密钥详情页面。
- 点击操作菜单,然后选择复制资源名称。
此操作会复制 KMS 密钥的完整路径(例如 projects/<var>PROJECT_ID</var>/locations/<var>LOCATION_ID</var>/keyRings/<var>KEY_RING</var>/cryptoKeys/<var>KEY_ID</var>)。
在 Dialogflow 中启用 CMEK
如需在 Dialogflow 中启用 CMEK,请执行以下操作:
- 返回到 CCAI 控制台中的 CMEK 标签页。
- 将复制的密钥资源名称粘贴到要启用 CMEK 的位置的密钥字段中。
- 点击保存。
这会启动一项长时间运行的操作 (LRO),以针对所选位置启用 CMEK。此过程需要 2-3 分钟。
配置代理以使用密钥
创建代理时,请指定其位置,以及该位置是使用 Google-managed encryption key 还是 CMEK。
使用 CLI 设置 CMEK
或者,您也可以使用以下命令设置 CMEK。在为多个区域设置时,这非常有用。
使用 Google Cloud CLI 为您的项目创建 CCAI CMEK 服务账号。 如需了解详情,请参阅 gcloud services identity 文档。
gcloud beta services identity create --service=dialogflow.googleapis.com --project=PROJECT_ID
服务账号已创建。它不会在创建响应中返回,但格式如下:
service-PROJECT_NUMBER@gcp-sa-ccai-cmek.向 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. \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
使用 API 配置密钥和检查设置
如需为 Dialogflow CX 位置配置密钥,请调用
InitializeEncryptionSpecAPI 并提供以下变量:PROJECT_ID: Google Cloud 项目 ID。LOCATION_ID:您选择在 Dialogflow CX 中启用 CMEK 的位置。KMS_KEY_RING:创建 KMS 密钥的密钥环。密钥环中的位置(例如projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KMS_KEY_RING)必须与您启用 CMEK 的位置一致。KMS_KEY_ID:用于加密和解密所选位置中的 Dialogflow CX 数据的 KMS 密钥的名称。
例如:
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" }
如需获取长时间运行的操作 (LRO) 结果,请调用
GetOperationAPI。例如:
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"
如需检索为某个位置配置的加密密钥,请调用
GetEncryptionSpecAPI。例如:
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 将无法访问加密数据,并且在密钥权限恢复之前,该服务将无法运行。