为托管服务启用 HSM 客户管理的密钥

注意

此功能需要高级计划

本文介绍如何从 Azure Key Vault 托管 HSM 配置自己的密钥。 有关使用 Azure Key Vault 保管库中的密钥的说明,请参阅为托管服务启用客户管理的密钥

要求

步骤 1:创建 Azure Key Vault 托管 HSM 和 HSM 密钥

可以使用现有的 Azure Key Vault 托管 HSM,也可以按照托管 HSM 文档中的快速入门创建和激活新的 HSM。 请参阅快速入门:使用 Azure CLI 预配和激活托管 HSM。 Azure Key Vault 托管 HSM 必须启用清除保护

重要

密钥保管库必须与 Azure Databricks 工作区位于同一 Azure 租户中。

若要创建 HSM 密钥,请按照创建 HSM 密钥中的说明进行操作。

步骤 2:配置托管 HSM 角色分配

请为 Key Vault 托管 HSM 配置角色分配,以便 Azure Databricks 工作区有权访问它。 可以使用 Azure 门户、Azure CLI 或 Azure Powershell 配置角色分配。

使用 Azure 门户

  1. 在 Azure 门户中转到你的托管 HSM 资源。
  2. 在左侧菜单中的“设置”下,选择“本地 RBAC”。
  3. 单击“添加” 。
  4. 在“角色”字段中,选择“托管 HSM 加密服务加密用户”。
  5. 在“范围”字段中,选择 All keys (/)
  6. 在“安全主体”字段中,键入 AzureDatabricks 并滚动到包含应用程序 ID 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d 的企业应用程序结果,并将它选中。
  7. 单击 “创建”
  8. 在左侧菜单中的“设置”下,选择“密钥”,然后选择密钥。
  9. 在“密钥标识符”字段中,复制文本。

使用 Azure CLI

  1. 使用 Azure CLI 获取 AzureDatabricks 应用程序的对象 ID。

    az ad sp show --id "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" \
                    --query "id" \
                    --output tsv
    
  2. 配置托管 HSM 角色分配。 将 <hsm-name> 替换为托管 HSM 名称,并将 <object-id> 替换为上一步中 AzureDatabricks 应用程序的对象 ID。

    az keyvault role assignment create --role "Managed HSM Crypto Service Encryption User"
        --scope "/" --hsm-name <hsm-name>
        --assignee-object-id <object-id>
    

使用 Azure PowerShell

<hsm-name> 替换为托管 HSM 名称。

Connect-AzureAD
$managedService = Get-AzureADServicePrincipal \
-Filter "appId eq '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d'"

New-AzKeyVaultRoleAssignment -HsmName <hsm-name> \
-RoleDefinitionName "Managed HSM Crypto Service Encryption User" \
-ObjectId $managedService.ObjectId

步骤 3:将密钥添加到工作区

可以使用 Azure 门户、Azure CLI 或 Azure Powershell 为托管服务创建或更新具有客户管理的密钥的工作区。

使用 Azure 门户

  1. 转到 Azure 门户主页

  2. 单击页面左上角的“创建资源”。

  3. 在搜索栏中键入 Azure Databricks,然后单击“Azure Databricks”选项。

  4. 在 Azure Databricks 小组件中单击“创建”。

  5. 在“基本信息”和“网络”选项卡上的输入字段中输入值。

  6. 进入“加密”选项卡后:

    • 要创建工作区,请在“托管服务”部分启用“使用你自己的密钥”。
    • 要更新工作区,请启用“托管服务”。
  7. 设置加密字段。

    显示“Azure Databricks”边栏选项卡的“托管磁盘”部分中的字段

    • 在“密钥标识符”字段中,粘贴托管 HSM 密钥的密钥标识符。
    • 在“订阅”下拉列表中,输入你的 Azure 密钥保管库密钥的订阅名称。
  8. 填写剩余的选项卡,然后单击“查看 + 创建”(若要新建工作区)或“保存”(若要更新工作区)。

使用 Azure CLI

创建或更新工作区:

对于创建和更新,请将这些字段添加到命令中:

  • managed-services-key-name:托管 HSM 名称
  • managed-services-key-vault:托管 HSM URI
  • managed-services-key-version:托管 HSM 版本

使用这些字段创建工作区的示例:

az databricks workspace create --name <workspace-name> \
--resource-group <resource-group-name> \
--location <location> \
--sku premium \
--managed-services-key-name <hsm-name> \
--managed-services-key-vault <hsm-uri> \
--managed-services-key-version <hsm-version>

使用这些字段更新工作区的示例:

az databricks workspace update --name <workspace-name> \
--resource-group <resource-group-name> \
--managed-services-key-name <hsm-name> \
--managed-services-key-vault <hsm-uri> \
--managed-services-key-version <hsm-version>

重要

如果轮换密钥,则必须保留旧密钥 24 小时。

使用 Powershell

若要创建或更新工作区,请将以下参数添加到新密钥的命令中:

  • ManagedServicesKeyVaultPropertiesKeyName:托管 HSM 名称
  • ManagedServicesKeyVaultPropertiesKeyVaultUri:托管 HSM URI
  • ManagedServicesKeyVaultPropertiesKeyVersion:托管 HSM 版本

使用这些字段创建工作区的示例:

New-AzDatabricksWorkspace -Name <workspace-name> \
-ResourceGroupName <resource-group-name> \
-location $keyVault.Location \
-sku premium \
-ManagedServicesKeyVaultPropertiesKeyName $hsm.Name \
-ManagedServicesKeyVaultPropertiesKeyVaultUri $hsm.Uri \
-ManagedServicesKeyVaultPropertiesKeyVersion $hsm.Version

使用这些字段更新工作区的示例:

Update-AzDatabricksWorkspace -Name <workspace-name> \
-ResourceGroupName <resource-group-name> \
-sku premium \
-ManagedServicesKeyVaultPropertiesKeyName $hsm.Name \
-ManagedServicesKeyVaultPropertiesKeyVaultUri $hsm.VaultUri \
-ManagedServicesKeyVaultPropertiesKeyVersion $hsm.Version

重要

如果轮换密钥,则必须保留旧密钥 24 小时。

步骤 4(可选):重新导入笔记本

一开始为现有工作区的托管服务添加密钥后,只有未来的写入操作会使用该密钥。 现有数据未重新加密。

可以导出所有笔记本,然后将其重新导入,以便加密数据的密钥受到密钥的保护和控制。 可以使用导出和导入工作区 API

稍后轮换密钥

如果已对托管服务使用客户管理的密钥,则可以使用新的密钥版本或全新密钥更新工作区。 这称为密钥轮换

  1. 在托管 HSM 保管库中创建新密钥或轮换现有密钥。

    确保新密钥具有适当权限。

  2. 使用门户、CLI 或 PowerShell 使用新密钥更新工作区。 请参阅步骤 3:向工作区添加密钥,并按照说明更新工作区。 确保为资源组名称和工作区名称使用相同的值,以便它更新现有工作区,而不是创建新的工作区。 除了密钥相关参数的更改之外,请使用用于创建工作区的相同参数。

    重要

    如果轮换密钥,则必须保留旧密钥 24 小时。

  3. 也可以导出和重新导入现有笔记本,以确保所有现有笔记本都使用新密钥。