控管 SSH 網路存取權的最佳做法

本文說明如何控管 Linux 虛擬機器 (VM) 執行個體的 SSH 網路存取權。

如要使用 SSH 連線至 VM 執行個體,使用者必須具備 VM 執行個體的網路存取權,以及有效的 SSH 憑證。根據預設,Compute Engine 會使用防火牆規則,不會限制 SSH 網路存取權,但允許網路上任何人連線至 VM 執行個體的通訊埠 22。雖然開發人員可以輕鬆快速上手,不必考慮網路或安全控管機制,且使用者可從任何裝置、網路和位置連線,但這也存在風險:

  • 使用者可能透過不受信任的裝置或網路連線。
  • 惡意行為人可能會發動暴力破解攻擊,試圖入侵您的 VM 執行個體。
  • 如果惡意人士取得外洩或未及時撤銷的 SSH 憑證,就能使用這些憑證從任何網路存取及登入 VM。

下列各節說明如何限制使用者可透過 SSH 連線至 VM 的網路、位置或裝置,進而降低風險:

本文著重於 Trusted Cloud by S3NS 專屬或特別適用於 Trusted Cloud安全殼層的實務做法。本文未涵蓋特定 SSH 用戶端或伺服器實作的最佳做法。

減少網路曝光

允許使用者從任何位置建立 SSH 連線,表示您完全依賴 SSH 驗證和授權機制來保護 VM。減少 VM 的網路暴露量,有助於降低風險並建立額外防護層。

有多種方法可減少 VM 的網路暴露風險。 如要找出最適合您環境的方法,請考慮下列流程圖所示的幾項因素:

減少網路曝光

  • 外部存取權:首先要考慮的是,VM 是否只需要在 VPC 網路中存取,還是也需要外部存取權。

    如果 VPC 內部存取權足夠,您就不需要為 VM 指派外部 IP 位址,但仍須決定如何管理存取權。

  • 內部網路大小:如果虛擬私有雲內部存取權足夠,則第二個要考慮的因素是內部網路大小。

    在較小的網路中,使用允許從內部位址輸入至通訊埠 22 的防火牆規則,可能就足以保護 VM。在較大的網路中,單靠防火牆規則可能限制過多。在這種情況下,您可以使用 Identity-Aware Proxy TCP 轉送功能,對 VM 強制執行情境感知存取權。

  • VPC Service Controls 範圍設計:下一個考量因素是 VM 執行個體是否屬於 VPC Service Controls 範圍。

    如果 VM 屬於服務範圍,則源自 VM 的任何 API 存取作業,都會視為源自範圍內。如果您授予範圍外的使用者 SSH 存取權,讓他們存取範圍內的 VM,他們可能會將資料從範圍內複製到本機工作站,或反向操作,這可能會導致範圍內資料的機密性和完整性受到威脅。

    如要授予 VM 執行個體 SSH 存取權,而該執行個體屬於 VPC Service Controls 範圍,請使用 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 的資源。

如要以更安全的方式啟用 VM 執行個體的外部 SSH 存取權,請使用 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 執行個體符合下列條件,建議採用這種做法:

  • VM 執行個體必須可從 VPC 外部,以及連線至 VPC 的網路存取。
  • VM 不屬於 VPC Service Controls 範圍。
  • VM 只需要可從特定裝置、網路或位置存取。

授予使用者 VM 執行個體的 SSH 存取權時 (無論是直接授予或透過 IAP 授予),根據預設,使用者可以從任何裝置、網路和位置存取 VM 執行個體。雖然這項存取層級對使用者來說很方便,但也會增加風險,因為使用者可能會透過遭入侵的裝置或不受信任的網路連線。

為降低風險,請設定 IAP TCP 轉送,只允許使用者從特定裝置或位置存取 VM 執行個體。您可以透過下列兩種方式設定這類情境感知存取權:

  • 存取權繫結:您可以建立存取層級,然後使用存取權繫結將其指派給群組。 存取權繫結是一種以表單或身分為依據的政策,適用於使用者嘗試存取的所有資源,包括 IAP,以及其他 API 和 Trusted Cloud 控制台。

    如要確保情境感知存取權在資源中統一強制執行,建議使用存取權繫結。

  • IAM 條件:您可以使用 IAM 條件建立存取層級,並將其指派給個別 IAM 角色繫結。

    使用 IAM 角色繫結是資源型政策的一種形式,如果您想對不同的 VM 集套用不同的政策,這個方法最適合。

