儘管安裝後的elasticsearch非常容易被利用,但似乎嚴重缺乏這方面的資訊。
我在使用它時主要擔心的是,作為一個非專家,我不知道可能的漏洞是什麼以及如何關閉它們。
有人可以向我解釋鎖定 elasticsearch 的方法,以便我可以在安全的環境中執行以下操作:
每個用戶多個索引。假設我可以提前為他們建立此索引,使用者不應該能夠對其他使用者的索引執行操作,除非在獲得許可的情況下可能查詢它們。 (可能每個使用者的 URL 中都有某種形式的金鑰?)
使用者可以隨意在索引中新增和刪除對象,但不能刪除索引。
對使用者的記憶體大小進行某種形式的限制,這樣如果出現問題,他們就不能超載服務。
我猜其中一些必須在應用程式層級完成,我不能指望你為我編寫這個,但是預設配置太開放,即使我為此提供自訂 API 層,有人也可以輕鬆地繞過它並直接與伺服器通訊。
答案1
在我看來,按照您要求的方式保護 ES 的唯一方法是將其鎖定在另一個應用程式層後面,並讓該層處理 https/ssl 傳輸、身份驗證和授權控制。
在ES方面,開發了一個jetty ES安全插件,不知道是否成功,當我第一次部署ES時,插件即將發布,所以看看它:
答案2
我想您需要使用所有這些“業務邏輯”來創建一個中間 HTTP 代理,並且只允許從本地主機訪問 ElasticSearch。這樣,對 ES 的直接存取將被阻止,您可以確定並執行您想要的任何策略(耶!;)
「即使我為此提供自訂 API 層,某人也可以輕鬆繞過它」:如果 ES 只接受來自本地主機的連接,他們就不能繞過它。
我認為記憶體使用限制是不可能的,也許您可以在代理層內預先批准查詢?
答案3
我使用在 ES 前面運行的 Nginx 做了類似的事情。可以根據 URL 中的關鍵字在 Nginx 中設定「授權」。參考本文檔中定義的用例:http://www.elasticsearch.org/blog/playing-http-tricks-nginx/
答案4
我將 elasticsearch 綁定到 openvpn 隧道:
在 /etc/elasticsearch/elasticsearch.yml 中:
network.host: 172.16.xxx.xxx
其中172.16.xxx.xxx是openvpn所指派的IP位址。