徐浩波,郭寶賢
(國(guó)網(wǎng)電子商務(wù)有限公司,北京 100053)
傳統(tǒng)軟件開(kāi)發(fā)使用瀑布式管理方式,軟件更新迭代速度慢,線上運(yùn)維運(yùn)營(yíng)響應(yīng)緩慢。很多IT 企業(yè)開(kāi)始使用DevOps 的開(kāi)發(fā)模式,DevOps 已逐漸成為主流。通過(guò)自動(dòng)化的方式減少安全漏洞檢測(cè)和響應(yīng)的時(shí)間,降低成本的同時(shí)也提高了信息系統(tǒng)的安全性[1]。國(guó)網(wǎng)建設(shè)基于DevOps 理念的仿真研發(fā)環(huán)境是大勢(shì)所趨。
國(guó)網(wǎng)仿真研發(fā)環(huán)境在信息內(nèi)網(wǎng)由各子公司分散建設(shè),分配獨(dú)立網(wǎng)段。由獨(dú)立通信VPN 通道將各子公司環(huán)境串聯(lián)起來(lái),形成統(tǒng)一管理的研發(fā)仿真環(huán)境?;凇叭龓?kù)六環(huán)境”(“三庫(kù)”代碼庫(kù)、依賴庫(kù)、鏡像庫(kù),“六環(huán)境”研發(fā)測(cè)試環(huán)境、公共服務(wù)環(huán)境、測(cè)試服務(wù)環(huán)境、驗(yàn)證培訓(xùn)環(huán)境、仿真靶場(chǎng)環(huán)境與生產(chǎn)環(huán)境),實(shí)現(xiàn)完整的DevOps 全研發(fā)流程管理,滿足代碼管理、程序依賴管理、程序包管理、項(xiàng)目管理、應(yīng)用測(cè)試、業(yè)務(wù)驗(yàn)證等研發(fā)需求。此方案核心思路是將代碼、構(gòu)建、測(cè)試、部署、項(xiàng)目管理等多環(huán)節(jié)都移到信息內(nèi)網(wǎng)完成,提升研發(fā)效率的同時(shí),同步增強(qiáng)信息安全。
國(guó)網(wǎng)公司內(nèi)越來(lái)越多的項(xiàng)目開(kāi)始偏向移動(dòng)化應(yīng)用,在內(nèi)網(wǎng)開(kāi)發(fā)移動(dòng)應(yīng)用會(huì)面臨以下幾個(gè)難以解決的問(wèn)題。
(1) 研發(fā)依賴組件、插件無(wú)法獲取、無(wú)法更新,部分插件可能不支持離線安裝。
(2) 移動(dòng)應(yīng)用與互聯(lián)網(wǎng)三方服務(wù)有數(shù)據(jù)接口(如支付),在內(nèi)網(wǎng)無(wú)法聯(lián)調(diào)測(cè)試。
(3) 無(wú)法將內(nèi)網(wǎng)程序制品同步至信息外網(wǎng)進(jìn)行自動(dòng)化部署。
Java 依賴庫(kù)是指Java 應(yīng)用在開(kāi)發(fā)過(guò)程中依賴的三方j(luò)ar 包,國(guó)內(nèi)一般使用Nexus 進(jìn)行jar 包管理。Nexus 通過(guò)repository manager 技術(shù),將官方公開(kāi)的jar 依賴同步至本地私服,從而安全獲得三方j(luò)ar 包。軟件鏡像站是指通過(guò)搭建文件服務(wù)器,實(shí)現(xiàn)在特殊網(wǎng)絡(luò)環(huán)境下的三方軟件包中轉(zhuǎn)網(wǎng)站,目前國(guó)內(nèi)比較出名的有清華大學(xué)開(kāi)源軟件鏡像站、網(wǎng)易開(kāi)源軟件鏡像站等。
在實(shí)際開(kāi)發(fā)過(guò)程中,服務(wù)端代碼編譯依賴三方j(luò)ar 包,web 端依賴三方的javascript 類庫(kù),開(kāi)發(fā)常用的開(kāi)源軟件如eclipse,Intellij IDEA 等,都需要接入互聯(lián)網(wǎng)才能獲取。而國(guó)網(wǎng)仿真研發(fā)環(huán)境建設(shè)在信息內(nèi)網(wǎng),無(wú)法與互聯(lián)網(wǎng)通信,所以需要建設(shè)Nexus 倉(cāng)庫(kù)和軟件鏡像站來(lái)解決上述問(wèn)題。Nexus建成后,由維護(hù)人員手工將常見(jiàn)的依賴jar 的庫(kù)離線維護(hù)到3rd party Repositories 倉(cāng)庫(kù),并在外部系統(tǒng)記錄已支持的jar 及版本。之后周期性地按外部系統(tǒng)記錄進(jìn)行內(nèi)網(wǎng)Nexus 倉(cāng)庫(kù)的更新。對(duì)于不常見(jiàn)的依賴jar,可在業(yè)務(wù)部門(mén)發(fā)起申請(qǐng)后,由Nexus 維護(hù)人員進(jìn)行補(bǔ)充添加。軟件鏡像站可由維護(hù)人員直接從互聯(lián)網(wǎng)可信站下載,離線同步至內(nèi)網(wǎng)軟件鏡像站,以上思路可基本滿足研發(fā)終端對(duì)三方依賴和軟件的需求。
類似Intellij IDEA,SourceTree 等需要聯(lián)網(wǎng)激活的軟件,因網(wǎng)絡(luò)限制無(wú)法正常離線激活,所以需要有工具平臺(tái)來(lái)對(duì)此類軟件進(jìn)行替代。專用一站式開(kāi)發(fā)工具平臺(tái)是此問(wèn)題的重要解決思路,它從框架級(jí)減少了開(kāi)發(fā)時(shí)對(duì)三方組件的依賴范圍,并提供一站式的開(kāi)發(fā)服務(wù)。國(guó)網(wǎng)體系內(nèi)可以選擇SGUAP 開(kāi)發(fā)平臺(tái)[2],滿足研發(fā)端的工具需求。
國(guó)網(wǎng)公司仿真研發(fā)環(huán)境全部遷移至內(nèi)網(wǎng)后,測(cè)試環(huán)境和研發(fā)終端由以前的外網(wǎng)變成內(nèi)網(wǎng),開(kāi)發(fā)人員因網(wǎng)絡(luò)限制將無(wú)法與三方數(shù)據(jù)接口進(jìn)行聯(lián)調(diào)測(cè)試。一個(gè)簡(jiǎn)單的解決方案是,開(kāi)發(fā)人員使用互聯(lián)網(wǎng)機(jī)器與三方接口進(jìn)行聯(lián)調(diào),之后把對(duì)應(yīng)的代碼拷貝至內(nèi)網(wǎng)研發(fā)終端。此方法成本小,但是涉及部分代碼和數(shù)據(jù)安全問(wèn)題,并對(duì)信息化系統(tǒng)架構(gòu)要求較高,故不建議使用。
出入站API 的概念由Bilgin Ibryam 在InfoQ提出,為了讓微服務(wù)足以應(yīng)對(duì)未來(lái)的挑戰(zhàn),在設(shè)計(jì)微服務(wù)時(shí)需要加入數(shù)據(jù)流經(jīng)的出入站API,入站API 是當(dāng)今微服的常態(tài),實(shí)現(xiàn)路由配置、負(fù)載均衡、限流熔斷等能力,如zuul,soul 網(wǎng)關(guān)等。但出站API 用到的地方并不多。在國(guó)網(wǎng)仿真研發(fā)環(huán)境場(chǎng)景下,為了讓由內(nèi)至外的方法能夠正常被路由調(diào)用,需要建設(shè)出站API 體系。
技術(shù)選型上因?yàn)閲?guó)網(wǎng)公司的內(nèi)外網(wǎng)物理隔離。所以短期無(wú)法選擇已有的成熟API 框架直接實(shí)現(xiàn)出站方法調(diào)用。一種基于國(guó)網(wǎng)隔離裝置安全的HTTP 服務(wù)網(wǎng)關(guān)實(shí)現(xiàn)方法在2019 年被提出,并于2021 年初被公布實(shí)現(xiàn)(見(jiàn)圖1),它解決了內(nèi)外網(wǎng)應(yīng)用微服務(wù)互相調(diào)用問(wèn)題。強(qiáng)隔離服務(wù)網(wǎng)關(guān)通過(guò)雙向網(wǎng)關(guān)技術(shù),接收客戶端發(fā)起的網(wǎng)絡(luò)請(qǐng)求并進(jìn)行安全檢查和過(guò)濾,將合法請(qǐng)求序列化后寫(xiě)入隔離裝置,由隔離裝置將網(wǎng)絡(luò)請(qǐng)求轉(zhuǎn)發(fā)給具體微服務(wù)提供方,實(shí)現(xiàn)雙向的內(nèi)外網(wǎng)接口交互,這樣就可以完美解決當(dāng)前國(guó)網(wǎng)研發(fā)仿真環(huán)境在內(nèi)網(wǎng)部署不能與互聯(lián)網(wǎng)三方接口交互的問(wèn)題。
圖1 基于國(guó)網(wǎng)隔離裝置安全的HTTP 服務(wù)網(wǎng)關(guān)
國(guó)網(wǎng)仿真研發(fā)環(huán)境方案只對(duì)研發(fā)測(cè)試環(huán)境做了對(duì)應(yīng)規(guī)劃,現(xiàn)有的生產(chǎn)環(huán)境在整個(gè)方案中只提及了自動(dòng)化部署,對(duì)于原有的內(nèi)外網(wǎng)應(yīng)用、純外網(wǎng)應(yīng)用如何部署未做說(shuō)明。使用第3 節(jié)提出的出入口API技術(shù),理論上可以將現(xiàn)有的所有外網(wǎng)部署應(yīng)用全部遷至內(nèi)網(wǎng),外網(wǎng)只部署對(duì)應(yīng)的出入API 網(wǎng)關(guān),此方案無(wú)疑會(huì)大大提升國(guó)網(wǎng)信息化安全水平,但是外網(wǎng)應(yīng)用遷移至內(nèi)網(wǎng),涉及大量技術(shù)架構(gòu)調(diào)整以及運(yùn)維配置工作,短期內(nèi)較難實(shí)現(xiàn)。
在保留現(xiàn)有生產(chǎn)環(huán)境應(yīng)用部署狀態(tài)的前提下,要實(shí)現(xiàn)國(guó)網(wǎng)仿真研發(fā)環(huán)境的生產(chǎn)自動(dòng)化部署,需要解決跨內(nèi)外網(wǎng)的文件同步問(wèn)題。文件安全一般使用安全簽名技術(shù)來(lái)實(shí)現(xiàn)。對(duì)于將要傳輸?shù)奈募紫韧瓿刹《静闅ⅲ缓筮x擇合適的密級(jí)添加技術(shù),保證其與信息主體不可分割、自身不可篡改[3]。之后使用java 程序?qū)崿F(xiàn)文件流式讀取的API,注冊(cè)到隔離裝置出入口API 網(wǎng)關(guān),可以實(shí)現(xiàn)文件內(nèi)外網(wǎng)安全同步。
Java 依賴庫(kù)和軟件鏡像站理論上也可以使用上述文件同步技術(shù)作為輔助,使整體工作過(guò)程更加高效。
使用隔離裝置的雙向API 網(wǎng)關(guān)、軟件鏡像站、專業(yè)研發(fā)平臺(tái)等技術(shù),可以使國(guó)網(wǎng)仿真研發(fā)環(huán)境方案在純內(nèi)網(wǎng)環(huán)境落地實(shí)現(xiàn)。具體實(shí)現(xiàn)效果可能會(huì)因上述技術(shù)的成熟度而出現(xiàn)細(xì)節(jié)差異。上述問(wèn)題解決方法可供國(guó)網(wǎng)仿真研發(fā)環(huán)境建設(shè)參考。