基本存取層級可讓您根據網路或地理位置限制存取權。如果您是 Chrome Enterprise Premium 訂閱者,也可以根據其他屬性 (例如憑證強度用於驗證的瀏覽器設定裝置狀態) 限制存取權。

以 VPC Service Controls 為基礎的 SSH 存取權

這個方法的概念是只允許透過 IAP TCP 轉送進行 SSH 存取,並設定服務周邊,允許特定身分從來源進行 IAP 傳入。

如果 VM 執行個體屬於 VPC Service Controls 範圍,建議採用這種做法。

如果將外部 SSH 存取權授予服務範圍內的 VM,可能會讓使用者透過 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 位址。
    • 連線是透過服務安全防護範圍內的 VM,使用 Private Google Access 建立。
    • 連線是透過服務周邊的一部分 Private Service Connect 存取端點建立。

透過防火牆控管內部 SSH 存取權

這種做法的概念是禁止所有外部存取權,只允許虛擬私有雲內部 SSH 存取權。

如果 VM 執行個體符合下列條件,即可使用這種方法:

  • VM 執行個體不需要可從外部存取。
  • VM 連線至中小型內部網路。
  • VM 不屬於 VPC Service Controls 範圍。

如要禁止所有外部存取權,請執行下列任一操作:

  • 部署沒有外部 IP 位址的 VM 執行個體。
  • 設定防火牆規則,禁止來自虛擬私有雲外部 IP 範圍的 SSH 傳入流量。

停用序列主控台存取權

如要排解 VM 執行個體故障問題,Compute Engine 可讓您透過 SSH 閘道 ssh-serialport.googleapis.com 連線至執行個體的序列埠控制台。這個閘道可透過網際網路公開存取。

SSH 閘道會透過基礎管理程序存取 VM,而不是透過虛擬私有雲網路。因此,序列埠控制台的存取權是由 IAM 政策控管,而非防火牆規則。

允許使用者存取 VM 序列主控台可能會導致 VM 意外暴露。為避免過度曝光,請使用compute.disableSerialPortAccess機構政策限制停用序列控制台存取權,並在需要緊急存取 VM 序列埠時暫時解除限制。

如需工作階段錄製功能,請使用防禦 VM

IAP TCP 轉送功能可做為用戶端裝置和 VM 之間的中介服務,執行堡壘主機或跳躍伺服器通常執行的功能。這些函式包括:

  • 集中強制執行存取政策
  • 稽核存取權

與某些防禦主機不同,IAP TCP 轉送不會終止 SSH 連線:透過 IAP TCP 轉送建立與 VM 的 SSH 連線時,用戶端與 VM 之間的 SSH 連線會進行端對端加密。由於採用端對端加密,IAP TCP 轉送無法檢查 SSH 工作階段的內容,也不提供工作階段記錄功能。IAP 稽核記錄包含連線中繼資料,但不顯示工作階段內容的任何資訊。

如需工作階段記錄,請使用防禦 VM:

  • 設定防禦主機 VM,終止 SSH 連線並記錄內容。請務必限制使用 SSH 通訊埠轉送,因為這可能會影響工作階段錄製的成效。
  • 設定目標 VM 的防火牆規則,只允許透過防禦主機 VM 建立 SSH 連線。
  • 只允許透過 IAP TCP 轉送存取堡壘 VM

使用防火牆政策限制 SSH 曝光

決定限制 SSH 曝光程度的最佳方式後,請務必相應設定所有 VM 和專案。具體來說,您必須確保所有專案都使用一致的防火牆規則集,決定如何使用 SSH。

如要跨多個專案套用一組防火牆規則,請使用階層式防火牆政策,並將這些政策套用至資源階層中的資料夾。

舉例來說,如要強制規定所有 SSH 存取作業都必須透過 IAP TCP 轉送執行,請套用包含下列兩項自訂規則的防火牆政策 (依優先順序排列):

  1. 允許從 35.235.240.0/20 輸入至所選 VM 的通訊埠 22。 35.235.240.0/20 是 IAP TCP 轉送功能使用的 IP 範圍。
  2. 拒絕從 0.0.0.0/0 輸入所有 VM 的通訊埠 22。

後續步驟