<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/8129

            0x00 前言


            Elasticsearch(以下簡稱es)被越來越多的公司廣泛使用,而其本身安全問題也備受關注,最近出現的安全問題比較多,例如影響比較大的漏洞有CVE-2014-3120和CVE-2015-1427。

            這些漏洞和es本身沒有認證授權機制有很大關系,同時公司內部多業務使用使用同一套es集群的情況非常多,如何做好認證授權的管理的問題尤為凸顯。

            官方竟然將安全模塊Shield作為收費模塊,所以普及率并不高。本著為公司省下仨瓜倆棗的精神尋找其他的解決方案。實現過程中走了一些彎路,記錄下來以方便其他遇到這些問題的同仁。

            0x01 需求


            隨著es的普及,對安全的需求越來越多,例如:

            0x02 方案選擇


            需求已確定,經過一番尋找得到以下幾種方案備選。、

            大家應該能猜到最終的選擇了,沒錯就是方案#4。

            0x03 安裝和配置


            準備工作

            目前官方對es1.5和1.6支持比較好,兩個版本安裝方法不同,

            直接使用插件安裝 ,

             bin/plugin -i com.floragunn/search-guard/0.5
            

            首先需要安裝maven,

            #!bash
            wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
            

            解壓后將bin目錄添加到環境變量PATH中。

            下載編譯相關依賴

            git clone -b es1.6 https://github.com/floragunncom/search-guard.git cd search-guard mvn package -DskipTests bin/plugin -u file:./target/search-guard-16-0.6-SNAPSHOT.jar -i search-guard

            配置

            Search guard配置分為2部分,一部分是elasticsearch.yml以及logging.yml文件。另一部分存儲在es中。

            1. elasticsearch.yml 主要內容包括search guard的一些開關,ssl支持的配置,認證方式,權限控制的filter等。 下面我們來完成一個最小化的配置: 直接將git中searchguard_config_template.yml內容粘貼到elasticsearch.yml, 然后打開

            searchguard.allow_all_from_loopback: true

            以方便本地調試。 另外需要注意的一個選項是

            searchguard.key_path: /path/key

            searchguard_node.key文件的路徑。 默認配置已開啟basic認證,

            searchguard.authentication.authentication_backend.impl: com.floragunn.searchguard.authentication.backend.simple.SettingsBasedAuthenticationBackend searchguard.authentication.authorizer.impl: com.floragunn.searchguard.authorization.simple.SettingsBasedAuthorizator searchguard.authentication.http_authenticator.impl: com.floragunn.searchguard.authentication.http.basic.HTTPBasicAuthenticator

            設置用戶名和密碼

            searchguard.authentication.settingsdb.user.: password searchguard.authentication.settingsdb.user.admin: adminpass searchguard.authentication.settingsdb.user.user: userpass

            給用戶分配角色,admin為超級管理員,角色為rootuser為只讀用戶橘色。

            searchguard.authentication.authorization.settingsdb.roles.: searchguard.authentication.authorization.settingsdb.roles.admin: ["root"] searchguard.authentication.authorization.settingsdb.roles.user: ["readonly"]

            設置filter,我設置兩個權限,readonlydeny權限, readonly的filter只允許讀操作,以及kibana必須的兩個操作,禁止寫操作。

            searchguard.actionrequestfilter.names: ["readonly","deny"] searchguard.actionrequestfilter.readonly.allowed_actions: ["indices:data/read/","indices:admin/exists","indices:admin/mappings/"] searchguard.actionrequestfilter.readonly.forbidden_actions: ["indices:data/write/*"]

            deny filter禁止所有的操作。

            searchguard.actionrequestfilter.deny.allowed_actions: [] searchguard.actionrequestfilter.deny.forbidden_actions: ["cluster:", "indices:"]

            logging.yml 最后加入

            logger.com.floragunn: DEBUG

            開啟search guard的調試級別,以方便調試。 至此文件配置部分基本完成,下面設置ACL,將剛配置的rolesfiltersindices關聯起來。

            curl -XPUT 'http://localhost:9200/searchguard/ac/ac?pretty' -d ' {"acl": [ { "Comment": "這條是DEFAULT規則,必須要有,默認的權限是readonly", "filters_bypass": [], "filters_execute": ["actionrequestfilter.readonly"] }, { "Comment": "root角色的賬號可以繞過所有的filter", "roles": [ "root" ], "filters_bypass": [""], "filters_execute": [] }, { "Comment": "readonly角色對于logstash的索引沒有權限訪問", "roles" : ["readonly"], "indices": ["logstash*"], "filters_bypass": [], "filters_execute": ["actionrequestfilter.deny"] }, { "Comment": "readonly角色對于logs和.kibana索引有只讀的權限", "roles" : ["readonly"], "indices": ["logs",".kibana"], "filters_bypass": [""], "filters_execute": ["actionrequestfilter.readonly"] }

            ]}'

            為了看著方便,JSON格式化后是這個樣子

            {
                "acl": [
                    {
                        "Comment": "這條是DEFAULT規則,必須要有,默認的權限是readonly",
                        "filters_bypass": [],
                        "filters_execute": [
                            "actionrequestfilter.readonly"
                        ]
                    },
                    {
                        "Comment": "root角色的賬號可以繞過所有的filter",
                        "roles": [
                            "root"
                        ],
                        "filters_bypass": [
                            ""
                        ],
                        "filters_execute": []
                    },
                    {
                        "Comment": "readonly角色對于logstash的索引沒有權限訪問",
                        "roles": [
                            "readonly"
                        ],
                        "indices": [
                            "logstash*"
                        ],
                        "filters_bypass": [],
                        "filters_execute": [
                            "actionrequestfilter.deny"
                        ]
                    },
                    {
                        "Comment": "readonly角色對于logs和.kibana索引有只讀的權限",
                        "roles": [
                            "readonly"
                        ],
                        "indices": [
                            "logs",
                            ".kibana"
                        ],
                        "filters_bypass": [
                            ""
                        ],
                        "filters_execute": [
                            "actionrequestfilter.readonly"
                        ]
                    }
                ]
            }
            

            這樣我就做到了關鍵數據索引logstash*只允許admin用戶訪問,而user賬號可以對logskibana進行只讀操作,大家可以自行測試。 這里順便解決了kibana本身沒有權限控制的問題,對于dashborad展示分享給user用戶,也不用擔心他們會對圖標設置進行誤操作而影響其他用戶使用。

            0x04 總結


            其實search guard的功能遠不止以上介紹的這些,例如細化到字段或者文檔級別的ACL;節點之間通過SSL同步數據;使用ladp或者AD賬號進行驗證等功能希望后續能給大家帶來介紹。

            愿本文能起到拋磚引玉的效果。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线