編輯

共用方式為


在 Kubernetes 上使用 Apache Spark 進行機密運算的巨量數據分析

Azure Kubernetes Service (AKS)
Azure SQL Database
Azure Data Lake

此解決方案會使用 Kubernetes 上的機密運算,在機密容器內使用 Apache Spark 執行巨量數據分析,以及來自 Azure Data Lake 和 Azure SQL 資料庫 的數據。 機密運算是由 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 儲存體 - Parquet/Delta Lake 檔案:如範例示範所示,四個 Pod Spark 部署—一個驅動程式,安全容器環境 (SCONE) 運行時間上的三個執行程式—能夠處理 15 億個 Parquet/Delta Lake 檔案列,這些檔案儲存在 Azure Data Lake 記憶體的兩分鐘內,或大約 131 秒。

  2. Azure SQL DB - 具有安全記憶體保護區的 Always Encrypted:此範例會使用 Spark,使用 Spark 在 Spark 容器記憶體保護區內使用 Azure SQL JDBC 驅動程式 ,以純文本方式存取 Always Encrypted 數據,以執行分析和機器學習管線。

您可以輕鬆地擴充此模式,以包含 Spark 大型生態系統所支援的任何數據源。

工作流程

  1. 操作員角色:DevOps 工程師會佈建 Kubernetes 叢集、 命名空間服務帳戶和機密虛擬機 (VM) 節點集區(例如, DC4s_v3)。

  2. 開發人員角色:數據工程師會使用 PySpark 來撰寫分析應用程式,其設計目的是要分析大量數據。

  3. 數據監管人角色:數據或安全性工程師會從組織中的共用存放庫建立 PySpark 應用程式的安全策略(一次性活動)。 此原則會指定數據與應用程式程式代碼的預期狀態、平臺的最低安全性需求,以及任何環境變數、命令行自變數或秘密(例如 JDBC 字串、輸入 Blob URI,以及用於存取的 SAS 令牌)。 您也可以使用 Kubernetes 秘密或使用 Azure 金鑰保存庫,讓 Spark 運行時間使用此組態。 (如需詳細資訊,請參閱使用 Azure 金鑰保存庫 Provider for Secrets Store CSI Driver in a AKS 叢集中)。 只有在證明提供者驗證所提供的辨識項時,設定才會插入記憶體保護區。 證明提供者(例如,Azure 證明 服務),也會定義在安全策略中。

  4. 在SCONE機密運算軟體的説明下,數據工程師會建置機密 Docker 映像,其中包含加密的分析程式碼和安全版本的 PySpark。 SCONE 可在已啟用 Intel SGX 的 AKS 叢集內運作(請參閱 使用系統節點集區建立 AKS 叢集),以允許容器在記憶體保護區內執行。 PySpark 提供在信任執行環境 (TEE) 中加密和隔離敏感數據和應用程式程式代碼的證據,這表示沒有任何人類、沒有進程,也沒有記錄可以存取純文字數據或應用程式程序代碼。

  5. PySpark 應用程式會部署到遠端 AKS 叢集。 它會啟動並將其證明辨識項傳送至證明提供者。 如果辨識項有效, 則會傳回證明令牌 。 遠端基礎結構會接受證明令牌,並使用在 Azure 證明 服務中找到的公開憑證進行驗證。 如果已驗證令牌,則幾乎可以確定記憶體保護區是安全的,而且數據或應用程式程式代碼都沒有在記憶體保護區外開啟。 安全策略中的組態(環境變數、命令行自變數和秘密)接著會插入 PySpark 記憶體保護區。

  6. 您可以水平調整多個 Kubernetes 節點的 PySpark 執行。 所有 PySpark 實例都會透過加密通道進行通訊,而且所有檔案都會經過加密,這些檔案都必須寫入其本機文件系統(例如隨機檔案)。

  7. 分析的結果會加密並上傳至具有 Always Encrypted 的 Azure SQL 資料庫(使用數據行層級加密)。 您可以使用本文所述的相同安全策略和硬體證明辨識項,安全地將輸出數據和加密密鑰的存取權授與其他機密應用程式(例如,在管線中)。

