将客户管理的密钥与 Azure 机器学习配合使用

客户管理的密钥概念文章中,你已了解 Azure 机器学习提供的加密功能。 现在请了解如何将客户管理的密钥与 Azure 机器学习配合使用。

Azure 机器学习依赖于使用客户管理的密钥的以下服务:

服务 用途
Azure Cosmos DB 存储 Azure 机器学习的元数据
Azure AI 搜索 存储 Azure 机器学习的工作区元数据
Azure 存储 存储 Azure 机器学习的工作区元数据
Azure Kubernetes 服务 将已训练的模型作为推理终结点来托管

使用相同的密钥来帮助保护 Azure Cosmos DB、Azure AI 搜索和 Azure 存储。 可对 Azure Kubernetes 服务使用不同的密钥。

当你将客户管理的密钥与 Azure Cosmos DB、Azure AI 搜索和 Azure 存储结合使用时,系统会在你创建工作区时提供该密钥。 系统会在你配置该资源时提供用于 Azure Kubernetes 服务的密钥。

服务 用途
Azure Cosmos DB 存储 Azure 机器学习的元数据
Azure AI 搜索 存储 Azure 机器学习的工作区元数据
Azure 存储 存储 Azure 机器学习的工作区元数据
Azure Kubernetes 服务 将已训练的模型作为推理终结点来托管
Azure 容器实例 将已训练的模型作为推理终结点来托管

使用相同的密钥来帮助保护 Azure Cosmos DB、Azure AI 搜索和 Azure 存储。 可对 Azure Kubernetes 服务和 Azure 容器服务使用不同的密钥。

当你将客户管理的密钥与 Azure Cosmos DB、Azure AI 搜索和 Azure 存储结合使用时,系统会在你创建工作区时提供该密钥。 系统会在你配置这些资源时提供用于 Azure 容器实例和 Azure Kubernetes 服务的密钥。

先决条件

  • Azure 订阅。

  • 必须注册以下 Azure 资源提供程序:

    资源提供程序 为什么需要它
    Microsoft.MachineLearningServices 创建 Azure 机器学习工作区。
    Microsoft.Storage 存储帐户用作工作区的默认存储。
    Microsoft.KeyVault 该工作区使用 Azure Key Vault 来存储机密。
    Microsoft.DocumentDB/databaseAccounts 用于记录工作区元数据的 Azure Cosmos DB 实例。
    Microsoft.Search/searchServices Azure 搜索为工作区提供索引编制功能。

    有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误

限制

  • 创建工作区后,工作区所依赖资源的客户管理的加密密钥只能更新为原始 Azure 密钥保管库资源中的其他密钥。
  • 你的订阅中由 Azure 管理的资源无法将所有权转移给你。
  • 如果不同时删除工作区,则无法删除用于客户托管密钥的 Azure 托管资源。
  • 包含客户管理的密钥的密钥保管库必须与 Azure 机器学习工作区位于同一 Azure 订阅中。

重要

使用客户管理的密钥时,订阅成本更高,因为你的订阅中有更多资源。 若要估算成本,请使用 Azure 定价计算器

创建 Azure Key Vault

若要创建密钥保管库,请参阅创建密钥保管库。 创建 Azure 密钥保管库时,必须启用软删除和清除保护。

重要

密钥保管库必须位于包含 Azure 机器学习工作区的同一 Azure 订阅中。

创建密钥

提示

如果在创建密钥时遇到问题,原因可能是在订阅中应用了基于 Azure 角色的访问控制。 请确保已为用于创建密钥的安全主体(用户、托管标识、服务主体等)分配了密钥保管库实例的参与者角色。 此外,必须在密钥保管库中配置一个访问策略,用于为安全主体授予“创建”、“获取”、“删除”和“清除”授权。

如果你打算对工作区使用用户分配的托管标识,则还必须为该托管标识分配这些角色和访问策略。

有关详细信息,请参阅以下文章:

  1. Azure 门户中选择密钥保管库实例。 然后在左侧选择“密钥”。

  2. 在页面顶部选择“+ 生成/导入”。 使用以下值创建密钥:

    • 将“选项”设置为“生成”。
    • 输入密钥的名称。 该名称应该标识了目标用途。 例如,my-cosmos-key
    • 将“密钥类型”设置为“RSA”。
    • 对于“RSA 密钥大小”,我们建议至少选择“3072”。
    • 将“已启用”设置为“是”。

    可以选择性地设置激活日期、过期日期和标记。

  3. 选择“创建”以创建密钥。

