当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
作者 | 賈之光(甲卓) 阿里巴巴高級開發工程師,專注于 Kubernetes 安全沙箱和機密計算領域,主要參與 Incalvare Containers 社區開發。
8 月 26 日,我們發起了第 6 期 SIG Cloud-Provider-Alibaba 網研會直播。本次直播主要介紹了機密計算的概況, InclavareContainers 開源項目架構、已支持的功能和迭代計劃,以及阿里云 ACK-TEE 的發展現狀和規劃。
本文匯集了此次直播完整視頻回顧及資料下載,并整理了直播過程中收集的問題和解答,希望能夠對大家有所幫助~阿里巴巴云原生公眾號后臺回復“826”即可下載相關 PPT。
直播視頻回顧鏈接:https://v.qq.com/x/page/z3143a6agsg.html
機密計算簡介
1. 應用容器安全現狀
Portworx and Aqua Security 發布的《2019 容器接受度調研》報告顯示,安全性成為了用戶使用容器技術和業務上云面臨的最大挑戰,其中數據安全問題最為突出;根據 Risk Based Security 發布的數據泄露報告顯示,2019 年數據泄露事件發生的數量和泄露的數據量與 2018 年相比均增加了 50%+。
2. 機密計算時代到來
數據在整個生命周期有三種狀態:At-Rest(靜態)、In-Transit(傳輸中)和 In-Use(使用中)。
-
At-Rest 狀態下,一般會把數據存放在硬盤、閃存或其他的存儲設備中。保護 At-Rest 狀態的數據有很多方法,比如對文件加密后再存放或者對存儲設備加密;
-
In-Transit 是指通過公網或私網把數據從一個地方傳輸到其他地方,用戶可以在傳輸之前對文件加密或者采用安全的傳輸協議保證數據在傳輸中的安全,比如 HTTPS, SSL, TLS, FTPS 等;
-
然而 In-Use 狀態的數據很長時間內都沒有很好的保護的方法,直到機密計算的出現。
機密計算聯盟給機密計算的定義是:機密計算是在一個基于硬件的**可信執行環境(TEE)**中保護數據執行計算。
機密計算的核心功能有:
- 保護 In-Use 數據的機密性:內存中的數據是被加密的,即便被攻擊者竊取到內存數據也不會泄露數據;
- 保護 In-Use 數據的完整性:度量值保證了數據和代碼的完整性,使用中有任何數據或代碼的改動都會引起度量值的變化;
- 保護 In-Use 數據的安全性:相比普通應用,機密計算應用有更小的 TCB(Trusted Compute Base),意味著更小的攻擊面,也意味著更安全。,以 Intel SGX 為例,除了 CPU 和可信應用自身以外,其他軟硬件的訪問都是被拒絕的,包括操作系統、Hypervisor 等。
在 2019 年 Gartner 的《計算基礎設施成熟度曲線》中把機密計算也列入其中,雖然還處在早起階段,這也說明機密計算開始逐步進入大家的視野并得到重視。
在 2020 年 Gartner的《云廠商本地安全解決方案比較》中,阿里云在 Trusted execution enviorments 中拿到一個 H,是因為 2020 年年初阿里云容器服務發布了機密計算產品 ACK-TEE,更多參考鏈接。
3. 機密計算業務場景
機密計算旨在保護敏感的代碼和數據。業務場景有:區塊鏈、秘鑰管理、金融、AI、多方計算、數據租賃、邊緣計算等。
以多方計算為例,不同用戶或廠商之間相互共享數據以便計算挖掘出更大的數據經濟價值,但不想把自己的數據泄露給對方。機密計算可以保護共享數據運行在受硬件保護的可信執行環境中,數據在內存中是加密的,從而保證數據不會被泄露。
4. 安全容器與機密計算的區別
除了機密計算外,還有一個與安全相關的概念-安全容器。阿里云在安全容器和機密計算領域都有布局,雖然二者都與安全相關,但它們的定位和應用場景是不同的。
安全容器的定位是隔離,把惡意應用隔離起來,防止它出去對其他應用搞破壞。主要的應用場景有三類:
- 不可信負載隔離
- 多租戶應用隔離
- 性能和故障隔離
機密計算的定位是保護,保護應用不會被其他惡意應用進來竊取數據和搞破壞。應用場景是保護敏感代碼和數據。
5. TEE 硬件平臺
支持 TEE 的硬件平臺主要有 3 個:Intel SGX、ARM TrustZone 和 AMD SEV,它們有不同的應用場景和實現方式:
- ARM TrustZone 把硬件資源分為安全世界和非安全世界兩部分,所有需要保密的操作在安全世界執行,其余操作在非安全世界執行,安全世界和非安全世界通過一個名為 Monitor Mode 的模式進行轉換。典型的應用場景有移動支付、數字錢包等;
- AMD 利用 SEV(AMD Secure Encrypted Virtualizationn),SME(AMD Secure Memory Encryption)和SEV-ES(Secure Encrypted Virtualization-Encrypted State)等技術實現虛擬機的 Guest 內存加密和安全隔離;
- Intel SGX 是 Intel 提供的一組指令,用于提高應用的代碼和數據的安全性,用戶可以把敏感數據放入到 Encalve 中,Enclave 是一種受保護的可信執行環境。
阿里云 ACK-TEE 和開源項目 Inclavare Containers 都是基于 Intel SGX 實現的機密計算。
6. Intel SGX 有更小的 TCB(Trusted Computing Base)
按照普通方式部署敏感應用,應用會依賴操作系統、VMM、硬件甚至是云廠商,TCB 非常大,面臨的攻擊面也非常大。只要 TCB 中只要有一處遭到攻擊,應用都有數據泄露和破壞的風險。
而把敏感應用部署在 Intel SGX 的 TEE 中,TCB 只有 CPU 和 TEE 本身。一方面攻擊面變得很小,另一方面 TEE 的安全機制也會使應用更安全。
7. 基于 Intel SGX 的可信應用開發和使用流程
Intel SGX 把應用分成了可信區和不可信區。用戶可通過在 EDL(Enclave Definition Language)中定義可信區和不可信區以及用到的函數。這些函數用戶可信區和不可信區之間的通信,分為 ECALL 和 OCALL。ECALL 用于不可信區訪問可信區的數據,OCALL 用于可信區訪問不可信區的數據。
基于 Intel SGX 的可信應用開發和使用流程如下:
- 申請秘鑰:向 Intel 申請 SGX 相關的商業簽名加密密鑰;
- 安裝環境:
- 安裝 Intel SGX 驅動
- 安裝 SGX SDK 和 PSW
- 安裝 AESM 服務
- 開發應用:
- 明確應用可信區中須保護的代碼和數據;
- 編寫 EDL 文件,明確 ECALL 和 OCALL 函數;
- 編寫可信區代碼和非可信區代碼;
- 編譯構建
- 使用 sgx_edger8r 基于 edl 文件生產用于 ECALL 的不可信區的代理函數和用于 OCALL 的可信代理函數;
- 編譯 Enclave動態鏈接庫文件;
- 簽名上一步驟的 Enclave 動態鏈接庫文件;
- 編譯應用,打包鏡像。
- 用 Docker 運行容器
Inclavare Containers 保護敏感應用和數據
1. Inclavare Containers 的目標和價值
Inclavare,是 Enclave 一詞的拉丁語詞源,讀音是 [?inklɑve?]。Enclave 指的是一種受保護的執行環境,能為其中的敏感和機密數據提供基于密鑰學算法的強安全隔離,阻止不可信的實體訪問用戶的數字資產。
Inclavare Containers 是由阿里云操作系統安全團隊和阿里云云原生容器服務團隊主導,并聯合了阿里經濟體內多個研發團隊(螞蟻安全計算團隊、云安全團隊、語言 runtime 團隊等)共同研發的面向機密計算場景的開源容器運行時技術棧。
當前機密計算在云原生場景中提供的技術,有很多缺陷和不足:
- 使用和開發成本都比較高;
- 容器化和對接 Kubernetes 的成本和復雜度高;
- 服務提供商提供的技術解決方案也相對單一
由于以上原因,非常不利用機密計算技術的普及和應用。而 Inclavare Containers 目的就是為業界提供一款面向機密計算領域的開源容器運行時引擎和安全架構,其價值在于:
- 抹平機密計算的高使用門檻,為用戶提供與普通容器一致的使用體感;
- 基于處理器提供的多種硬件安全技術,為用戶的工作負載提供多種不同的 Enclave 形態,在安全和成本之間提供更多的選擇和靈活性。
2. Inclavare Containers 架構
在介紹 Inclavare Containers 架構之前,先介紹一下架構中各個組件的作用:
- kubelet:Kubernetes 集群中每個 Node 節點上運行的主要“節點代理”,負責與 Apiserver 的通信和管理節點上 Pod;
- Containerd:一個工業級標準的容器運行時,它強調簡單性、健壯性和可移植性,Containerd 可以在宿主機中管理完整的容器生命周期:容器鏡像的傳輸和存儲、容器的執行和管理、存儲和網絡等;
- shim-rune:為容器運行時 rune 提供的 shim,主要負責管理容器的生命周期、把普通鏡像轉換成 TEE 鏡像;
- rune:rune 是一個命令行工具,用于根據 OCI 規范在容器中生成和運行 Enclave。 rune 是在 runc 代碼基礎上開發的,既可以運行普通 runc 容器也可以運行 Enclave 容器;
- SGX LibOS:SGX LibOS 是為了讓普通應用在不做或做很少更改的情況下,就能夠在 Intel SGX 上運行起來。目前 Inclavare Containers 支持的 LibOS 有 Occlum,Graphene-SGX 正在對接中;
- 語言 Runtime:LibOS 對多語言的支持,比如 Occlum 中提供了 Golang 和 JDK 語言運行時;
- PAL-API:rune 和 LibOS 之間通信的接口。比如 pal_init 用于初始化 Enclave,pal_create_process 用于創建 Encalve。
- liberpal.so:是實現了 PAL-API 的 Linux 動態庫,主要負責 rune 和 LibOS 的通信。
Inclavare Containers 的工作流程如下:
總結下來,Inclavare Containers 的特點有:
- 將 IntelSGX 與容器生態結合,兼容 OCIRuntime 和 OCI 鏡像標準,實現 Enclave 容器形態;
- 與 Kubernetes 生態無縫整合;
- 基于 LibraryOS 技術,改善 IntelSGX 引入的約束條件所帶來的兼容性問題;
- 提供對高級語言 Runtime 的支持,進一步提升兼容性;
- 定義通用的 EnclaveRuntimePALAPI 規范,構建 EnclaveRuntime 生態。
3. shim-rune 工作流程
shim-rune 包含兩部分 Core 和 Carrier,它們的作用分別是:
- 管理容器生命周期
- 利用 LibOS 把普通容器轉換為 TEE 鏡像
shim-rune 的工作流程為:
4. 客戶端簽名與服務端簽名
Inclavare Containers 支持客戶端簽名和服務端簽名兩種工作方式,兩種工作方式的差異如下:
相比客戶端簽名,服務端簽名優點如下:
- 降低了開發者使用門檻,開發者不需要掌握 Intel SGX 的技術,按照 LibOS 要求構建出普通鏡像即可;
注意:每種 LibOS 對普通鏡像也有一定要求,比如 Occlum 只支持 musl libc 而不支持 glibc,所以 glibc 應用需要改造為 musl libc 應用之后才能在 Inclavare Containers 中運行起來。
- 用戶不需要自己向 Intel 申請商業證書;
- 可運行在 Kubernetes 集群中。
5. 多團隊共建合作
Inclavare Containers 項目是由多個團隊共建合作而成的,各組件作用和團隊分工如下:
- Occlum:由螞蟻安全計算團隊自研的基于 Intel SGX 技術并實現了內存安全的多進程 Library OS
- Graphene-SGX:基于 IntelSGX 技術并可以運行未經修改程序的開源 library OS
- Dragonwell:由阿里編譯器團隊定制的 LTS OpenJDK 發行版本
- sgx-device-plugin:由阿里云容器服務團隊和螞蟻安全計算團隊針對 IntelSGX 聯合開發的 Kubernetes Device Plugin
- AliyunLinux:由阿里 BaseOS 團隊對 Inclavare Containers 提供全棧適配 aliyun linux 的支持
6. Inclavare Containers 開源項目
Inclavare Containers 是業界首個面向云原生的機密計算場景下的開源容器運行時技術棧,被阿里巴巴開源委員會評為重點開源項目。并且已經加入到官方機密計算 OCIRuntime 參考實現列表。
目前支持的功能有:
- 支持通過 K8s 和 Docker 啟動 Enclave 容器
- 支持 Occlum 和 Graphene 兩個主流 LibOS
- 支持 Java 和 Golang 語言 Runtime
該項目每個月月底進行一次發布,面向社區提供 CentOS 和 Ubuntu 的 binary release,并對內提供 AliyunLinux 發行版本。
7. Inclavare Containers 里程碑
8. 2020 年機密計算技術業產業
ACK-TEE
1. 簡介
ACK-TEE 于 2019 年 9 月立項
功能:
- 對數字資產(算法、數據、代碼)有強安全訴求的云用戶提供基于硬件加密技術的可信執行環境(TEE)
- 降低機密計算技術的應用門檻
- 簡化可信/機密應用的開發、交付和管理成本。
合作團隊:阿里云容器服務團隊、操作系統內核團隊、云安全團隊、螞蟻安全團隊和運行時語言團隊
定位:云原生機密計算容器平臺
使命:讓天下沒有難用的機密計算
產品原則:可信安全、易開發交付、標準開放、云原生
2. ACK-TEE 1.0
ACK-TEE 1.0 于 2020 年 1 月份上線
目標用戶群體:原生 SGX 用戶
全新 K8s 托管集群形態:機密計算專用集群,支持 Intel SGX1。
復用 Managed K8s 已有能力,包括各種云產品集成,K8s 集群運維能力,降低 K8s 集群的運維復雜度;
支持 EPC 加密內存的管理和調度,降低用戶使用 SGX 設備的復雜度。
3. ACK-TEE 2.0
ACK-TEE2.0 計劃在 2020 下半年上線
功能:支持原生應用在 TEE 中運行起來
目標用戶:沒有掌握機密計算技術但有數據安全需求的用戶
方案
- 把普通鏡像轉換成 TEE 鏡像后運行在 TEE 中;
- 通過 controller 提供安全可信的服務組件,如 KMS-Enclave-Plugin 等。
Q & A
**Q1:**這個依賴于 Intel 的芯片?為啥還需要單獨找 Intel 申請密鑰?
**A1:**Intel 芯片能保證應用執行在基于硬件的 Enclave (一種可信執行環境)中,保證應用的安全,但不能保證創建者一定是合法的。而在構建 Enclave 時我們會用 Intel 的秘鑰對其簽名,保證使用者是合法的。
**Q2:**Inclavare Containers 本質上是一個容器運行時實現嗎?它能完全替代 Docker 容器運行時的場景嗎?
**A2:**Inclavare Containers 是一個軟件棧,它包含了 rune、shim-rune、runelet 等多個工具。其中 rune 是一個容器運行時,它是在 runc 代碼基礎上開發的。既可以運行普通 runc 容器,也可以跑有 Enclave 的容器。功能上說,可以替代 Docker 容器運行(runc)時,但最大的意義在于運行 Enclave 容器,保證代碼和數據的安全。
**Q3:**應用的性能有多少影響,有做過類似的測試嗎?
**A3:**Inclavare Containers 的重點是解決數據安全問題的。底層是基于 Intel SGX 的技術,目前 Intel SGX1 的 ECP 只有 128 MB 內存,相比原生容器應用的性能肯定會差很多。
**Q4:**所以理解下來,只把它用在最核心的需要 in-use 加密的地方,對嗎?
**A4:**是的,保護 In-Use 代碼和數據的安全是機密計算的最大價值。
**Q5:**ACK 現在有這個使用方法和 sample 嗎?
**A5:**ACK?里有托管版“加密計算”,即分享里講到的 ACK-TEE 1.0。但面向客戶是?SGX 原生客戶,需要客戶自己基于 SGX 做應用改造和構造鏡像。ACK-TEE?2.0 還在規劃中,計劃年底上線,會把 Inclavare Containers 的能力移植過來。我理解你是想要 ACK-TEE 2.0 的 sample 是嗎?如果有興趣,你可以按照 Inclavare Containers 0.3.0 的文檔,搭建一個支持機密計算的 Kubernetes 集群。
關注阿里巴巴云原生公眾號,后臺回復?“826”?即可下載 PPT!
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的公眾號。”
總結
以上是生活随笔為你收集整理的当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一种简单快捷的 java 热部署方式
- 下一篇: 进击的 Spring Cloud Ali