客户管理的加密密钥 (CMEK)

默认情况下,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 BuilderCloud Key Management Service 有一些限制。

创建密钥

如需创建密钥,请使用 Cloud KMS。如需相关说明,请参阅 创建对称密钥。创建或选择密钥时,请确保配置以下内容:

  • 选择您用于 代理的位置,因为如果位置不匹配,请求会失败。

识别 Dialogflow 服务帐号

如需识别 Dialogflow 服务帐号,请执行以下操作:

  1. 打开 Conversational Agents 控制台
  2. 选择您的项目。
  3. 选择您的代理。
  4. 在导航菜单中,点击设置,然后前往安全 标签页。
  5. 点击 管理安全设置 以重定向到 CCAI 控制台
  6. 在 CCAI 控制台中,前往 CMEK 标签页。
  7. 点击检查或创建服务账号
  8. 记下显示的服务帐号名称(例如 service-665989447347@gcp-sa-ccai-cmek.IAM.gserviceaccount.com)。

向服务帐号授予权限

如需向服务帐号授予权限,请执行以下操作:

  1. 前往 Cloud KMS 页面
  2. 选择您创建的密钥环。
  3. 选择您在该密钥环中创建的密钥。
  4. 前往权限 标签页。
  5. 点击授予访问权限
  6. 新的主账号 字段中,输入您在上一步中识别的 Dialogflow 服务账号。
  7. 选择角色 列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter
  8. 点击保存

复制密钥资源名称

如需复制密钥资源名称,请执行以下操作:

  1. 前往 KMS 密钥详情页面。
  2. 点击操作 菜单,然后选择复制资源名称

此操作会复制 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,请执行以下操作:

  1. 返回到 CCAI 控制台中的 CMEK 标签页。
  2. 将复制的密钥资源名称粘贴到您要启用 CMEK 的位置的密钥 字段中。
  3. 点击保存

此操作会启动长时间运行的操作 (LRO),以便为所选位置启用 CMEK。此过程需要 2-3 分钟。

配置代理以使用密钥

创建代理时,请指定其位置 以及是否为该 位置使用 Google-managed encryption key 或 CMEK。

使用 CLI 设置 CMEK

或者,您也可以使用以下命令设置 CMEK。在为多个区域设置时,此方法非常有用。

  1. 使用 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.iam.gserviceaccount.com
  2. 向 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

使用 API 配置密钥并检查设置

  1. 如需为 Dialogflow CX 位置配置密钥,请调用 InitializeEncryptionSpec API 并提供以下变量:

    • PROJECT_ID:项目 ID。 Google Cloud
    • 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"
     }
  2. 如需获取长时间运行的操作 (LRO) 结果,请调用 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"
  3. 如需检索为某个位置配置的加密密钥,请调用 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 密钥版本移除服务帐号的 Cloud KMS CryptoKey Encrypter/Decrypter角色。

撤消密钥后,Dialogflow CX 将无法访问加密的数据,并且该服务将无法运行,直到密钥权限恢复为止。