
情況
我們有一個託管在 Amazon EC2 上的 Web 應用程式。它僅供公司中的少數用戶使用。
我們如何處理這個問題
- 我們與使用者共享實例的(彈性)IP 位址。
- 我們根據需要將每個使用者的 IP 位址新增至執行個體的安全群組。
當我說當需要時,我的意思是用戶抱怨門戶網站顯示錯誤頁面的電子郵件。他們忘記了將 IP 包含在安全群組中這一步驟是必需的(我不怪他們;他們是最終用戶)。
為了回答這個問題,我們假設一家公司總共有 5 位使用者需要此存取權限。 User-1和User-2的IP位址已新增至安全性群組。
問題
- User-3 直接存取該 IP 位址,但無法存取該 IP 位址,因為該使用者的 IP 位址尚未新增至安全性群組。
- 如果User-1 或User-2 重新啟動互聯網,他們的IP 位址可能會發生變化(ISP 提供的動態IP),並且新的IP 位址必須添加到安全性群組中(且舊的IP 位址必須被撤銷才能生效)。
我正在考慮的其他選擇
- 僅提供對其辦公室 VPN 的訪問,並要求所有用戶透過它進行連接。
- (對使用者來說非常麻煩)要求使用者登入AWS管理控制台,進入EC2服務,進入安全群組部分並手動新增他們的IP位址(使用者已經擁有AWS IAM使用者和適當的權限來執行此操作) 。
- 建立一個將使用者目前 IP 新增至安全性群組的腳本(使用 AWS CLI / SDK) - 聽起來非常危險且不合適,因為我們必須在腳本中包含某人的 API 憑證。
答案1
選項 4 - 停止透過安全群組控制訪問,而是實施一些適當的身份驗證機制。
例如放一個應用程式負載平衡器在 Web 應用程式前面並配置 ALB 以要求認知身份驗證。只有經過身份驗證的使用者才能透過 ALB 存取您的 Web 應用程式 - 問題已解決。 Cognito 可以擁有本機用戶,或者可以與您的 Azure AD 一起使用,或者如果您在組織中使用 Office365。這是一種非常透明的方式,不需要對應用程式進行任何更改。
或者,如果您的 Web 應用程式支援它,您應該將其配置為要求針對您的組織正在使用的任何使用者目錄(Office365、G-Suite 等)進行 SAML 驗證。
希望有幫助:)
答案2
選項 5 - 停止管理安全群組(本質上是基於 IP 的防火牆)並使用 TLS 用戶端憑證。
如果您使用的是 Azure AD 或 LDAP 等現代使用者管理系統,則您已經擁有合適的工具來頒發和分發憑證。您將設定私有 CA 並設定 HTTP 伺服器(Nginx、Apache2 或 AWS ALB)以透過憑證進行驗證。沒有憑證或憑證無效(包括過期的憑證)的人將無法通過HTTP伺服器。這需要零更改為 Web 應用程式本身,您甚至可以放棄應用程式中的任何身份驗證,因為除了存取控制之外,憑證還可以實現此目的。
一個優點是這很有效到處- 無論是 AWS、Azure 還是您的本地基礎架構。您甚至可以重複使用完全相同的憑證和配置堆疊(AWS ALB 除外)。