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

圖1 基于國網(wǎng)隔離裝置安全的HTTP 服務(wù)網(wǎng)關(guān)
國網(wǎng)仿真研發(fā)環(huán)境方案只對研發(fā)測試環(huán)境做了對應(yīng)規(guī)劃,現(xiàn)有的生產(chǎn)環(huán)境在整個方案中只提及了自動化部署,對于原有的內(nèi)外網(wǎng)應(yīng)用、純外網(wǎng)應(yīng)用如何部署未做說明。使用第3 節(jié)提出的出入口API技術(shù),理論上可以將現(xiàn)有的所有外網(wǎng)部署應(yīng)用全部遷至內(nèi)網(wǎng),外網(wǎng)只部署對應(yīng)的出入API 網(wǎng)關(guān),此方案無疑會大大提升國網(wǎng)信息化安全水平,但是外網(wǎng)應(yīng)用遷移至內(nèi)網(wǎng),涉及大量技術(shù)架構(gòu)調(diào)整以及運(yùn)維配置工作,短期內(nèi)較難實現(xiàn)。
在保留現(xiàn)有生產(chǎn)環(huán)境應(yīng)用部署狀態(tài)的前提下,要實現(xiàn)國網(wǎng)仿真研發(fā)環(huán)境的生產(chǎn)自動化部署,需要解決跨內(nèi)外網(wǎng)的文件同步問題。文件安全一般使用安全簽名技術(shù)來實現(xiàn)。對于將要傳輸?shù)奈募紫韧瓿刹《静闅ⅲ缓筮x擇合適的密級添加技術(shù),保證其與信息主體不可分割、自身不可篡改[3]。之后使用java 程序?qū)崿F(xiàn)文件流式讀取的API,注冊到隔離裝置出入口API 網(wǎng)關(guān),可以實現(xiàn)文件內(nèi)外網(wǎng)安全同步。
Java 依賴庫和軟件鏡像站理論上也可以使用上述文件同步技術(shù)作為輔助,使整體工作過程更加高效。
使用隔離裝置的雙向API 網(wǎng)關(guān)、軟件鏡像站、專業(yè)研發(fā)平臺等技術(shù),可以使國網(wǎng)仿真研發(fā)環(huán)境方案在純內(nèi)網(wǎng)環(huán)境落地實現(xiàn)。具體實現(xiàn)效果可能會因上述技術(shù)的成熟度而出現(xiàn)細(xì)節(jié)差異。上述問題解決方法可供國網(wǎng)仿真研發(fā)環(huán)境建設(shè)參考。