你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Kubernetes 上使用 Apache Spark 基于机密计算进行大数据分析

Azure Kubernetes 服务 (AKS)
Azure SQL 数据库
Azure Data Lake

此解决方案在 Kubernetes 上使用机密计算,以便在包含来自 Azure Data Lake 和 Azure SQL 数据库的数据的机密容器中使用 Apache Spark 运行大数据分析。 机密计算由 Intel Software Guard Extensions 和 AMD EPYCTM 处理器提供,具有安全加密虚拟化-安全嵌套分页。 有关预配具有 AMD SEV-SNP 机密 VM 的 AKS 群集的详细信息,请参阅具有 AMD SEV-SNP 机密 VM 的 AKS 上的机密 VM 节点池支持。 有关部署具有机密计算 Intel SGX 代理节点的 AKS 群集的详细信息,请参阅使用 Azure CLI 部署具有机密计算 Intel SGX 代理节点的 AKS 群集

Apache®、Apache Ignite、Ignite 和火焰徽标是 Apache Software Foundation 在美国和/或其他国家/地区的商标或注册商标。 使用这些标记并不暗示获得 Apache Software Foundation 的认可。

体系结构

使用 Apache Spark、Azure SQL Always Encrypted、AKS 和安全容器环境进行机密大数据分析的示意图。

下载此体系结构的 PowerPoint 文件

上图大致描绘了体系结构:用于分布式处理较大数据集的可缩放模式。 它还展示了关系数据库引擎的机密分析以及机密数据的存储方式。 具体而言,如图所示,容器化 Spark 应用可以处理来自两个数据源的数据集:

  1. Azure Data Lake Storage - Parquet/Delta Lake 文件:如示例演示所示,由四个 pod 组成的 Spark 部署(一个驱动程序,以及安全容器环境 (SCONE) 运行时上的三个执行程序)能够在两分钟或大约 131 秒内处理 Azure Data Lake 存储中存储的 Parquet/Delta Lake 文件中的 15 亿行。

  2. Azure SQL DB - 使用安全 enclave 的 Always Encrypted:此示例使用 Spark 通过 Spark 容器 enclave 内的 Azure SQL JDBC 驱动程序访问纯文本格式的 Always Encrypted 数据,以运行分析和机器学习管道。

可以轻松扩展此模式,以包含 Spark 的大型生态系统支持的任何数据源。

工作流

  1. 操作员角色:DevOps 工程师预配 Kubernetes 群集、命名空间服务帐户和机密虚拟机 (VM) 节点池(例如 DC4s_v3)。

  2. 开发人员角色:数据工程师使用 PySpark 编写旨在分析大量数据的分析应用程序。

  3. 数据管护者角色:数据或安全工程师从组织中的共享存储库为 PySpark 应用程序创建安全策略(一次性活动)。 此策略指定数据和应用代码的预期状态、平台的最低安全要求,以及任何环境变量、命令行参数或机密(例如 JDBC 字符串、输入 Blob URI 和用于访问的 SAS 令牌)。 还可以使用 Kubernetes 机密或 Azure 密钥保管库将此配置提供给 Spark 运行时。 (有关详细信息,请参阅在 AKS 群集中使用适用于机密存储 CSI 驱动程序的 Azure 密钥保管库提供程序)。 仅当配置提供的证据已由证明提供程序验证时,才会将配置注入到 enclave 中。 证明提供程序(例如 Azure 证明服务)也在安全策略中定义。

  4. 借助 SCONE 机密计算软件,数据工程师可以生成一个机密 Docker 映像用于包含加密的分析代码和 PySpark 的安全版本。 SCONE 在启用了 Intel SGX 的 AKS 群集中运行(请参阅使用系统节点池创建 AKS 群集),这使得容器可在 enclave 内运行。 PySpark 提供敏感数据和应用代码已加密并在受信任执行环境 (TEE) 中隔离的证据 – 这意味着,任何人、进程和日志都不能访问纯文本数据或应用程序代码。

  5. PySpark 应用程序部署到远程 AKS 群集。 它在启动后会将其证明证据发送到证明提供程序。 如果证据有效,则返回一个证明令牌。 远程基础结构接受该证明令牌,并使用在 Azure 证明服务中找到的公共证书对其进行验证。 如果令牌通过验证,则几乎可以肯定 enclave 是安全的,并且数据或应用代码都未在 enclave 外部公开。 然后将安全策略中的配置(环境变量、命令行参数和机密)注入到 PySpark enclave。

  6. 可以跨多个 Kubernetes 节点水平缩放 PySpark 执行。 所有 PySpark 实例通过加密的通道进行通信,所有需要写入到其本地文件系统的文件都会经过加密(例如随机排列文件)。

  7. 分析结果将会加密并上传到使用 Always Encrypted 的 Azure SQL 数据库(使用列级加密)。 可以使用本文中所述的同类安全策略和基于硬件的证明证据,安全地向其他机密应用程序授予对输出数据和加密密钥的访问权限(例如,在管道中)。

