品牌名稱
攜程
企業(yè)規(guī)模
51-200人

攜程 JumpServer 堡壘機(jī)部署與運(yùn)營實(shí)戰(zhàn)

500次閱讀

編者注:以下內(nèi)容根據(jù)攜程旅行網(wǎng)系統(tǒng)保障中心云平臺研發(fā)部高級經(jīng)理熊輝于8月24日在“2019 Jumpserver 堡壘機(jī) Meetup · 上海站”的演講內(nèi)容整理而成。

undefined

 

從1999年正式創(chuàng)立至今,攜程旅行網(wǎng)(以下簡稱為攜程)在過去的20年里實(shí)踐并見證了旅行行業(yè)的變遷。作為中國在線旅游業(yè)的開創(chuàng)者之一,攜程將科技創(chuàng)新力源源不斷地注入傳統(tǒng)旅行業(yè),其在線旅行服務(wù)已經(jīng)覆蓋200多個(gè)國家和地區(qū),5000多個(gè)大中城市。2018年,攜程全品牌活躍用戶數(shù)超過2億,是全球市值第二的在線旅行服務(wù)公司。

全球范圍內(nèi)的業(yè)務(wù)覆蓋依托強(qiáng)大的分布式IT基礎(chǔ)設(shè)施。在混合云架構(gòu)下,攜程在私有云和公有云環(huán)境均擁有大量的IT資產(chǎn)。在“兩地三中心”的數(shù)據(jù)中心架構(gòu)中,攜程的私有云環(huán)境運(yùn)行著超過90000臺虛擬機(jī),而在全球范圍內(nèi),攜程在公有云上的虛擬機(jī)也超過了2000臺。

針對超大規(guī)模的IT資產(chǎn),堡壘機(jī)的統(tǒng)一部署、統(tǒng)一登錄是非常有挑戰(zhàn)的工作。借助Jumpserver堡壘機(jī)的創(chuàng)新軟件架構(gòu)和水平擴(kuò)展能力,攜程實(shí)現(xiàn)了混合云環(huán)境中超大規(guī)模IT資產(chǎn)的運(yùn)維安全審計(jì)。Jumpserver堡壘機(jī)自上線以來一直保持高效穩(wěn)定運(yùn)營。從登錄頻次上看,攜程內(nèi)部用戶登錄Jumpserver堡壘機(jī)的頻次已經(jīng)從早期部署的5000次/周持續(xù)增加至目前的10000次/周。

作為Jumpserver堡壘機(jī)的長期用戶,攜程積累了豐富的Jumpserver堡壘機(jī)的部署和運(yùn)營經(jīng)驗(yàn)。為了幫助用戶更好地理解并使用Jumpserver堡壘機(jī),我們將攜程在高可靠部署、權(quán)限管控、數(shù)據(jù)存儲等方面的經(jīng)驗(yàn)分享整理成文,供廣大Jumpserver堡壘機(jī)用戶參考。

 

出于自身的業(yè)務(wù)需要,攜程的Jumpserver采用的是集中式部署的方式。Jumpserver堡壘機(jī)在攜程的三個(gè)數(shù)據(jù)中心內(nèi)部進(jìn)行高可靠部署,隱私數(shù)據(jù)全部保存在自有數(shù)據(jù)中心。用戶可通過Web頁面、XShell客戶端和攜程的PaaS平臺登錄到Jumpserver。由于PaaS平臺承載了虛機(jī)申請、應(yīng)用發(fā)布等任務(wù),很大部分的用戶是通過PaaS平臺登錄到Jumpserver的。這也是攜程最終選擇集中式部署方式的一個(gè)重要原因。

在這樣的架構(gòu)之下,用戶訪問私有環(huán)境的機(jī)器是非常方便的。那么,部署在私有環(huán)境的Jumpserver是怎樣與公有云進(jìn)行打通的呢?

為了讓用戶登錄多Region的機(jī)器,攜程基于Jumpserver搭建了集中式的“Jumpserver+分布式網(wǎng)關(guān)”的體系。攜程首先在數(shù)據(jù)中心出口建立白名單,并且對接到公有云的SSH Proxy網(wǎng)關(guān),從而建立互信的IP隧道。所有訪問公網(wǎng)的IP必須通過SSH Proxy網(wǎng)關(guān)。在公有云主機(jī)上,利用其提供的安全組功能進(jìn)行IP table的限制,從而在私有云和公有云之間一一建立可信的訪問鏈路,實(shí)現(xiàn)對公有云主機(jī)的統(tǒng)一登錄。

