本文說明控制 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 的輸入。
後續步驟
- 請繼續閱讀控管 SSH 登入存取權的最佳做法