本文說明控制 Linux 虛擬機器 (VM) 執行個體 SSH 網路存取權的最佳做法。
如要使用 SSH 連線至 VM 執行個體,使用者必須具備 VM 執行個體的網路存取權,以及有效的 SSH 憑證。根據預設,Compute Engine 會使用防火牆規則,該規則不會限制 SSH 網路存取權,但允許網際網路上的任何人連線至 VM 執行個體的 22
通訊埠。雖然開發人員不必考量網路或安全性控管機制,就能快速開始使用,但允許使用者從任何裝置、網路和位置進行連線都存在風險:
- 使用者可能會透過不受信任的裝置或網路連線。
- 惡意行為人可能會發動暴力攻擊,並試圖入侵您的 VM 執行個體。
- 惡意人士如果取得已洩漏或未及時撤銷的 SSH 憑證,就能透過這些憑證存取 VM,並從任何網路登入。
下列各節將說明如何限制使用者可用來與 VM 建立 SSH 連線的網路、位置或裝置,以降低風險:
本文著重於在 Google Cloud上使用 SSH 時,針對 Google Cloud 或特別相關的做法。本文件不涵蓋特定 SSH 用戶端或伺服器實作項目的最佳做法。
減少網路曝光
允許使用者從任何地方建立 SSH 連線,表示您完全依賴 SSH 驗證和授權機制來保護 VM。您可以減少 VM 的網路暴露程度,藉此降低風險並建立額外的防護層。
您可以透過多種方式減少 VM 的網路暴露程度。如要找出最適合您環境的方法,您必須考量多項因素,如以下流程圖所示:
外部存取:首先,請考量 VM 是否只需要在虛擬私有雲網路內存取,或是也需要在外部存取。
如果 VPC 內部存取權已足夠,您就不需要為 VM 指派外部 IP 位址,但仍必須決定如何管理存取權。
內部網路大小:如果虛擬私有雲網路內部存取權已足夠,則第二個要考量的因素是內部網路的大小。
在較小的網路中,只要使用防火牆規則,允許從內部位址輸入
22
通訊埠,即可保護 VM。在較大的網路中,單靠防火牆規則可能會受到太多限制:在這種情況下,您可以使用 Identity-Aware Proxy TCP 轉送功能,強制執行 VM 的情境感知存取權。VPC Service Controls 範圍設計:下一個要考量的因素是 VM 執行個體是否屬於 VPC Service Controls 範圍。
如果 VM 屬於服務範圍,則系統會將 VM 發出的任何 API 存取權視為來自範圍內。如果您授予位於範圍外使用者 SSH 存取權,讓他們存取範圍內的 VM,他們可能會將資料從範圍內複製到自己的本機工作站,反之亦然。這可能會使範圍內資料的機密性和完整性面臨風險。
如需將 SSH 存取權授予 VPC Service Controls 範圍內的 VM 執行個體,請使用 IAP TCP 轉送。IAP 會偵測使用者的電腦工作站是否屬於相同的 VPC Service Controls 範圍,並預設封鎖來自服務範圍外的存取嘗試。如要允許外部存取,請使用入口規則,並將其設為強制執行情境感知存取權。
用戶端裝置管理:最後一個考量因素是用戶端裝置的管理方式,因為這會決定您控管情境感知存取權的方式。
當存取內容管理器可存取使用者、裝置和位置的豐富信號,並與 Chrome Enterprise Premium 搭配使用時,情境感知存取權功能的效果會最顯著:如果您使用 Chrome Enterprise Premium 管理裝置,就可以設定存取層級,根據裝置狀態控管存取權。接著,您可以使用 IAP TCP 轉送功能,搭配存取權繫結或 IAM 條件,將這個存取權層級套用至 SSH 存取權。
如果您未控管用戶端裝置的設定,就必須將其視為未受管理且可能不受信任。
如要允許未受管理的裝置存取,您也可以使用 IAP TCP 轉送,但只能根據使用者身分和裝置 IP 位址管理存取權。由於 Access Context Manager 無法存取任何裝置信號,因此您無法根據裝置狀態限制存取權。
您可以根據這些因素和流程圖,找出最適合您環境的網路曝光率降低方法。以下各節將進一步說明這些方法。
以 IAP 為基礎的 SSH 存取權
這個做法的主要概念,是只允許透過 IAP TCP 轉送存取 SSH,並讓 IAP 根據使用者身分控管存取權。
我們建議您在符合下列情況的 VM 執行個體上使用此方法:
- VM 執行個體必須可由外部或大型內部網路存取。
- VM 不在 VPC Service Controls 範圍內。
根據預設,具有外部 IP 位址的 VM 執行個體會允許 SSH 存取權,因為預設防火牆會允許來自公開網際網路的連線連線至通訊埠 22,但這不是建議做法。這種做法可能會大幅提高 VM 遭到下列攻擊的風險:
- 使用未撤銷的憑證:未完全撤銷存取權的離職員工可能會繼續存取 VM。
- 濫用有效憑證:擁有遭盜或外洩憑證的惡意行為人,可能會利用這些憑證登入。
- 拒絕服務:惡意人士可能會透過大量要求,試圖耗盡 VM 的資源。
如要讓外部使用者透過 SSH 存取 VM 執行個體,建議您使用 IAP TCP 轉送功能,這也是更安全的做法。與堡壘主機或反向 Proxy 類似,IAP TCP 轉送功能會在用戶端裝置和 VM 之間充當中介。
當使用者嘗試建立 SSH 連線時,IAP TCP 轉送功能會執行下列四項功能:
- 驗證:IAP 會驗證使用者是否擁有有效的 Google 憑證。
- 授權:IAP 會檢查 IAM 政策,確認使用者是否已獲授權,可透過 IAP 連線至 VM。
- 情境感知存取權:如有需要,IAP 可以驗證使用者、使用者的裝置和位置是否符合特定存取層級。
- 稽核:啟用資料存取記錄後,IAP 會記錄每一次成功和失敗的 VM 執行個體連線嘗試。
透過擔任中介角色並執行這些功能,IAP 可免除為 VM 指派外部 IP 位址的必要性,並提供額外的安全防護層。
以 IAP 為基礎的情境感知 SSH 存取權
這項做法的概念是只允許透過 IAP TCP 轉送存取 SSH,並讓 IAP 根據使用者的身分和其他因素控管存取權。
我們建議您在符合下列情況的 VM 執行個體上使用此方法:
- 虛擬機器人執行個體必須可從 VPC 外部和連線至 VPC 的網路存取。
- VM 不在 VPC Service Controls 範圍內。
- 只要確保 VM 只能透過特定裝置、網路或位置存取即可。
無論是直接授予使用者 VM 執行個體的 SSH 存取權,還是透過 IAP 授予,根據預設,使用者都能從任何裝置、網路和位置存取 VM 執行個體。雖然這類存取權可為使用者提供便利性,但由於使用者可能會透過遭到入侵的裝置或不受信任的網路連線,因此會增加風險。
為降低風險,請設定 IAP TCP 轉送功能,讓使用者只能透過特定裝置或位置存取 VM 執行個體。您可以透過下列兩種方式設定情境感知存取權:
存取權繫結:您可以使用存取權繫結建立存取層級,然後將該層級指派給群組。存取繫結是一種表單或以身分為準的政策,適用於使用者嘗試存取的所有資源,包括 IAP、其他 API 和 Google Cloud 主控台。
如果您想確保在各項資源中一律套用情境感知存取權,使用存取權繫結功能最適合。
IAM 條件:您可以使用 IAM 條件建立存取層級,並將該層級指派給個別 IAM 角色繫結。
使用 IAM 角色繫結是一種資源型政策,如果您想將不同的政策套用至不同的 VM 組合,這種方法最適合。
基本存取層級可讓您根據網路或地理位置限制存取權。身為 Chrome Enterprise Premium 訂閱者,您也可以根據其他屬性限制存取權,例如憑證強度、用於驗證的瀏覽器設定或裝置狀態。
以 VPC Service Controls 為基礎的 SSH 存取權
這項做法的概念是,只允許透過 IAP TCP 轉送存取 SSH,並設定服務邊界,允許特定來源的身分使用 IAP 進入。
我們建議您將此方法用於屬於 VPC Service Controls 範圍的 VM 執行個體。
將服務範圍內的 VM 外部 SSH 存取權授予使用者可能會帶來風險,因為使用者可能會透過 SSH 竊取資料,進而破壞 VPC Service Controls 範圍。
只要透過 IAP TCP 轉送功能允許 SSH 存取權,即可降低這類風險,並確保所有 SSH 存取權都受到 VPC Service Controls 範圍的設定規範:
- 如果使用者嘗試從服務範圍外連線 (如前述範例所示),IAP TCP 轉送功能不僅會檢查使用者是否已獲授予 VM 的 IAM 存取權,還會檢查要求是否符合任何邊界入口規則。
如果使用者嘗試從服務範圍內連線,IAP TCP 轉送也會檢查使用者是否已獲授予 VM 的 IAM 存取權,但會忽略 VPC Service Controls 輸入規則。
如果符合下列任一情況,IAP 就會將連線視為來自服務範圍內:
- 來源 IP 是服務範圍內 VM 的外部 IP 位址。
- 連線是透過私人 Google 存取權建立,並從服務範圍內的 VM 進行。
- 連線會透過服務範圍內的 Private Service Connect 存取端點建立。
防火牆控管的內部 SSH 存取權
這種做法的概念是禁止所有外部存取,並只允許 VPC 內部的 SSH 存取。
您可以將這種方法用於符合下列條件的 VM 執行個體:
- VM 執行個體不需要開放外部存取。
- VM 已連線至小型至中型內部網路。
- VM 不在 VPC Service Controls 範圍內。
如要禁止所有外部存取,請執行下列任一操作:
- 部署沒有外部 IP 位址的 VM 執行個體。
- 設定防火牆規則,禁止來自虛擬私有雲外 IP 範圍的 SSH 傳入流量。
停用序列主控台存取權
如要排解 VM 執行個體故障問題,Compute Engine 可讓您透過 SSH 閘道 ssh-serialport.googleapis.com
連線至執行個體的序列埠主控台。這個閘道可透過網際網路公開存取。
SSH 閘道會透過基礎管理程序存取 VM,而不是透過 VPC 網路。因此,序列主控台的存取權是由 IAM 政策而非防火牆規則控管。
允許使用者存取 VM 序列主控台,可能會讓 VM 不小心曝光過度。為避免這種過度曝光情形,請使用 compute.disableSerialPortAccess
組織政策限制,停用序列主控台存取權,並在需要緊急存取 VM 序列埠時,暫時解除限制。
如需工作階段錄製功能,請使用堡壘 VM
IAP TCP 轉送會擔任用戶端裝置和 VM 之間的中介角色,執行通常由堡壘主機或跳躍伺服器執行的功能。這些函式包括:
- 以集中方式強制執行存取政策
- 稽核存取權
與某些防禦主機不同,IAP TCP 轉送不會終止 SSH 連線:當您透過 IAP TCP 轉送建立與 VM 的 SSH 連線時,SSH 連線會在用戶端和 VM 之間進行端對端加密。由於這項端對端加密功能,IAP TCP 轉送功能無法檢查 SSH 工作階段的內容,也不提供工作階段錄製功能。IAP 稽核記錄包含連線中繼資料,但不會揭露工作階段內容的任何資訊。
如果您需要錄製工作階段,請使用防禦 VM:
- 設定堡壘 VM,讓它終止 SSH 連線並記錄內容。請務必限制 SSH 通訊埠轉送功能的使用,因為這可能會降低工作階段錄製功能的效率。
- 設定目標 VM 的防火牆規則,只允許來自防禦主機 VM 的 SSH 連線。
- 僅允許透過 IAP TCP 轉送存取堡壘 VM
使用防火牆政策限制 SSH 暴露
確定限制 SSH 暴露方式最適合您的環境後,請務必確保所有 VM 和專案都已相應設定。特別是,您必須確保所有專案都使用一致的防火牆規則集,以決定 SSH 的使用方式。
如要在多個專案中套用一組防火牆規則,請使用階層式防火牆政策,並將這些政策套用至資源階層中的資料夾。
舉例來說,如要確保所有 SSH 存取作業都透過 IAP TCP 轉送,請套用防火牆政策,其中包含以下兩個自訂規則 (依優先順序):
- 允許從
35.235.240.0/20
輸入至所選 VM 的通訊埠 22。35.235.240.0/20
是 IAP TCP 轉送功能使用的 IP 範圍。 - 拒絕從
0.0.0.0/0
到所有 VM 的通訊埠 22 的輸入。