Як визначити доступ до безпеки в Elasticsearch? У мене є плагін elasticsearch-head, але ваш доступ не вимагає жодної безпеки.
Відповіді:
Плагін, згаданий у цій відповіді, більше не підтримується активно.
В еластичному пошуку немає вбудованого контролю доступу. Отже, вам потрібно буде встановити зворотний проксі-сервер (ось запис у блозі, як налаштувати nginx), скористайтеся одним із сторонніх плагінів elasticsearch, таким як https://github.com/Asquera/elasticsearch-http-basic, або скористайтеся служби безпеки плагін Shield .
<shamelessPlug>
Вибачте, але у мене є серйозні сумніви щодо всіх цих плагінів та проксі-серверів, які намагаються фіксувати запити лише за допомогою недбалих регулярних виразів на рівні HTTP.
Чи будете ви регулярно виражати всі можливі синтаксиси ES, які можуть виконувати запис? Як фільтрувати за індексом? Як щодо псевдонімів індексу? Запити з кількома індексами?
Єдиний чистий спосіб контролю доступу - ПІСЛЯ ElasticSearch проаналізував запити. Зрештою, це саме те, що робить Щит!
Я написав плагін з ліцензією MIT ( readonly-rest-plugin ), який робить саме це.
Ви можете відповідати запиту за допомогою:
✔️ Ім'я хоста, IP та IP із мережевою маскою
✔️ Індекси (підтримуються узагальнюючі символи) та псевдоніми індексу вирішені
✔️ HTTP Basic Auth
Він також має першокласну підтримку автентифікації Kibana :)
</shamelessPlug>
Elasticsearch тепер має плагін безпеки http://www.elasticsearch.org/blog/shield-know-security-coming-soon/
Оновлення : Ця робота працює досить добре, і є (для функцій moste) безкоштовною та відкритою: https://github.com/floragunncom/search-guard
ПРИМІТКА. Згаданий у цій статті плагін більше не підтримується
Можливо, це допомагає: https://github.com/salyh/elasticsearch-security-plugin
Цей плагін додає функцію захисту http / rest до Elasticsearch у вигляді окремих модулів. Замість Netty для обробки запитів http / rest використовується вбудований Tomcat 7.
В даний час для автентифікації та авторизації на основі користувачів Kerberos та NTLM підтримуються за допомогою вафлі сторонніх бібліотек (лише на серверах Windows). Для серверів UNIX Kerberos підтримується через сторонні бібліотеки tomcatspnegoad (Працює з будь-якою реалізацією kerberos. Для авторизації підтримується як Active Directory, так і загальний LDAP).
Ви можете використовувати цей плагін також без Kerberos / NTLM, але тоді доступна лише автентифікація на основі хосту.
Єдиний кращий спосіб увімкнути безпеку в Elasticsearch - це плагін X-Pack.
https://www.elastic.co/guide/uk/x-pack/current/xpack-introduction.html
Це багатоцільовий плагін, який добре підходить для цілей безпеки, оскільки ви також можете використовувати моніторинг та налаштовувати попередження та сповіщення відповідно до ваших потреб.
Оскільки це вже є загальновизнаним, я впевнений, що Elasticsearch продовжить це для входу.
Якщо ви хочете використовувати базову автентифікацію за допомогою Kibana3, ось моє рішення:
https://github.com/fangli/kibana-authentication-proxy
Підтримка не лише бекенда basicAuth ES, але також GoogleOAuth та BasicAuth для клієнта. Будь ласка, дайте зірочку, якщо це вам підходить, дякую.
Спробуйте Щит . Він має аутентифікацію та авторизацію. Наразі йому потрібна ліцензія. Незабаром люди створять подібні плагіни з відкритим кодом.
Я дуже новачок у ElasticSearch, але я вважаю, що плагін X-Pack повинен з’явитися тут як відповідь: https://www.elastic.co/guide/en/x-pack/current/index.html
Наскільки я розумію, зараз X-Pack є фактичним стандартом захисту ElasticSearch (і багато іншого), включаючи аутентифікацію.
Щодо конкретного вирішення цієї проблеми, я натрапив на таке, що являє собою просту реалізацію підходу зворотного проксі, як згадано в інших відповідях:
https://gist.github.com/jpluscplusm/9227777
Як застереження, здається, що принаймні деякі власники Elasticsearch не вважають nginx оптимальним рішенням, але я думаю, що це залежить від особливостей ваших вимог до автентифікації (RBAC, кількість користувачів, кількість індексів, частота модифікацій списку доступу ). Для деяких користувачів (включаючи мене самого) достатньо першого прикладу.
http://www.elasticsearch.org/blog/restricting-users-kibana-filtered-aliases/
Якщо ви виявите, що nginx не відповідає вашим вимогам, щось подібне може працювати: https://github.com/lukas-vlcek/node.es
Оскільки ElasticSearch - це свого роду служба баз даних, ви, мабуть, все одно не хотіли б, щоб вона була виставлена публічно.
Я не довіряю плагінам робити це для мене, тому я зробив це з проксі nginx.
Цей підручник дуже корисний:
Починаючи з Elasticверсії 6.8 , деякі функції безпеки стали безкоштовними (читайте: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free )
"xpack.security.enabled=true".Наприклад, якщо ви використовуєте docker-compose.ymlфайл, додайте рядок під environment:
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
Далі вам потрібно буде вказати, elasicякий пароль повинен прийняти користувач за замовчуванням (який називається «еластичним») для автентифікації. Ви робите це із ELASTIC_PASSWORDзмінною середовища. У нашому прикладі:
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
- "ELASTIC_PASSWORD=123456"
Тепер ви готові йти. Коли ви біжите еластично:
docker run --rm --name elastic -p 9200:9200 -v ELASTIC_PASSWORD=123456 -v xpack.security.enabled=true elastic:6.8.0
І зробіть:, curl localhost:9200Ви отримаєте повідомлення про помилку:
{"error": {"root_cause": [{"type": "security_exception", "reason": "відсутній маркер автентифікації для запиту REST [/]", "header": {"WWW-Authenticate": "Основна сфера = \ "security \" charset = \ "UTF-8 \" "}}]]," type ":" security_exception "," причина ":" відсутній маркер автентифікації для запиту REST [/] "," header ": {" WWW-Автентифікація ":" Основна сфера = \ "безпека \" charset = \ "UTF-8 \" "}}," статус ": 401}
Що саме вам потрібно (без імені користувача та пароля, тому доступ заборонений)
Дуже важливо пам’ятати :
При Elasticзапуску відбувається попередня підготовка Bootstrap checks( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).
Існує різниця Elasticміж режимом "розробки" та "виробництва" під час проведення цих перевірок.
Якщо elasticпрацює в productionрежимі, цих конфігурацій недостатньо (перевірка Bootstrap не вдасться, і БД не буде працювати). Ви також повинні додати конфігурації SSL-шифрування між вузлами. Детальніше: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html