使用 Azure 机器学习进行数据加密

Azure 机器学习在你训练模型和执行推理时依赖于各种 Azure 数据存储服务和计算资源。 本文介绍每项服务在静态和传输中的数据加密。

对于训练期间的生产级加密,我们建议使用 Azure 机器学习计算群集。 对于推理过程中的生产级加密,我们建议使用 Azure Kubernetes 服务 (AKS)。

Azure 机器学习计算实例是开发/测试环境。 使用它时,我们建议将文件(如笔记本和脚本)存储在文件共享中。 将数据存储在数据存储中。

静态加密

Azure 机器学习端到端项目与 Azure Blob 存储、Azure Cosmos DB 和 Azure SQL 数据库等服务集成。 本文介绍此类服务的加密方法。

Azure Blob 存储

Azure 机器学习在绑定到 Azure 机器学习工作区和订阅的 Azure Blob 存储帐户(默认存储帐户)中存储快照、输出和日志。 Azure Blob 存储中存储的所有数据已通过 Azure 管理的密钥静态加密。

有关如何将自己的密钥用于存储在 Azure Blob 存储中的数据的信息,请参阅在 Azure Key Vault 中使用客户管理的密钥进行 Azure 存储加密

训练数据通常也存储在 Azure Blob 存储中,以便训练计算目标可以访问它。 Azure 机器学习不管理此存储。 此存储作为远程文件系统装载到计算目标。

如果需要轮换或撤销密钥,则可以随时执行此操作。 轮换密钥时,存储帐户会开始使用新密钥(最新版本)来加密静态数据。 撤销(禁用)密钥时,存储帐户负责处理失败的请求。 轮换或撤消操作通常需要一小时才能生效。

有关重新生成访问密钥的信息,请参阅重新生成存储帐户访问密钥

Azure Data Lake Storage

Azure Data Lake Storage Gen2 基于 Azure Blob 存储而构建,专为企业大数据分析设计。 Data Lake Storage Gen2 用作 Azure 机器学习的数据存储。 就像 Azure Blob 存储,静态数据也使用 Azure 管理的密钥进行加密。

有关如何将自己的密钥用于存储在 Azure Data Lake Storage 中的数据的信息,请参阅在 Azure Key Vault 中使用客户管理的密钥进行 Azure 存储加密

Azure 关系数据库

Azure 机器学习服务支持来自以下数据源的数据。

Azure SQL 数据库

透明数据加密通过加密静态数据,帮助保护 Azure SQL 数据库免受恶意脱机活动的威胁。 默认情况下,对所有新部署的 SQL 数据库(使用 Azure 管理的密钥)启用透明数据加密。

有关如何使用客户管理的密钥进行透明数据加密的信息,请参阅 Azure SQL 数据库透明数据加密

Azure Database for PostgreSQL

默认情况下,Azure Database for PostgreSQL 使用 Azure 存储加密,通过使用 Azure 管理的密钥对静态数据进行加密。 这与 SQL Server 等其他数据库中的透明数据加密相似。

有关如何使用客户管理的密钥进行透明数据加密的信息,请参阅使用客户管理的密钥进行 Azure Database for PostgreSQL 单服务器数据加密

Azure Database for MySQL

Azure Database for MySQL 是 Azure 云中的一项关系数据库服务。 它基于 MySQL 社区版数据库引擎。 Azure Database for MySQL 服务使用 FIPS 140-2 验证的加密模块对静态数据进行 Azure 存储加密。

若要使用客户管理的密钥加密数据,请参阅使用客户管理的密钥进行 Azure Database for MySQL 数据加密

Azure Cosmos DB

Azure 机器学习在 Azure Cosmos DB 实例中存储元数据。 此实例与 Azure 机器学习管理的 Azure 订阅相关联。 Azure Cosmos DB 中存储的所有数据已通过 Azure 管理的密钥静态加密。

当使用自己的(客户管理的)密钥来加密 Azure Cosmos DB 实例时,订阅中会创建 Azure 管理的 Azure Cosmos DB 实例。 此实例会在 Azure 受管理资源组中创建,该资源组不同于工作区的资源组。 有关详细信息,请参阅用于 Azure 机器学习的客户管理的密钥

Azure 容器注册表

容器注册表(Azure 容器注册表的实例)中的所有容器映像均静态加密。 Azure 会在存储映像之前自动将其加密,并在 Azure 机器学习提取映像时将其解密。

若要使用客户管理的密钥加密容器注册表,需要在预配工作区时创建并附加容器注册表。 可以加密在预配工作区时创建的默认实例。

重要

Azure 机器学习要求在容器注册表上启用管理员帐户。 创建容器注册表时,默认情况下此设置已禁用。 有关启用管理员帐户的信息,请参阅本文后面的管理员帐户

为工作区创建容器注册表后,请勿将其删除。 删除该注册表将损坏 Azure 机器学习工作区。

有关使用现有的容器注册表创建工作区的示例,请参阅以下文章:

Azure 容器实例

重要

到 Azure 容器实例的部署依赖于 Azure 机器学习 Python SDK 和 CLI v1。

可以使用客户管理的密钥来加密已部署的 Azure 容器实例资源。 用于容器实例的客户管理的密钥可以存储在工作区的密钥保管库中。

