Unity Catalog 的客户托管密钥

借助 Unity Catalog 的客户托管密钥(CMK),可以使用自己的加密密钥保护 Azure Databricks 管理的数据。 可以在目录级别配置加密,根据数据敏感度或符合性要求为每个目录使用单独的密钥。

有关用于托管服务和工作空间存储的客户管理密钥 (CMK) 的信息,请参阅 用于加密的客户管理密钥

Tc

什么是用于 Unity Catalog 的 CMK?

CMK for Unity Catalog 允许使用来自 Azure 密钥保管库的加密密钥保护由默认存储支持的 Unity Catalog 中的目录数据。

默认情况下,Azure Databricks 使用托管密钥加密静态所有数据。 为了进行精细控制,CMK 允许为特定目录配置单独的客户管理的密钥。 若要拒绝数据访问,请撤销 Azure 密钥保管库 中的密钥。

适用于 Unity 目录的 CMK 的优点

  • 精细加密控制: 在目录级别管理加密,允许不同的目录根据数据敏感度或符合性要求使用不同的加密密钥。
  • 多密钥保护: CMK 可保护数据免受存储层的访问。 只能基于细粒度的 Unity Catalog 策略在授权工作区上访问数据。
  • 合规性和审核: 满足客户控制的加密密钥的法规要求,并维护密钥访问和使用审核线索。
  • 密钥吊销: 撤销对 Azure 密钥保管库 中 CMK 的访问权限,以保留对数据的完全所有权。
  • 集中式密钥管理: 通过 Azure 密钥保管库 管理所有加密密钥,与现有的安全做法一致。

适用于 Unity 目录的 CMK 的工作原理

Azure 上的 Unity 目录 CMK 使用 Azure 密钥保管库 密钥和目录级加密设置来强制实施客户控制的加密。 以下组件是 Azure 上 Unity Catalog 的 CMK 的核心部分:

  • Azure 密钥保管库 密钥: 在 Azure 密钥保管库 中创建和管理加密密钥。 这些密钥是 Azure Databricks 用于保护 Unity 目录中的数据的多密钥加密层次结构的一部分。
  • 直接密钥引用: 您可以使用密钥 URI 和租户 ID 在目录中直接引用 密钥保管库 的密钥。 不需要帐户级 CMK 配置对象。
  • Azure 租户 ID: 必须提供 Azure 租户 ID,以允许 Azure Databricks 访问 密钥保管库 密钥。
  • 目录级加密: 使用目录资源管理器或 Unity 目录 API 直接在单个目录中配置加密。 使用 CMK 设置创建或更新目录时,Azure Databricks 使用客户管理的密钥加密写入该目录的所有数据。 这仅适用于由默认存储支持的目录。
  • 动态强制: 将数据写入 CMK 保护的目录时,Azure Databricks 使用 密钥保管库 密钥来加密数据。 读取数据时,Azure Databricks 从 Azure 密钥保管库 请求解密。 如果撤销对密钥的 Azure Databricks 访问权限,解密会失败,数据将无法访问。

局限性

  • 只能使用 REST API 配置此功能。 Terraform 支持不可用。
  • 此功能仅适用于由默认存储支持的目录。 它不适用于具有外部存储位置的目录。

先决条件

在 Azure 上为 Unity 目录配置 CMK 之前,请验证是否具有以下各项:

  • Azure 密钥保管库 密钥: 必须在 Azure 密钥保管库 中拥有现有密钥。 请遵循 Azure 密钥保管库 快速入门指南 ,根据需要创建密钥。 复制密钥 URI,其格式为: https://<vault-name>.vault.azure.cn/keys/<key-name>/<key-version>
  • Azure 租户 ID: 需要 Azure 租户 ID,可在 Azure 门户中找到该 ID。
  • Unity 目录权限: 若要使用 CMK 创建或更新目录,必须在 Unity 目录中拥有 CREATE CATALOGUSE CATALOG 特权。

为 Unity Catalog 配置 CMK

按照以下步骤为 Azure 上的 Unity 目录配置客户管理的密钥。

步骤 1:使用 CMK 创建新目录

所需的权限:CREATE CATALOG Unity Catalog 中

若要使用 CMK 保护创建新目录,请使用 Unity 目录 API:

curl -X POST \
  -H "Authorization: Bearer <api_token>" \
  -H "Content-Type: application/json" \
  https://<workspace_url>/api/2.1/unity-catalog/catalogs \
  -d '{
    "name": "<catalog_name>",
    "comment": "Catalog with customer-managed encryption",
    "storage_mode": "DEFAULT_STORAGE",
    "encryption_settings": {
      "azure_key_vault_key_id": "https://<vault-name>.vault.azure.cn/keys/<key-name>/<key-version>",
      "azure_encryption_settings": {
        "azure_tenant_id": "<tenant-id>"
      }
    }
  }'

请替换以下值:

  • <workspace_url>:您的 Azure Databricks 工作区网址
  • <api_token>:Azure Databricks 个人访问令牌
  • <catalog_name>:新目录的名称(例如, finance_datacustomer_pii
  • <vault-name>:您的 Azure 密钥保管库 名称
  • <key-name>:Azure 密钥保管库 中的密钥名称
  • <key-version>:密钥的特定版本
  • <tenant-id>:Azure 租户 ID

步骤 2:使用 CMK 更新现有目录

所需的权限:MANAGE 访问目录或管理目录所有权

若要在使用默认存储的现有目录中添加或更改 CMK 保护,请执行以下操作:

  1. 在目录资源管理器中,单击目录名称。
  2. 单击“ 详细信息 ”选项卡。
  3. 在“ 高级”下,单击“ 加密设置”。
  4. 在对话框中,选择客户管理的密钥。
  5. 单击“ 保存”。

可以通过重复这些步骤随时更改与目录关联的密钥。 在目录上启用 CMK 后,无法禁用该 CMK。

Important

将 CMK 添加到现有目录时,Azure Databricks 仅使用客户管理的密钥加密写入目录的新数据。 Azure Databricks 管理的密钥继续加密现有数据。 若要使用客户管理的密钥加密所有数据,必须重写现有数据。

验证 CMK 配置

若要验证目录是否配置了 CMK,请使用 Unity 目录 API 获取目录详细信息:

curl -X GET \
  -H "Authorization: Bearer <api_token>" \
  -H "Content-Type: application/json" \
  "https://<workspace_url>/api/2.1/unity-catalog/catalogs/<catalog_name>"

响应包括 encryption_settings 使用 CMK 配置的目录的字段:

{
  "name": "<catalog_name>",
  "storage_mode": "DEFAULT_STORAGE",
  "encryption_settings": {
    "customer_managed_key_id": "<cmk-id>"
  }
}

撤销对加密数据的访问权限

若要拒绝 Azure Databricks 访问使用客户管理的密钥加密的数据,请在 Azure 密钥保管库 中禁用密钥:

  1. 在 Azure 门户中,转到密钥保管库。
  2. 找到密钥并禁用它。

禁用密钥后,Azure Databricks 将无法再使用此密钥解密目录中的数据。 从这些目录读取数据的任何尝试都失败,并出现解密错误。

禁用密钥的时间和拒绝数据访问的时间之间可能存在延迟。

若要还原访问权限,请重新启用 Azure 密钥保管库 中的密钥。