元件

  • Azure 證明 是一個統一的解決方案,可遠端驗證平臺的可信度。 Azure 證明 也會從遠端驗證平台中執行的二進位檔完整性。 使用 Azure 證明 與機密應用程式建立信任。

  • Azure 機密運算 節點裝載在特定 VM 系列上,可在硬體型 TEE 內的 AKS 上執行敏感性工作負載。 在此環境中,用戶層級程式代碼可以配置記憶體的私人區域,稱為 記憶體保護區。 機密運算節點可以支援機密容器或記憶體保護區感知容器。

  • Azure Kubernetes Service 可簡化部署和管理 Kubernetes 叢集的程式。

  • Apache Spark 是開放原始碼的多語言引擎,可用於在單一節點機器和多節點叢集上執行數據工程、數據科學和機器學習,例如 Kubernetes Pod。

  • Azure SQL 資料庫 現在提供具有安全記憶體保護區Always Encrypted,並擴充 SQL Server Always Encrypted 技術的機密運算功能,以包含就地加密和豐富的機密查詢。

  • SCONE 支援在 Kubernetes 叢集內執行的容器中執行機密應用程式。

  • SCONE 平臺 是來自 Scontain、獨立軟體廠商和 Azure 合作夥伴的解決方案。

替代項目

Occlum 是適合 Intel SGX 的記憶體安全、多程序程式庫 OS (LibOS)。 Occlum 可讓舊版應用程式在 Intel SGX 上執行,而不需要修改原始程式碼。 Occlum 會以透明方式保護使用者工作負載的機密性,同時允許輕鬆移轉至現有的 Docker 應用程式。 Occlum 支援 Java 應用程式。

SCONE 工程小組會維護執行 最新版 Spark 的 Apache Spark 容器映像。 Apache Spark 並非專屬的替代方案是 Fortanix,您可以部署機密容器以搭配容器化應用程式使用。 Fortanix 提供執行和管理最廣泛應用程式集所需的彈性:現有的應用程式、新的記憶體保護區原生應用程式,以及預先封裝的應用程式。

案例詳細資料

數據集有指數成長,這導致數據如何從取用者數據隱私權和合規性的角度,對數據的公開程度越來越嚴格。 在此內容中,機密運算會成為協助組織符合其商務和取用者數據隱私權和安全性需求的重要工具。 如果數據以符合規範的方式處理,組織可以從受管制的數據中取得新的見解。 機密運算特別適用於需要雲端運算提供的規模,才能以機密方式處理數據的情況。

機密運算技術會加密記憶體中的數據,並且只會在驗證或 證明雲端環境之後進行處理。 機密運算可防止雲端操作員、惡意系統管理員和特殊許可權軟體的數據存取,例如 Hypervisor。 它也有助於在整個生命週期中保護數據,同時數據處於待用狀態、傳輸中,以及目前正在使用中。

Azure Kubernetes Service (AKS) 上的機密容器 提供必要的基礎結構,讓客戶能夠使用熱門應用程式,例如 Apache Spark 來執行數據清理和機器學習訓練。 本文提供 Azure 機密運算提供的解決方案,透過搭配 Intel Software Guard Extensions (Intel SGX) 使用節點集區,在 AKS 叢集上執行 Apache Spark 應用程式。 來自該處理的數據會安全地儲存在 Azure SQL 資料庫,方法是使用具有安全記憶體保護區的 Always Encrypted。

注意

此內容中的機密數據分析旨在隱含 在敏感數據上執行分析,並放心地防止數據外流。 這包括根層級的潛在容器存取缺口,包括內部(例如,由流氓系統管理員)或外部(依系統入侵)。

機密數據分析可藉由從計算不受信任的合作物件中移除,例如雲端操作員和服務或來賓系統管理員,協助滿足安全性與機密性的最高需求。 此方法可透過硬體支援的保證,協助滿足數據合規性需求。

潛在使用案例

許多產業,特別是金融服務,會針對這些用途使用機密運算來保護其數據:

考量

這些考量能實作 Azure Well-Architected Framework 的要素,其為一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework (部分機器翻譯)。

使用 DCsv3 和 DCdsv3 系列 VM 的 Azure 機密記憶體保護區提供大型記憶體大小,以協助執行需要大量記憶體的應用程式,例如分析。 此案例使用已啟用 Intel SGX 的 DCv3 系列 VM。 您只能在特定區域中部署特定大小。 如需詳細資訊,請參閱快速入門:在依區域提供的 Marketplace 和產品中部署 Azure 機密運算 VM。

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性要素的概觀