适用于:Python SDK azureml v1

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

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

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

有关如何将客户管理的密钥用于容器实例的详细信息,请参阅加密部署数据

Azure Kubernetes 服务

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

借助此过程,你可以加密 Kubernetes 群集中已部署的虚拟机的数据和操作系统 (OS) 磁盘。

重要

此过程仅适用于 AKS 版本 1.17 或更高版本。 Azure 机器学习在 2020 年 1 月 13 日添加了对 AKS 1.17 的支持。

机器学习计算

计算群集

存储在 Azure 存储中的每个计算节点的 OS 磁盘都使用 Azure 机器学习存储帐户中的 Azure 管理的密钥进行加密。 此计算目标是临时的,不存在排队的作业时,通常便会纵向缩减群集。 基础虚拟机已取消预配,并已删除 OS 磁盘。

默认情况下,不会为工作区启用 Azure 磁盘加密。 如果创建工作区时将 hbi_workspace 参数设置为 TRUE,则将对 OS 磁盘进行加密。

每个虚拟机还包含一个本地临时磁盘用于 OS 操作。 如果需要,可以使用该磁盘来暂存训练数据。 如果创建工作区时将 hbi_workspace 参数设置为 TRUE,则将对临时磁盘进行加密。 此环境短暂存在(仅在作业期间),加密支持仅限于系统管理的密钥。

托管联机终结点和批处理终结点在后端使用 Azure 机器学习计算,它们遵循相同的加密机制。

计算实例

计算实例的 OS 磁盘使用 Azure 机器学习存储帐户中的 Azure 管理的密钥进行加密。 如果创建工作区时将 hbi_workspace 参数设置为 TRUE,则计算实例上的本地 OS 和临时磁盘将使用 Azure 管理的密钥进行加密。 OS 和临时磁盘不支持客户管理的密钥加密。

有关详细信息,请参阅用于 Azure 机器学习的客户管理的密钥

Azure 数据工厂

Azure 数据工厂管道会引入数据,供 Azure 机器学习使用。 Azure 数据工厂对静态数据进行加密,其中包括实体定义和在运行期间缓存的所有数据。 默认情况下,使用随机生成的 Azure 管理的密钥加密数据,该密钥唯一分配给你的数据工厂。

有关如何使用客户管理的密钥进行加密的信息,请参阅通过客户管理的密钥加密 Azure 数据工厂

Azure Databricks

可以在 Azure 机器学习管道中使用 Azure Databricks。 默认情况下,Azure Databricks 使用的 Databricks 文件系统 (DBFS) 是通过 Azure 管理的密钥加密的。 若要将 Azure Databricks 配置为使用客户管理的密钥,请参阅在默认(根)DBFS 上配置客户管理的密钥

Microsoft 生成的数据

使用 Azure 机器学习等服务时,Azure 可能会生成用于定型多个模型的临时预处理数据。 此数据存储在工作区的数据存储中,以便你适当地强制执行访问控制和加密操作。

可能还需要加密从部署的终结点记录到 Application Insights 中的诊断信息

传输中加密

Azure 机器学习使用传输层安全性 (TLS) 来帮助保护各种 Azure 机器学习微服务之间的内部通信。 所有 Azure 存储访问也都通过安全通道进行。

Azure 机器学习使用 TLS 来帮助保护对评分终结点的外部调用。 有关详细信息,请参阅使用 TLS 通过 Azure 机器学习来保护 Web 服务

数据收集和处理

出于诊断目的,Microsoft 可能会收集不识别用户身份的信息。 例如,Azure 可能会收集资源名称(例如,数据集名称或机器学习实验名称)或作业环境变量。 所有此类数据都通过 Azure 管理的密钥存储在 Microsoft 拥有的订阅中托管的存储中。 存储遵循 Azure 的标准隐私策略和数据处理标准。 此数据与你的工作区处于同一区域内。

我们建议不要在环境变量中存储敏感信息(例如帐户密钥机密)。 Microsoft 日志、加密和存储环境变量。 同样,为作业命名时,请避免包含用户名或机密项目名称等敏感信息。 此信息可能会显示在 Microsoft 支持工程师可以访问的遥测日志中。

通过在预配工作区时将 hbi_workspace 参数设置为 TRUE,可以选择退出诊断数据收集。 使用 Azure 机器学习 Python SDK、Azure CLI、REST API 或 Azure 资源管理器模板时支持此功能。

Azure Key Vault 中的凭据存储

Azure 机器学习使用与工作区关联的 Azure Key Vault 实例来存储各种类型的凭据:

  • 存储帐户的关联连接字符串
  • Azure 容器注册表实例的密码
  • 数据存储的连接字符串

计算目标(如 Azure HDInsight 和虚拟机)的安全外壳 (SSH) 密码和密钥存储在与 Microsoft 订阅关联的单独的密钥保管库中。 Azure 机器学习不存储用户提供的任何密码或密钥。 相反,它会生成、授权并存储自己的 SSH 密钥,以连接到虚拟机和 HDInsight 来运行试验。

每个工作区有一个关联的系统分配的托管标识,该标识与工作区同名。 此托管标识可以访问密钥保管库中的所有密钥、机密和证书。

后续步骤