允许 Azure Cosmos DB 访问密钥

  1. 若要配置密钥保管库,请在 Azure 门户中选择它,然后从左侧菜单中选择“访问策略”。
  2. 若要为 Azure Cosmos DB 创建权限,请在页面顶部选择“+ 创建”。 在“密钥权限”下,选择“获取”、“解包密钥”和“包装密钥”权限。
  3. 在“主体”下,搜索“Azure Cosmos DB”并选择它。 此条目的主体 ID 是 a232010e-820c-4083-83bb-3ace5fc29d0b
  4. 选择“查看 + 创建”,然后选择“创建”。

创建使用客户管理的密钥的工作区

创建 Azure 机器学习工作区。 创建工作区时,必须选择“Azure 密钥保管库”和“密钥”。 根据创建工作区的方式,以不同的方式指定这些资源:

警告

包含客户管理的密钥的密钥保管库必须与工作区位于同一 Azure 订阅中。

  • Azure 门户:配置工作区时,从下拉输入框中选择密钥保管库和密钥。

  • SDK、REST API 和 Azure 资源管理器模板:提供密钥保管库的 Azure 资源管理器 ID,以及密钥的 URL。 若要获取这些值,请使用 Azure CLI 和以下命令:

    # Replace `mykv` with your key vault name.
    # Replace `mykey` with the name of your key.
    
    # Get the Azure Resource Manager ID of the key vault
    az keyvault show --name mykv --query id
    # Get the URL for the key
    az keyvault key show --vault-name mykv -n mykey --query key.kid
    

    密钥保管库 ID 值类似于 /subscriptions/{GUID}/resourceGroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/mykv。 密钥的 URL 类似于 https://mykv.vault.azure.cn/keys/mykey/{GUID}

有关创建使用客户管理密钥的工作区的示例,请参阅以下文章:

创建方法 项目
CLI 使用 Azure CLI 创建工作区
Azure 门户/
Python SDK
创建和管理工作区
Azure 资源管理器
模板
使用模板创建工作区
REST API 使用 REST 创建、运行和删除 Azure 机器学习资源

创建工作区后,你将注意到在你的订阅中创建了 Azure 资源组。 此组是对工作区资源组的补充。 此资源组将包含与你的密钥配合使用的 Microsoft 托管资源。 该资源组的命名格式为 <Azure Machine Learning workspace resource group name><GUID>。 其中包含 Azure Cosmos DB 实例、Azure 存储帐户和 Azure AI 搜索。

提示

  • Azure Cosmos DB 实例的请求单位会按需自动缩放。
  • 如果你的 Azure 机器学习工作区使用专用终结点,则此资源组还将包含 Microsoft 管理的 Azure 虚拟网络。 此 VNet 用于保护托管服务与工作区之间的通信。 你无法提供自己的 VNet 用于 Microsoft 管理的资源。 也不能修改虚拟网络。 例如,你不能更改它使用的 IP 地址范围。

重要

如果你的订阅不能为这些服务提供足够的配额,则会发生失败。

警告

请不要删除包含此 Azure Cosmos DB 实例的资源组,也不要删除此组中自动创建的任何资源。 如果需要删除该资源组或其中的 Microsoft 管理的服务,必须删除使用该资源组的 Azure 机器学习工作区。 删除关联的工作区后,将删除资源组资源。

有关 Azure Cosmos DB 的客户管理的密钥的详细信息,请参阅为 Azure Cosmos DB 帐户配置客户管理的密钥

Azure 容器实例

重要

SDK 或 CLI v2 中不支持部署到 Azure 容器实例。 仅通过 SDK 和 CLI v1。

将已训练的模型部署到 Azure 容器实例 (ACI) 时,可以使用客户管理的密钥来加密部署的资源。 有关生成密钥的信息,请参阅使用客户管理的密钥加密数据

若要在将模型部署到 Azure 容器实例时使用密钥,请使用 AciWebservice.deploy_configuration() 创建新的部署配置。 使用以下参数提供密钥信息:

  • cmk_vault_base_url:包含密钥的密钥保管库的 URL。
  • cmk_key_name:键的名称。
  • cmk_key_version:密钥版本。

有关如何创建和使用部署配置的详细信息,请参阅以下文章:

Azure Kubernetes 服务

随时可以使用客户管理的密钥来加密已部署的 Azure Kubernetes 服务资源。 有关详细信息,请参阅在 Azure Kubernetes 服务中使用自己的密钥

此过程允许加密 Kubernetes 群集中已部署的虚拟机的数据和 OS 磁盘。

重要

此过程仅适用于 AKS K8s 1.17 或更高版本。

后续步骤