基于這一架構(gòu),攜程還利用Jumpserver實(shí)現(xiàn)了TOTP(Time-based One-time Password)
認(rèn)證、網(wǎng)域支持、操作日志記錄/審計(jì)等功能。其中TOTP算法認(rèn)證構(gòu)建在Jumpserver開源版本的MFA多因子認(rèn)證功能之上。協(xié)議方面,對接SSH、WebSocket、RDP、SFTP和RZ等協(xié)議,很好地解決了私有云和公有云中IT資產(chǎn)統(tǒng)一登錄的問題。

 

對于用戶登錄Jumpserver堡壘機(jī),攜程通過Pool的維度進(jìn)行權(quán)限的管控。每一個(gè)Pool下包含若干臺機(jī)器,將登錄堡壘機(jī)的用戶劃分為只讀用戶組、讀寫用戶組和管理員用戶組三類,通過不同的用戶組授權(quán)管控Pool之下的IT資產(chǎn)。這一架構(gòu)與Jumpserver的管理模型相互對應(yīng),即UserGroup→用戶組、Node→Pool、Asset→主機(jī)。

 

undefined

 

當(dāng)用戶發(fā)出主機(jī)申請的請求時(shí),請求會提交至攜程PaaS平臺的權(quán)限審批系統(tǒng),審批者通過后PaaS平臺調(diào)用Jumpserver的接口將用戶加入到對應(yīng)Pool下的用戶組中,用戶即對該P(yáng)ool下的所有機(jī)器擁有相關(guān)的授權(quán)。

此外,攜程還基于Jumpserver開發(fā)了臨時(shí)授權(quán)的功能,以便增進(jìn)用戶權(quán)限管理的靈活性。基于該功能,用戶可以在一段時(shí)限內(nèi)獲得相應(yīng)授權(quán),到達(dá)授權(quán)時(shí)限后權(quán)限自動回收。對于權(quán)限到期時(shí)用戶已登錄的機(jī)器,攜程采用的方式是通過Celery的Task定期掃描臨時(shí)權(quán)限表,當(dāng)發(fā)現(xiàn)臨時(shí)權(quán)限已過期且有機(jī)器處在登錄狀態(tài)時(shí),即會下發(fā)Kill-Session的Task。這樣Jumpserver堡壘機(jī)的Coco在同步心跳時(shí)對Session狀態(tài)進(jìn)行同步,及時(shí)終止臨時(shí)權(quán)限到期的Session。

 

目前,攜程將Jumpserver堡壘機(jī)的用戶、機(jī)器和權(quán)限信息保存在MySQL數(shù)據(jù)庫中,Celery、Web socket message broker、Task等信息存儲在Redis數(shù)據(jù)庫中,錄像審計(jì)(包括Windows和Linux的操作審計(jì))保存在Ceph對象存儲服務(wù)系統(tǒng)中,操作日志經(jīng)過脫敏處理后存儲在ElasticSearch中,以便進(jìn)行查詢和分析。

 

為了讓Jumpserver的運(yùn)營更加智能化和自動化,攜程對其核心組件進(jìn)行監(jiān)控。方法是通過在Jumpserver節(jié)點(diǎn)和Coco節(jié)點(diǎn)部署Filebeat,F(xiàn)ilebeat定期進(jìn)行日志采集。針對操作日志中的高危操作,攜程會將其導(dǎo)入攜程的SOC(Security of Center)平臺,并在該平臺進(jìn)行及時(shí)告警。

 

undefined

 

 

Jumpserver容器化部署的方式給攜程的堡壘機(jī)部署帶來了充分的便利性。攜程在每個(gè)IDC部署多臺Jumpserver堡壘機(jī),以保證大規(guī)模資產(chǎn)的訪問性能。針對Web、Coco和Guacamole都匹配了單獨(dú)的域名,將其視為獨(dú)立的應(yīng)用,用戶可直接通過域名進(jìn)行訪問。域名系統(tǒng)掛載在硬件設(shè)備之上,以確保Jumpserver組件之間的解耦與高可靠。Jumpserver的發(fā)布則通過Ansible Tower統(tǒng)一進(jìn)行,所有組件均采用容器化部署的方式,每個(gè)組件獨(dú)立進(jìn)行發(fā)布。