使用Istio服務(wù)網(wǎng)格為微服務(wù)啟用零信任網(wǎng)絡(luò)
譯文譯者 | 李睿
審校 | 重樓
51CTO讀者成長計劃社群招募,咨詢小助手(微信號:CTOjishuzhan)
在構(gòu)建單片應(yīng)用程序時,安全性主要是基于外圍的。這意味著使用防火墻保護(hù)網(wǎng)絡(luò)邊界和訪問控制。隨著微服務(wù)架構(gòu)的出現(xiàn),靜態(tài)和基于網(wǎng)絡(luò)的邊界不再有效。
如今,應(yīng)用程序是由Kubernetes等容器編排系統(tǒng)部署和管理的,這些系統(tǒng)分布在整個云平臺中。零信任網(wǎng)絡(luò)(ZTN)是跨基于云計算的網(wǎng)絡(luò)保護(hù)數(shù)據(jù)的一種不同方法。本文將探討Istio如何利用零信任網(wǎng)絡(luò)(ZTN)理念幫助保護(hù)微服務(wù)。
一、什么是零信任網(wǎng)絡(luò)(ZTN)?
零信任網(wǎng)絡(luò)(ZTN)是一種不向用戶、設(shè)備和服務(wù)授予隱式信任的安全范式,并持續(xù)驗證其身份和訪問資源的授權(quán)。
在微服務(wù)架構(gòu)中,如果一個服務(wù)(服務(wù)器)接收到來自另一個服務(wù)(客戶端)的請求,服務(wù)器不應(yīng)該假設(shè)客戶端的可信度。服務(wù)器應(yīng)該首先連續(xù)地對客戶端進(jìn)行身份驗證和授權(quán),然后允許安全地進(jìn)行通信(參見圖A)。
圖A:零信任網(wǎng)絡(luò)(ZTN)環(huán)境,在多云的微服務(wù)之間強制執(zhí)行連續(xù)身份驗證和授權(quán)
二、為什么零信任網(wǎng)絡(luò)環(huán)境對于微服務(wù)來說是不可避免的?
在分布式服務(wù)網(wǎng)絡(luò)中保護(hù)網(wǎng)絡(luò)和數(shù)據(jù)的重要性再怎么強調(diào)也不為過。以下是面臨的一些挑戰(zhàn),指出了微服務(wù)需要零信任網(wǎng)絡(luò)(ZTN)環(huán)境的原因:
(1)缺乏網(wǎng)絡(luò)所有權(quán):應(yīng)用程序從基于外圍的移動到具有微服務(wù)的多個云平臺和數(shù)據(jù)中心。因此,網(wǎng)絡(luò)也變得分散,為網(wǎng)絡(luò)入侵者提供了更多的攻擊面。
(2)網(wǎng)絡(luò)和安全漏洞增加:自從應(yīng)用程序遷移到公共云以來,云計算提供商之間的數(shù)據(jù)和安全漏洞越來越普遍。2022年,近一半的數(shù)據(jù)泄露事件發(fā)生在云端。
(3)管理多集群網(wǎng)絡(luò)策略已經(jīng)變得乏味:企業(yè)在多個Kubernetes集群和環(huán)境中部署數(shù)百個服務(wù)。網(wǎng)絡(luò)策略是集群的本地策略,通常不適用于多個集群。他們需要大量的定制和開發(fā)來定義和實現(xiàn)多集群和多云流量中的安全性和路由策略。因此,為每個服務(wù)配置和管理一致的網(wǎng)絡(luò)策略和防火墻規(guī)則成為一個持久而令人沮喪的過程。
(4)在Kubernetes中,服務(wù)到服務(wù)的連接本質(zhì)上并不安全:在默認(rèn)情況下,一個服務(wù)可以與集群內(nèi)的另一個服務(wù)通信。因此,如果一個服務(wù)pod被黑客攻擊,網(wǎng)絡(luò)攻擊者可以快速輕松地攻擊該集群中的其他服務(wù)(也稱為向量攻擊)。Kubernetes不為pod或服務(wù)之間的通信提供開箱即用的加密或身份驗證。盡管Kubernetes提供了額外的安全特性,例如啟用mTLS,但這是一個復(fù)雜的過程,必須為每個服務(wù)手動實現(xiàn)。
(5)缺乏對網(wǎng)絡(luò)流量的可見性:如果存在安全漏洞,運維和SRE團隊?wèi)?yīng)該能夠更快地對事件做出反應(yīng)。跨環(huán)境的網(wǎng)絡(luò)流量實時可見性差成為SRE團隊及時診斷問題的瓶頸。這阻礙了他們的事件響應(yīng)能力,從而導(dǎo)致較高的平均恢復(fù)時間(MTTR)和災(zāi)難性的安全風(fēng)險。
從理論上來說,零信任網(wǎng)絡(luò)(ZTN)理念解決了上述所有挑戰(zhàn)。在實踐中,Istio服務(wù)網(wǎng)格可以幫助運維團隊和SRE團隊實現(xiàn)跨云的零信任網(wǎng)絡(luò)(ZTN)和安全微服務(wù)。
三、Istio服務(wù)網(wǎng)格如何為微服務(wù)啟用零信任網(wǎng)絡(luò)(ZTN)
Istio是一款流行的開源服務(wù)網(wǎng)格實現(xiàn)軟件,它提供了一種管理和保護(hù)微服務(wù)之間通信的方法。Istio將網(wǎng)絡(luò)抽象為一個專用的基礎(chǔ)設(shè)施層,并提供對微服務(wù)之間所有通信的可見性和控制。
Istio的工作方式是在網(wǎng)格中的每個服務(wù)旁邊注入一個Envoy代理(一個小型Sidecar守護(hù)進(jìn)程)(參見圖B)。Envoy是一個L4和L7代理,分別有助于確保微服務(wù)之間的安全連接和網(wǎng)絡(luò)連接。Istio控制平臺允許用戶管理所有這些Envoy代理,例如直接定義、級聯(lián)安全和網(wǎng)絡(luò)策略。
圖B:Istio使用Envoy代理來確保集群和云平臺之間的服務(wù)連接
Istio簡化了跨云平臺為微服務(wù)實施零信任網(wǎng)絡(luò)(ZTN)環(huán)境的過程。受到Gartner公司的零信任網(wǎng)絡(luò)訪問的啟發(fā),概述了可以使用Istio實現(xiàn)零信任網(wǎng)絡(luò)的四個支柱。
Istio服務(wù)網(wǎng)格實現(xiàn)零信任網(wǎng)絡(luò)的四大支柱
1.使用Istio強制身份驗證
安全團隊需要為每個服務(wù)創(chuàng)建身份驗證邏輯,以驗證發(fā)送請求的用戶(人或機器)的身份。這個過程對于確保用戶的可信度是必要的。
在Istio中,它可以通過使用Peer Authentication和Request Authentication自定義資源(CRD)配置對等和請求認(rèn)證策略來實現(xiàn):
(1)對等身份驗證策略涉及使用mTLS對服務(wù)到服務(wù)通信進(jìn)行身份驗證。也就是說,為客戶端和服務(wù)器頒發(fā)證書以驗證彼此的身份。
下面是一個PeerAuthentication資源示例,它對foo命名空間中的所有工作負(fù)載強制嚴(yán)格的mTLS身份驗證:
YAML
1 apiVersion: security.istio.io/v1beta1
2 kind: PeerAuthentication
3 metadata:
4 name: default
5 namespace: foo
6 spec:
7 mtls:
8 mode: STRICT
(2)請求身份驗證策略涉及服務(wù)器確保是否允許客戶端發(fā)出請求。在這里,客戶端將把JWT (JSON Web Token)附加到服務(wù)器端身份驗證請求。
下面是在foo命名空間中創(chuàng)建的RequestAuthentication策略示例。它指定對my-app服務(wù)的傳入請求必須包含JWT,該JWT由jwtRules中提到的實體使用公鑰進(jìn)行發(fā)布和驗證。
YAML
1 apiVersion: security.istio.io/v1beta1
2 kind: RequestAuthentication
3 metadata:
4 name: jwt-example
5 namespace: foo
6 spec:
7 selector:
8 matchLabels:
9 app: my-app
10 jwtRules:
11- issuer: "https://issuer.example.com"
12 jwksUri: "https://issuer.example.com/keys"
這兩個身份驗證策略都存儲在Istio配置存儲中。
2.使用Istio實現(xiàn)授權(quán)
授權(quán)是驗證是否允許通過身份驗證的用戶訪問服務(wù)器(訪問控制)并執(zhí)行特定的操作。持續(xù)授權(quán)可以防止惡意用戶訪問業(yè)務(wù),從而確保其安全性和完整性。
Authorization Policy是另一個Istio CRD,它為部署在網(wǎng)格中的服務(wù)提供訪問控制。它有助于創(chuàng)建拒絕、允許策略,并針對入站請求執(zhí)行自定義操作。Istio允許設(shè)置具有不同操作的多個策略,以實現(xiàn)對工作負(fù)載的細(xì)粒度訪問控制。
以下Authorization Policy拒絕從dev命名空間中的工作負(fù)載到foo命名空間中工作負(fù)載的POST請求。
YAML
1 apiVersion: security.istio.io/v1beta1
2 kind: AuthorizationPolicy
3 metadata:
4 name: httpbin
5 namespace: foo
6 spec:
7 action: DENY
8 rules:
9 - from:
10 - source:
11 namespaces: ["dev"]
12 to:
13 - operation:
14 methods: ["POST"]
3.Istio的多集群和多云可見性
零信任網(wǎng)絡(luò)(ZTN)的另一個重要支柱是網(wǎng)絡(luò)和服務(wù)可見性。SRE團隊和運維團隊需要實時監(jiān)控跨云平臺和集群邊界的微服務(wù)之間的流量。深入了解網(wǎng)絡(luò)將有助于SRE團隊快速識別異常的根本原因,制定解決方案并恢復(fù)應(yīng)用程序。
Istio通過從數(shù)據(jù)和控制平臺的網(wǎng)格中收集以下遙測數(shù)據(jù),提供對通信流和應(yīng)用程序運行狀況的可見性。
(1)日志:Istio收集各種日志,例如服務(wù)日志、API日志、訪問日志、網(wǎng)關(guān)日志等,這將有助于理解應(yīng)用程序的行為。日志還有助于更快地排除故障和診斷網(wǎng)絡(luò)事件。
(2)指標(biāo):它們有助于了解服務(wù)的實時性能,以識別異常并在運行時對其進(jìn)行微調(diào)。Istio除了4個黃金指標(biāo)(錯誤率、流量、延遲和飽和度)之外,還提供了許多指標(biāo)。
(3)分布式跟蹤:它是在網(wǎng)格中對流經(jīng)多個服務(wù)的請求進(jìn)行跟蹤和可視化。分布式跟蹤有助于理解微服務(wù)之間的交互,并提供網(wǎng)格中服務(wù)到服務(wù)通信的整體視圖。
4.使用Istio進(jìn)行網(wǎng)絡(luò)審計
審計是分析一個過程在一段時間內(nèi)的日志,其目的是優(yōu)化整個過程。審計日志為審計人員提供了對網(wǎng)絡(luò)活動的有價值的見解,包括每次訪問的詳細(xì)信息、使用的方法、流量模式等。這些信息對于理解數(shù)據(jù)中心和公共云內(nèi)外的通信過程非常有用。
Istio提供了關(guān)于誰訪問(或請求)、何時訪問以及訪問什么資源的信息,這對于審計人員調(diào)查錯誤情況非常重要。審計人員需要這些信息來建議改進(jìn)網(wǎng)絡(luò)整體性能和云原生應(yīng)用程序安全性的步驟。
四、部署Istio以獲得更好的安全態(tài)勢
在微服務(wù)架構(gòu)中,保護(hù)網(wǎng)絡(luò)和數(shù)據(jù)的挑戰(zhàn)將變得越來越復(fù)雜。網(wǎng)絡(luò)攻擊者總是在SRE團隊中的任何人有時間注意到漏洞之前搶先發(fā)現(xiàn)并利用它們。
實現(xiàn)零信任網(wǎng)絡(luò)將提供可見性和保護(hù)Kubernetes集群免受內(nèi)部或外部威脅。Istio服務(wù)網(wǎng)格可以通過開箱即用實現(xiàn)零信任的能力,從前端引領(lǐng)這項工作。
原文鏈接:https://dzone.com/articles/zero-trust-network-for-microservices-with-istio-1