组件

  • Azure 证明是一个统一解决方案,可远程验证平台的可信度。 Azure 证明还会远程验证在平台中运行的二进制文件的完整性。 可以使用 Azure 证明与机密应用程序建立信任。

  • Azure 机密计算节点托管在特定的 VM 系列上,这些系列可以在基于硬件的 TEE 中的 AKS 上运行敏感工作负载。 在此环境中,用户级代码可以分配专用内存区域(称为 enclave)。 机密计算节点可以支持机密容器或 enclave 感知容器。

  • Azure Kubernetes 服务简化了部署和管理 Kubernetes 群集的过程。

  • Apache Spark 是一个开源的多语言引擎,用于在单节点计算机和多节点群集(例如 Kubernetes pod)上执行数据工程、数据科学和机器学习。

  • Azure SQL 数据库现在提供使用安全 enclave 的 Always Encrypted,它扩展了 SQL Server Always Encrypted 技术的机密计算功能,包括就地加密和丰富机密查询。

  • SCONE 支持在 Kubernetes 群集内运行的容器中执行机密应用程序。

  • SCONE 平台是独立软件供应商兼 Azure 合作伙伴 Scontain 提供的一个解决方案。

备选方法

Occlum 是适用于 Intel SGX 的、内存安全的多进程库 OS (LibOS)。 使用 Occlum,只需对传统应用程序的源代码进行极少量的修改(有时甚至不需要修改),就能在 Intel SGX 上运行这些应用程序。 Occlum 以透明方式保护用户工作负载的机密性,同时能让用户轻松迁移到现有的 Docker 应用程序。 Occlum 支持 Java 应用程序。

SCONE 工程团队维护一个运行最新版 Spark 的 Apache Spark 容器映像。 Fortanix 是不特定于 Apache Spark 的替代方案,你可以使用它来部署与容器化应用程序配合使用的机密容器。 使用 Fortanix,可以灵活地运行和管理各种应用程序(包括现有应用程序、新的 enclave 原生应用程序以及预打包的应用程序)。

方案详细信息

数据集呈指数级增长,导致从消费者数据隐私和合规性的角度对数据公开方式的审查越来越严格。 在这种情况下,机密计算成了帮助组织满足其业务和消费者数据隐私与安全需求的重要工具。 如果以合规方式处理数据,则组织可以从受监管的数据中获取新见解。 在需要以云计算提供的规模用机密方式处理数据的方案中,机密计算特别有用。

机密计算技术将内存中的数据加密,并且仅在云环境经过验证或证明后才处理数据。 机密计算可防止云运营商、恶意管理员和特权软件(例如虚拟机监控程序)访问数据。 它还有助于在数据的整个生命周期内保护数据 — 包括静态数据、传输中数据以及正在使用的数据。

Azure Kubernetes 服务 (AKS) 上的机密容器为客户使用流行应用程序(例如 Apache Spark)执行数据清理和机器学习训练提供了必要的基础结构。 本文介绍 Azure 机密计算提供的一种解决方案,该解决方案可以结合使用节点池和 Intel Software Guard Extensions (Intel SGX) 在 AKS 群集上运行 Apache Spark 应用程序。 经过这种处理的数据通过使用安全 enclave 的 Always Encrypted 安全地存储在 Azure SQL 数据库中。

注意

在这种情况下,机密数据分析意味着对敏感数据运行分析,而且完全不用担心数据外泄。 这包括内部(例如恶意管理员)或外部(通过系统入侵)的根级别潜在容器访问违规。

机密数据分析通过从计算中删除不受信任方(例如云运营商和服务或来宾管理员)来帮助满足安全性和机密性的最高需求。 此方法有助于通过硬件支持的保证来满足数据合规性需求。

可能的用例

许多行业(尤其是金融服务行业)出于以下目的使用机密计算来保护其数据:

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

