在 Kubernetes 中,Secret 顯得尤爲重要。由於它是 K8s 中存儲全部敏感信息的對象。據悉,這些敏感信息包含密碼、集羣的證書、OAuth token、ssh key 以及其餘用戶自定義的敏感文件等。所以,一旦 K8s 中 Secret 出現安全問題,後果將很是嚴重。此外,雖然社區提供了必定的安全防禦方案,可是依然存在諸多問題。java
K8s Secret 面臨着哪些安全問題?這些安全問題會帶來什麼影響?社區提供的解決方案存在哪些不足?......針對這些問題,InfoQ 記者採訪了螞蟻集團高級工程師秦凱倫,他專一於可信計算、系統安全和虛擬化等領域,對 K8s Secret 有着深刻的研究和探索。安全
根據 Kubernetes 文檔,Secret 是 K8s 中存儲全部敏感信息的對象。事實上,若是敏感信息直接存放於 K8s 的 Pod spec 或鏡像中,不只管控困難,並且存在較大的安全隱患。所以,K8s 經過建立、管理、應用 Secret 對象,能夠更好地控制敏感信息的用途,並下降其意外暴露的風險。運維
秦凱倫稱,雖然引入 K8s Secret 對象,這在必定程度上下降了意外泄露的風險(更多地是經過集中式的管理),可是 K8s Secret 對象自身的安全性,「社區默認方案中仍存在許多安全問題」。ssh
通常來講,K8s 中,Secret 數據以純文本的方式存儲在 etcd 中,默認只有 base64 編碼,未經加密。同時,共享該文件或將其檢入代碼庫,密碼容易泄露。分佈式
針對此問題,K8s 社區提供了基於 KMS 的 K8s Secret 加密方案,谷歌雲、AWS 和 Azure 均支持該方案。他說,「這雖然解決了 etcd 中 Secret 明文存儲問題,但依然有一些問題。」ide
密鑰一旦泄露,將致使全部數據的泄露,從而引發用戶對整個系統的信任崩潰。「爲此,社區和一些公司嘗試爲該方案中的 Plugin 加上基於硬件的安全保護,從而提高攻擊難度。但對某些特定用戶來講,保護的覆蓋面和程度依然不夠」。性能
實際上,咱們能夠從 K8s Secret 的整個生命週期來看:編碼
在秦凱倫看來,理想中,對 K8s 中 Secret 的保護程度應該考慮其整個生命週期的安全、可信,作到端到端的安全防禦。加密
爲此,他們基於 TEE 技術,將 K8s Secret 整個生命週期和端到端使用過程當中的關鍵組件、步驟保護起來。總體方案大體以下:spa
秦凱倫向 InfoQ 記者指出,「這種方案是基於 TEE 的端到端 K8s Secret 保護,還引入 LibOS 技術,實現 TEE 保護對用戶、開發者和運維團隊徹底透明。」
據悉,KMS Plugin 和 TEE-based KMS Plugin 沒有標準和開源的社區實現,所以他們設計並開發了本身的 KMS Plugin,並在灰度發佈、應急處理、監控管理等方面進行了生產加強。「在與 TEE 結合的過程當中,咱們爲了應對 SGX 機型存在的性能問題,提供了 standalone 和服務化 KMS Plugin 兩套方案」。
一樣,TEE-based kubectl 也沒有標準和開源的社區實現,他說:「咱們基於 kubeproxy 開發了本身的安全 kubectl,實現了 kubeconfig 對用戶透明、與用戶身份綁定、不落盤並採用TEE保護內存安全等設計目標。」
此外,考慮到 TEE 保護的易用性、可靠性、可擴展性和可維護性等,他們在評估多套方案後,引入了由螞蟻開源的 Occlum LibOS,屏蔽了 TEE 對用戶、開發者和運維團隊的影響,大大下降了 TEE 開發的門檻和成本。
在秦凱倫看來,K8s 做爲螞蟻大規模容器集羣的管控根基,應用基於 TEE 的端到端 K8s Secret 保護防禦方案,加強了其自身安全和可信,提高了螞蟻核心管控平面的安全水位,「這對於金融場景下高標準的數據安全和隱私保護來講不可或缺」。