認識 Bastion Host 部署管理機
由於最近接觸 Openshift
部署實體機,剛好部署過程學習到透過 Bastion 管理機
,來統一管理分配對應依賴套件安裝給對應節點,並用於運行 Ansible 腳本及配置叢集使用,但後來思考到整體部署過程中安全性
問題,所以爬文搜尋一下大部分進行管理機部署情境與針對安全原則筆記。
Bastion Host 中繼管理機
簡單來說就是為連線伺服器叢集限定一個入口,方便管理部署維運並權限控制以及監控
想像一下,如果你要維護一百多台伺服器,要記住每台伺服器IP/帳號/密碼,肯定是不可能的吧?這種情況下,可以在跳板機上配置通常做法將SSH Key
複製到遠端 Server 再進行跳板動作,配置完畢後,通過跳板機登錄並操作維護多台節點主機。
但因為目前我的環境都為測試實驗環境,這做法其實沒有很安全,又需要多下一個指令進透過中繼管理機操作,而先前更何況沒有Bastion Host
概念通常都直接拿Master Node
當跳板機部署。而更重要的是當Bastion Host
跳板機被 Hack 都可以隨時入侵其他主機操作,而找如何針對增加安全性的問題下手。
解決安全性辦法
這邊參考安全性做法
- 針對「 Bastion Host 中繼主機當跳板」連線白名單限制,或是直接隔絕外網連線操作,只在限定實驗環境內網進行中繼主機操作與部署(離線部署叢集)
轉交密鑰方式:
- SSH agent forwarding 讓開發者將 Local 端的 SSH Key Pair 帶到另外一台機器進行傳送,也就是說你不用將 SSH Key 複製到遠端 Server 再進行跳板動作
舉例來說,首先 SSH 登入進 Server1,接著在 Server1 上登入 Server2 時,就會自動使用你本地的 SSH Key:
1 | Local ---(SSH)---> Server1 ---(SSH)---> Server2 |
首先需要將要 forwarding
的 private key
加到清單裡面:
1 | $ ssh-add |
加上 -L
可以檢查這個清單
1 | $ ssh-add -L |
這邊注意可以將所有機器的 key pair 都放到 ~/.ssh/keys 目錄,並且設定 400 權限
方法一:每次要 Local 連上 Server 時,加上 -A 參數:
1 | $ ssh -A user@{you server1 ip} |
方法二:修改 ~/.ssh/config
設定,加上 ForwardAgent yes
,這樣就不需要每次連都加上 -A 參數。例如
1 | Host server1 |
- 這樣中繼主機,不需要存放任何憑證資料
安全隱憂的,起因於 agent service 於連線時會在 /tmp/ 目錄建立一個檔案 /tmp/ssh-xxxxxx/agent.xxxx,在正常的情況下,它會用原使用者透過 ssh-add 所設定的密鑰對,替我們回答目的伺服器所發起的密鑰驗證要求。
1 | Host hosta |
這個方法可以讓我們直接登入遠端主機,省略第二次的 ssh 指令。