攜程 JumpServer 堡壘機部署與運營實戰
編者注:以下內容根據攜程旅行網系統保障中心云平臺研發部高級經理熊輝于8月24日在“2019 Jumpserver 堡壘機 Meetup · 上海站”的演講內容整理而成。
從1999年正式創立至今,攜程旅行網(以下簡稱為攜程)在過去的20年里實踐并見證了旅行行業的變遷。作為中國在線旅游業的開創者之一,攜程將科技創新力源源不斷地注入傳統旅行業,其在線旅行服務已經覆蓋200多個國家和地區,5000多個大中城市。2018年,攜程全品牌活躍用戶數超過2億,是全球市值第二的在線旅行服務公司。
全球范圍內的業務覆蓋依托強大的分布式IT基礎設施。在混合云架構下,攜程在私有云和公有云環境均擁有大量的IT資產。在“兩地三中心”的數據中心架構中,攜程的私有云環境運行著超過90000臺虛擬機,而在全球范圍內,攜程在公有云上的虛擬機也超過了2000臺。
針對超大規模的IT資產,堡壘機的統一部署、統一登錄是非常有挑戰的工作。借助Jumpserver堡壘機的創新軟件架構和水平擴展能力,攜程實現了混合云環境中超大規模IT資產的運維安全審計。Jumpserver堡壘機自上線以來一直保持高效穩定運營。從登錄頻次上看,攜程內部用戶登錄Jumpserver堡壘機的頻次已經從早期部署的5000次/周持續增加至目前的10000次/周。
作為Jumpserver堡壘機的長期用戶,攜程積累了豐富的Jumpserver堡壘機的部署和運營經驗。為了幫助用戶更好地理解并使用Jumpserver堡壘機,我們將攜程在高可靠部署、權限管控、數據存儲等方面的經驗分享整理成文,供廣大Jumpserver堡壘機用戶參考。
出于自身的業務需要,攜程的Jumpserver采用的是集中式部署的方式。Jumpserver堡壘機在攜程的三個數據中心內部進行高可靠部署,隱私數據全部保存在自有數據中心。用戶可通過Web頁面、XShell客戶端和攜程的PaaS平臺登錄到Jumpserver。由于PaaS平臺承載了虛機申請、應用發布等任務,很大部分的用戶是通過PaaS平臺登錄到Jumpserver的。這也是攜程最終選擇集中式部署方式的一個重要原因。
在這樣的架構之下,用戶訪問私有環境的機器是非常方便的。那么,部署在私有環境的Jumpserver是怎樣與公有云進行打通的呢?
為了讓用戶登錄多Region的機器,攜程基于Jumpserver搭建了集中式的“Jumpserver+分布式網關”的體系。攜程首先在數據中心出口建立白名單,并且對接到公有云的SSH Proxy網關,從而建立互信的IP隧道。所有訪問公網的IP必須通過SSH Proxy網關。在公有云主機上,利用其提供的安全組功能進行IP table的限制,從而在私有云和公有云之間一一建立可信的訪問鏈路,實現對公有云主機的統一登錄。
基于這一架構,攜程還利用Jumpserver實現了TOTP(Time-based One-time Password)
認證、網域支持、操作日志記錄/審計等功能。其中TOTP算法認證構建在Jumpserver開源版本的MFA多因子認證功能之上。協議方面,對接SSH、WebSocket、RDP、SFTP和RZ等協議,很好地解決了私有云和公有云中IT資產統一登錄的問題。
對于用戶登錄Jumpserver堡壘機,攜程通過Pool的維度進行權限的管控。每一個Pool下包含若干臺機器,將登錄堡壘機的用戶劃分為只讀用戶組、讀寫用戶組和管理員用戶組三類,通過不同的用戶組授權管控Pool之下的IT資產。這一架構與Jumpserver的管理模型相互對應,即UserGroup→用戶組、Node→Pool、Asset→主機。
當用戶發出主機申請的請求時,請求會提交至攜程PaaS平臺的權限審批系統,審批者通過后PaaS平臺調用Jumpserver的接口將用戶加入到對應Pool下的用戶組中,用戶即對該Pool下的所有機器擁有相關的授權。
此外,攜程還基于Jumpserver開發了臨時授權的功能,以便增進用戶權限管理的靈活性。基于該功能,用戶可以在一段時限內獲得相應授權,到達授權時限后權限自動回收。對于權限到期時用戶已登錄的機器,攜程采用的方式是通過Celery的Task定期掃描臨時權限表,當發現臨時權限已過期且有機器處在登錄狀態時,即會下發Kill-Session的Task。這樣Jumpserver堡壘機的Coco在同步心跳時對Session狀態進行同步,及時終止臨時權限到期的Session。
目前,攜程將Jumpserver堡壘機的用戶、機器和權限信息保存在MySQL數據庫中,Celery、Web socket message broker、Task等信息存儲在Redis數據庫中,錄像審計(包括Windows和Linux的操作審計)保存在Ceph對象存儲服務系統中,操作日志經過脫敏處理后存儲在ElasticSearch中,以便進行查詢和分析。
為了讓Jumpserver的運營更加智能化和自動化,攜程對其核心組件進行監控。方法是通過在Jumpserver節點和Coco節點部署Filebeat,Filebeat定期進行日志采集。針對操作日志中的高危操作,攜程會將其導入攜程的SOC(Security of Center)平臺,并在該平臺進行及時告警。
Jumpserver容器化部署的方式給攜程的堡壘機部署帶來了充分的便利性。攜程在每個IDC部署多臺Jumpserver堡壘機,以保證大規模資產的訪問性能。針對Web、Coco和Guacamole都匹配了單獨的域名,將其視為獨立的應用,用戶可直接通過域名進行訪問。域名系統掛載在硬件設備之上,以確保Jumpserver組件之間的解耦與高可靠。Jumpserver的發布則通過Ansible Tower統一進行,所有組件均采用容器化部署的方式,每個組件獨立進行發布。