此案例的安全性兩個主要因素是安全記憶體保護區和證明。

記憶體保護區保證

Kubernetes 系統管理員或任何具有最高層級存取權的許可權使用者(例如 root),無法檢查記憶體內部內容或驅動程式或執行程式原始程式碼。 記憶體保護區頁面快取 (EPC) 是記憶體保護區或機密容器使用之 Azure 機密 VM 中的特製化記憶體分割區。 DCsv3 和 DCdsv3 系列 VM 也隨附一般、未加密的記憶體,以執行不需要安全記憶體保護區的應用程式。 如需使用 Intel SGX 進行記憶體保護區的詳細資訊,請參閱 使用 SGX 記憶體保護區建置

證明

證明 是一種機制,提供給用戶端或 合作對象的密碼編譯辨識項,指出應用程式執行的環境在交換數據之前,包括其硬體和軟體都是值得信任的。 遠程證明 可確保部署至不受信任的主機時,您的工作負載不會遭到竄改,例如 VM 實例或雲端中執行的 Kubernetes 節點。 在此程式中,Intel SGX 硬體所提供的證明辨識項是由證明提供者分析。

若要在 SCONE 應用程式上執行遠程證明(例如 Spark 驅動程式和執行程式 Pod),需要兩項服務:

  • 本機證明服務 (LAS):在未受信任的主機上執行的本地服務(AKS 節點集區 VM),並收集 Intel SGX 針對要證明的應用程式所提供的證明辨識項。 由於 SCONE 的應用程式部署方法,此辨識項會簽署並轉送至組態和證明服務(CAS)。

  • CAS:管理安全策略(稱為 SCONE 工作階段)、設定和秘密的中央服務。 CAS 會比較 LAS 所收集的證明辨識項,與應用程式的安全策略(由應用程式擁有者定義)進行比較,以判斷記憶體保護區是否值得信任。 如果是,CAS 允許記憶體保護區執行,而SCONE會安全地將設定和秘密插入其中。 若要深入瞭解 CAS 及其功能,例如秘密產生和訪問控制,請參閱 SCONE 組態和證明服務

此案例會使用 SCONE 提供的公用 CAS 進行示範和簡化,並將 LAS 部署為在每個 AKS 節點上以 DaemonSet 的形式執行。

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化要素的概觀

若要探索執行此案例的成本,請使用 Azure 定價計算機來預先設定所有 Azure 服務。 請注意合作夥伴執行生產工作負載所需的其他授權。

部署此案例

部署此案例牽涉到下列高階步驟:

  • 從 SCONE 的容器登錄取得此案例中使用的 PySpark 基底映射的存取權:請參閱 registry.scontain.com:5050SCONE 策劃的映像

  • 在 GitHub 上複製示範專案, 使用 Intel SGX 機密容器上的 Apache Spark 進行機密數據分析。 此專案包含所有必要的資源、部署步驟和原始程式碼,以重現示範。

  • 在 Azure SQL 資料庫 中部署具有安全記憶體保護區的 Always Encrypted - 示範。 這些示範會使用包含的機密數據集 ContosoHR。 此案例會將機密數據解密為Spark容器記憶體保護區內的純文本。

  • 部署已啟用 Intel SGX 的 AKS 叢集節點集區。 如需指示,請參閱 快速入門:使用 Azure CLI 部署具有機密運算節點的 AKS 叢集。

  • 使用隨附的 Kubernetes 指令清單,將 SCONE 本機證明服務部署至叢集。

  • 使用 SCONE 機密運算軟體建置加密的映像,並將其推送至您自己的 Azure Container Registry。 存放庫具有示範應用程式,可計算紐約市 黃色計程車車程記錄中的行數、時間、地點、車資和其他與計程車車程相關的公開數據集。 您可以適應您的特定需求。

  • 執行 命令 spark-submit來部署Spark應用程式。 這會部署驅動程式Pod和可設定數目的執行程式Pod(示範使用三個),以執行工作,並將分析結果報告給驅動程式。 所有通訊都會加密。

或者,KUBERnetes 上的 SCONE 機密 PySpark,VM 包含您可以在本機 minikube 叢集中重現的相同示範。 如需詳細資訊,請參閱官方檔: SCONE PySpark 虛擬機

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主體作者:

其他參與者:

若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。

下一步