使用 DCsv3 和 DCdsv3 系列 VM 的 Azure 机密 enclave 提供较大的内存来帮助运行内存密集型应用程序(例如分析)。 此方案使用支持 Intel SGX 的 DCsv3 系列 VM。 只能在特定的区域部署特定的大小。 有关详细信息,请参阅快速入门:在市场中部署 Azure 机密计算 VM可用产品(按区域)

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述

在此方案的安全性方面,两个主要考虑因素是安全 enclave 和证明。

enclave 保障

Kubernetes 管理员或任何拥有最高访问级别的特权用户(例如 root)无法检查内存中内容,或者驱动程序或执行程序的源代码。 enclave 页面缓存 (EPC) 是 Azure 机密 VM 中由 enclave 或机密容器使用的专用内存分区。 DCsv3 和 DCdsv3 系列 VM 还附带常规的未加密内存,用于运行不需要安全 enclave 的应用。 有关将 Intel SGX 用于 enclave 的详细信息,请参阅使用 SGX enclave 进行构建

证明

证明是在交换数据之前,以加密方式向客户端或参与方证明运行应用的环境(包括其硬件和软件)可信的一种机制。 远程证明可确保工作负载在部署到不受信任的主机(例如云中运行的 VM 实例或 Kubernetes 节点)时不会遭到篡改。 在此过程中,证明提供程序将会分析 Intel SGX 硬件提供的证明证据。

若要对 SCONE 应用程序(例如 Spark 驱动程序和执行程序 pod)执行远程证明,需要两个服务:

  • 本地证明服务 (LAS):在不受信任的主机(AKS 节点池 VM)上运行的本地服务,它收集 Intel SGX 提供的有关所要证明的应用程序的证明证据。 由于 SCONE 采用的应用部署方法,此证据将被签名并转发到配置和证明服务 (CAS)。

  • CAS:用于管理安全策略(称为 SCONE 会话)、配置和机密的中心服务。 CAS 将 LAS 收集的证明证据与应用程序的安全策略(由应用程序所有者定义)进行比较,以确定 enclave 是否可信。 如果可信,则 CAS 将允许 enclave 运行,而 SCONE 会将配置和机密安全地注入其中。 若要详细了解 CAS 及其功能(例如机密生成和访问控制),请参阅 SCONE 配置和证明服务

为于方便演示,此方案使用了 SCONE 提供的公共 CAS,它将 LAS 部署为在每个 AKS 节点上作为 DaemonSet 运行。

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述

要了解运行此方案的成本,请使用 Azure 定价计算器,该计算器预配置了所有 Azure 服务。 请注意合作伙伴要求提供的用于运行生产工作负载的其他许可证。

部署此方案

部署此方案涉及以下概要步骤:

  • 从 SCONE 容器注册表获取对此方案中所用 PySpark 基础映像的访问权限:参阅 SCONE 特选映像上的“registry.scontain.com:5050”。

  • 克隆 GitHub 上的演示项目:在 Intel SGX 机密容器上使用 Apache Spark 进行机密数据分析。 此项目包含重现演示所需的所有资源、部署步骤和源代码。

  • 部署 Azure SQL 数据库中使用安全 enclave 的 Always Encrypted - 演示。 这些演示使用随附的机密数据集 ContosoHR。 此方案在 Spark 容器 enclave 中将机密数据解密为纯文本。

  • 部署支持 Intel SGX 的 AKS 群集节点池。 有关说明,请参阅快速入门:使用 Azure CLI 部署包含机密计算节点的 AKS 群集

  • 使用随附的 Kubernetes 清单将 SCONE 本地证明服务部署到群集。

  • 使用 SCONE 机密计算软件生成加密映像,并将其推送到你自己的 Azure 容器注册表。 存储库中有一个演示应用程序,用于统计纽约市黄色出租车行程记录(一个开放数据集,包含与出租车行程相关的时间、地点、收费和其他数据)中的行数。 你可以根据具体的需求改编此数据集。

  • 通过运行命令 spark-submit 部署 Spark 应用程序。 这会部署一个驱动程序 pod 以及可配置数量的执行程序 pod(本演示使用了三个),这些 pod 将运行任务并向驱动程序报告分析结果。 所有通信均已加密。

Kubernetes 上的 SCONE 机密 PySpark(一个 VM)也包含了可在本地 minikube 群集中重现的相同演示。 有关详细信息,请参阅官方文档:SCONE PySpark虚拟机

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

首席作者:

其他参与者:

若要查看非公开领英个人资料,请登录领英。

后续步骤