王兆熠 于千慧 袁迎迎 魏星



摘要:云計算和微服務已經(jīng)成為廣大開發(fā)者和運維人員的首選部署方案。它們具有更高的資源利用率、應用間更低的耦合性和更靈活的架構設計等優(yōu)點,為人們提供了更多的選擇。雖然云計算和微服務降低了復雜系統(tǒng)的開發(fā)和運維難度,但隨著服務和功能模塊的增加,對于外部和模塊間訪問的控制難度也越來越大。為了以更加簡單方便的方式進行微服務的訪問控制,本文采用以文獻調(diào)查為輔、實踐為主的方法,基于Istio服務網(wǎng)格進行微服務的訪問控制的研究與探索。通過實踐,本文發(fā)現(xiàn)借助Istio的安全能力,開發(fā)和運維人員可以通過在Kubernetes中編寫和下發(fā)配置文件來方便地開啟或?qū)χ付ǚ张渲酶毩6鹊脑L問控制。新一代服務網(wǎng)格Istio提供了更方便、快捷和安全的信息安全把控和審計能力。
關鍵字:云計算;服務網(wǎng)格;Istio;訪問控制;Kubernetes
一、引言
(一)研究目的
軟件業(yè)務系統(tǒng)的不斷壯大,其所涉及的業(yè)務功能模塊和中間件也越來越多,這也導致了模塊的開發(fā)難度逐步增大,模塊間調(diào)用邏輯越發(fā)復雜。單體式架構早已不能滿足當今需求,其拓展性低、耦合度高、運維難的缺點深受詬病。云計算和微服務的到來給了這一問題全新的解決思路,企業(yè)可以通過業(yè)務分解,將負責模塊間通信的部分抽離出來,讓研發(fā)人員專注于業(yè)務邏輯的研發(fā),而不用過多地關注其他的因素。然而,越來越多的服務數(shù)量也為服務間或外部訪問的控制帶來了難度。本文的目標是探索訪問控制在服務網(wǎng)格(Istio)中的實踐方式和技術細節(jié)。
(二)研究背景與文獻綜述
Peter博士在2005年的一次云計算會議上首次使用了微服務這個術語。微服務誕生于一次架構師大會,被用于描述許多架構師正在嘗試的新型的架構風格之一。Netflix和亞馬遜是微服務的早期先驅(qū)者之一[1]。
微服務的架構風格是從小型、獨立的應用程序中開發(fā)出復雜的應用軟件,這些應用程序使用獨立于語言的接口(API)相互通信。如果公司無法優(yōu)化長期以來形成的單體架構,那么業(yè)務架構將難以升級或維護,變得過于復雜。國內(nèi)學者對于云計算和微服務的研究較為深入。張玉超[2]在他的研究中表示,云計算具有規(guī)模大、資源利用高效、通用性強和成本低的特點,這非常契合微服務所需要的基礎特性。借助云計算,企業(yè)可以以更經(jīng)濟、更高效的方式將應用部署上云。張墨涵[3]等人提到,微服務間每個服務互相獨立,架構靈活,服務職責單一。即便其中某個服務發(fā)生故障,也可以將影響面縮到最小,且有利于資源的伸縮。這非常適合應用在當今的云平臺環(huán)境。國內(nèi)學者同時發(fā)現(xiàn)了微服務訪問控制的重要性。潘孝陽[4]在他的研究中表明,微服務的設計暴露了更大的可攻擊面,服務間的通信更容易成為攻擊的目標。其次,因為服務之間相互信任,所以如果某一個微服務被攻陷,可能會波及整個系統(tǒng)。因此,對微服務的訪問控制進行設計非常重要。何修宇[5]提到,微服務運行環(huán)境差異大又相互影響,傳統(tǒng)的權限控制方法難以適應,且權限管理規(guī)則復雜。業(yè)內(nèi)沒有統(tǒng)一標準的難題也說明了權限控制需要著重研究。
(三)研究方法與研究范圍
本文主要采用了文獻研究法和實驗法兩種方法。通過文獻研究法,本文對研究背景和歷史進行了學習,并對已有的研究成果進行了總結。這樣做可以建立對本次研究的宏觀認知。同時,本文還通過實驗法在服務網(wǎng)格中應用訪問控制,并確定了訪問控制的內(nèi)部邏輯和控制機制等。本文首先對微服務的變革進行了探索,包括其演進模式,每個階段的特性,以及對新一代服務網(wǎng)格Istio的研究。其次,本文對訪問控制的原理和部署進行了實踐,對JWT和Istio的安全策略進行了探索和學習。
二、微服務的變革
(一)微服務的演進
過去,在業(yè)務項目中,快速開發(fā)和上線是最重要的考慮因素,導致對系統(tǒng)后期的發(fā)展、拓展性、健壯性和可用性不夠關注。隨著業(yè)務的發(fā)展,性能和需求滿足不了的問題逐步顯現(xiàn)。對于傳統(tǒng)的單體系統(tǒng)來說,所有模塊之間耦合緊密,功能邊界不清晰,調(diào)用關系錯綜復雜,難以調(diào)整和排查問題。當系統(tǒng)遇到性能瓶頸時,只能通過負載均和多實例部署無法解決問題,無法對模塊進行拆分和縱向擴展。此外,由于高耦合特性,當其中一個小模塊出現(xiàn)問題時,可能會波及整個系統(tǒng),導致整體服務不可用。微服務是基于云原生架構的一種方法,是SOA架構模式的演變。微服務希望開發(fā)人員將龐大的系統(tǒng)劃分為不同的小模塊,解耦功能,并通過輕量級協(xié)議使服務協(xié)同工作。微服務具有以下特性:單一職責、輕量級通信、獨立性、進程隔離、支持混合技術棧、簡化治理、易于維護。
在Phil的文章《Service Mesh》中[6],提出了微服務通信的演變過程。最初,開發(fā)人員希望兩個服務之間可以直接簡單通信,但實際情況非常復雜,網(wǎng)絡可能面臨丟包、錯誤等問題。因此,開發(fā)人員需要單獨處理網(wǎng)絡問題,而不僅僅是業(yè)務邏輯。隨著TCP協(xié)議的出現(xiàn),網(wǎng)絡處理可以下沉,從業(yè)務服務中分離出來,成為系統(tǒng)網(wǎng)絡層的一部分。隨后,諸如Spring Cloud等分布式框架的出現(xiàn),實現(xiàn)了分布式系統(tǒng)所需的各種通用功能,如服務注冊,負載均衡,認證授權等。這些框架在一定程度上封裝了底層邏輯,使開發(fā)人員能夠更快速地開發(fā)健壯的分布式系統(tǒng)。盡管Spring Cloud是一個出色的開發(fā)框架,但仍存在一些問題,如侵入性強、升級成本高、治理功能不完善、開發(fā)門檻高及不支持語言無關性。為解決這些問題,Service Mesh的出現(xiàn)為開發(fā)者帶來了全新的解決方案。作為基礎設施,Service Mesh可以與業(yè)務解耦,以Side Car(邊車)的形式部署,解決復雜環(huán)境下的微服務通信問題。
(二)服務網(wǎng)格
本文主要基于對Istio服務網(wǎng)格的研究。在云原生領域中,Istio和Kubernetes密不可分,因此備受關注。官方對Istio的描述是一個開放平臺,用于連接、加固安全、控制和觀察服務。“連接”代表能夠智能地控制服務之間的調(diào)用流量,實現(xiàn)灰度升級、AB測試和紅黑部署等功能;“加固安全”表示自動為服務之間的調(diào)用提供認證、授權和加密;“控制”保證資源在消費者之間公平分配;“觀察”表示能夠查看服務運行過程中的各種數(shù)據(jù),例如日志、監(jiān)控和tracing,以了解服務的運行情況。
Istio擴展了Kubernetes的能力,利用強大的Envoy服務代理建立了一個可編程的、應用感知的網(wǎng)絡。Istio與Kubernetes協(xié)作,為大規(guī)模的服務部署管理提供了統(tǒng)一、通用的流量管理、遙測和安全方案。
為了提供統(tǒng)一的上層入口,服務網(wǎng)格(Istio)演化出了控制面的概念,如圖1所示。控制面負責和所有的數(shù)據(jù)面(即邊車組成的網(wǎng)絡)進行交互,例如下發(fā)策略,采集監(jiān)控數(shù)據(jù)等。
三、訪問控制
(一)訪問控制的意義
訪問控制是系統(tǒng)安全基礎設施中的一個基本要素。每個網(wǎng)絡安全工程師都希望在不影響工作流程的情況下,應用最小特權原則、零信任原則、職責分離或其他安全方案的原則。訪問控制的主要目的是限制對信息和功能系統(tǒng)的訪問。當訪問控制功能正常工作時,它可以降低信息在沒有正確授權的情況下被非法訪問和數(shù)據(jù)泄露的風險。Algimantas在他的研究中提到[7],訪問控制在確保基于微服務的系統(tǒng)的身份管理和網(wǎng)絡安全方面起著關鍵作用。訪問控制是微服務架構的一個重要功能組件,因為它規(guī)范了對每個微服務內(nèi)部資源的訪問,并幫助維護數(shù)據(jù)的保密性和完整性。微服務中的訪問控制有助于執(zhí)行安全策略,防止對API、數(shù)據(jù)存儲和其他資源的未授權訪問。這確保只有經(jīng)過授權的實體才能訪問敏感信息。此外,訪問控制有助于增強審計功能,可以更方便地記錄誰在什么時間訪問了哪些資源。
(二)JSON Web Token
提到訪問控制,JWT是其中不可或缺的一環(huán)。JWT的全稱為Json Web Token,它是一個用于安全地以JSON的格式傳輸信息的標準(RFC 7519)。JWT是一種基于令牌(Token)的無狀態(tài)認證機制。由于它是一個基于客戶端的無狀態(tài)會話,服務器不必完全依賴數(shù)據(jù)存儲介質(zhì)來保存會話信息。一個正確的JWT通常由三部分組成,分別是頭部(Header)、負載 (Payload)和簽名(Signature)。這三部分之間由英文的句點進行分隔。頭部部分主要聲明了Token的類型和加密所使用的算法。負載部分的信息相對豐富,可以使用鍵值對格式自定義字段,當然,也有一些預留字段用于聲明Token的簽發(fā)者、主體、過期時間等。簽名是其中最重要的部分,它由加密后的頭部和負載計算而來,用于確定Token的信息是否被非法篡改。用戶在訪問目標資源時,需要在請求的頭部中加入”Authorization: Bearer
(三)JSON Web Key
當談及Istio的訪問控制時,JWK同樣是必不可少的一個元素,并且與JWT相輔相成,共同完成了訪問控制的認證和鑒權。JWK全稱是Json Web Key,顧名思義,它是一個密鑰,用于加密JWT。JWK采用鍵值(Key-Value)形式。在JWK中,常見的字段有:Kty(加密算法類型)、Use(密鑰用途)、Sig(簽名)、Alg(密鑰算法)和Kid(密鑰標識)。
(四)訪問控制在Istio中的實現(xiàn)
1.環(huán)境準備
①準備一臺安裝有Linux(Ubuntu或CentOS)系統(tǒng)的電腦或虛擬機;②在設備中安裝好Docker和Kubernetes;③安裝Istio;④在期望的命名空間中安裝Istio的Bookinfo示例;⑤對集群和網(wǎng)格進行調(diào)試,確保Bookinfo相關服務部署后可以正常訪問。
2.訪問控制的實踐
研究實踐的目的是為Productpage服務創(chuàng)建訪問控制規(guī)則,以確保只有攜帶正確Token的請求才能正常訪問Productpage服務。在Istio中啟用訪問控制功能需要兩個組件資源,它們分別稱為訪問控制(RequestAuthentication)和認證策略(AuthorizationPolicy)。在Istio中,認證策略的工作模式如圖2所示,以外部用戶訪問網(wǎng)格內(nèi)的服務為例。
首先,用戶需向認證服務器請求一個JWT。該JWT使用加密密鑰JWK和相關負載信息生產(chǎn)。用戶攜帶JWT請求目標服務時,首先要經(jīng)過服務網(wǎng)格的網(wǎng)關IngressGateway。網(wǎng)關將流量導向目標容器。流量進入該容器時,將被邊車劫持。邊車負責對JWT進行校驗,如果合法有效,則允許訪問通過;否則,訪問將被拒絕。邊車中的相關配置由上文提到的Istio控制面下發(fā)。因此,在相關配置中,需要聲明密鑰信息和token中的信息用于解密和驗證。在某些情況下,也需要通過聲明來決定哪些特定的服務需要開啟訪問控制功能。
在上面兩個配置文件樣例中,配置文件通過selector標簽選擇器進行指定資源的選擇,這個selector和k8s中的selector一致。
在部署時,上述兩個配置文件缺一不可,必須同時存在,訪問控制功能才能被正確地開啟。當然,訪問控制的范圍可以不局限于指定的應用,還可以是k8s中的某個命名空間或者整個k8s集群。下面以RequestAuthentication配置為例。
通過觀察上述配置,可以發(fā)現(xiàn)控制范圍的主要參數(shù)為Selector和Namespace。當存在Selector時,訪問控制的生效范圍被縮小到指定的應用 (或者是容器)上。當Selector不存在,Namespace參數(shù)為Istio-System以外的集群名稱時,生效范圍為指定的命名空間。當Namespace參數(shù)為Istio-System,即Istio的安裝命名空間時,生效范圍為整個集群。部署成功后,用戶需要在請求的Header中攜帶正確的Token來進行訪問。若Token信息錯誤或未攜帶Token,都會提示訪問錯誤。這里使用Curl命令對服務進行訪問測試。
四、結束語
當下越來越多的業(yè)務系統(tǒng)或數(shù)字化解決方案正被部署在現(xiàn)代化的平臺上,例如各大廠商的云平臺。同時,越來越多的開發(fā)者傾向于使用容器化和微服務的方式來構建他們的程序。在過去,諸如負載均衡和路由等基礎能力是與軟件能力融為一體的;然而,現(xiàn)在云平臺將這些能力集成或封裝起來,使開發(fā)者能夠更方便地使用。云計算和微服務的流行降低了復雜業(yè)務場景的開發(fā)和后續(xù)維護難度,但也給外部訪問或服務間訪問的控制和審計帶來了挑戰(zhàn)。
借助Istio服務網(wǎng)格的能力,開發(fā)者可以輕松地接管網(wǎng)格內(nèi)部流量,對微服務進行流量和安全上的統(tǒng)一管控和配置。通過Istio的安全策略配置,開發(fā)者和運維人員可以輕松地基于JWT對訪問進行把控,這是一種更為簡單、有效、安全、可靠的訪問控制體系。
作者單位:王兆熠 于千慧 袁迎迎 魏星 中國聯(lián)合網(wǎng)絡通信有限公司濟南軟件研究院
參考文獻
[1]? Laura Mauersberger. Microservices: What They Are and Why Use Them [EB/OL]. 2017-08-14[2023-06-01]. https://www.leanix.net/en/blog/a-brief-history-of-microservices.
[2] 張玉超.計算機網(wǎng)絡與云計算技術的應用[J].集成電路應用,2023,40(02): 44-46.
[3] 張墨涵,王雪英,沈?qū)W東等. 微服務架構技術與挑戰(zhàn)[J]. 網(wǎng)絡安全技術與應用, 2023(02):3-4.
[4] 潘孝陽,黃曉芳.微服務框架的安全管控機制的設計[J].西南科技大學學報,2018,33(4):71-75.
[5] 何修宇.微服務環(huán)境下訪問控制技術的研究與應用[D].北京郵電大學, 2018.
[6]Phil Calcado. Pattern: Service Mesh [EB/OL]. [2023-06-01]. https://philcalcado.com/2017/08/03/pattern_service_mesh.html.
[7] Algimantas Venckauskas,Donatas Kukta,Sarunas Grigaliunas,Rasa Bruzgien? . Enhancing Microservices Security with Token-Based Access Control Method [EB/OL]. [2023-06-01]. https://doi.org/10.3390/s23063363.
中國聯(lián)合網(wǎng)絡通信有限公司濟南軟件研究院 - 平臺架構項目集 - 應用交付能力項目組。
王兆熠(1998.07-),男,漢族,山東濟南,碩士,初級工程師,研究方向:人工智能與云計算運維研發(fā);
于千慧(2000.04-),女,漢族,山東煙臺,本科,研究方向:云計算運維研發(fā);
袁迎迎(1996.05-),女,漢族,山東濰坊,碩士,初級工程師,研究方向:云計算運維研發(fā);
魏星(1990.08-),男,漢族,山東臨沂,本科,初級工程師,研究方向:云計算運維研發(fā)。