Аутентифікація в Elasticsearch


76

Як визначити доступ до безпеки в Elasticsearch? У мене є плагін elasticsearch-head, але ваш доступ не вимагає жодної безпеки.

Відповіді:


63

Плагін, згаданий у цій відповіді, більше не підтримується активно.


В еластичному пошуку немає вбудованого контролю доступу. Отже, вам потрібно буде встановити зворотний проксі-сервер (ось запис у блозі, як налаштувати nginx), скористайтеся одним із сторонніх плагінів elasticsearch, таким як https://github.com/Asquera/elasticsearch-http-basic, або скористайтеся служби безпеки плагін Shield .


Велике спасибі за підказку. Був досвід роботи з elasticsearch-http-basic? Добре чи погано?
Роберт Рейз,

Зворотний проксі-сервер, такий як nginx, надасть вам більше можливостей безпеки, включаючи підтримку SSL.
Ендрю

4
Ось також кулінарна книга шеф-кухаря для ElasticSearch, яка забезпечує простий спосіб встановити ElasticSearch із зворотним проксі-сервером за допомогою Nginx. github.com/elasticsearch/cookbook-elasticsearch
Том Роджерс

Деякі функції безпеки є безкоштовними, починаючи з версій 6.8.0 та 7.1.0 . Детальніше: elastic.co/blog/security-for-elasticsearch-is-now-free
Aaron_ab

11

<shamelessPlug>

Вибачте, але у мене є серйозні сумніви щодо всіх цих плагінів та проксі-серверів, які намагаються фіксувати запити лише за допомогою недбалих регулярних виразів на рівні HTTP.

Чи будете ви регулярно виражати всі можливі синтаксиси ES, які можуть виконувати запис? Як фільтрувати за індексом? Як щодо псевдонімів індексу? Запити з кількома індексами?

Єдиний чистий спосіб контролю доступу - ПІСЛЯ ElasticSearch проаналізував запити. Зрештою, це саме те, що робить Щит!

Я написав плагін з ліцензією MIT ( readonly-rest-plugin ), який робить саме це.

Ви можете відповідати запиту за допомогою:

  • ✔️ Ім'я хоста, IP та IP із мережевою маскою

  • ✔️ Індекси (підтримуються узагальнюючі символи) та псевдоніми індексу вирішені

  • ✔️ HTTP Basic Auth

Він також має першокласну підтримку автентифікації Kibana :)

</shamelessPlug>


7

Elasticsearch тепер має плагін безпеки http://www.elasticsearch.org/blog/shield-know-security-coming-soon/


17
Примітка: Щит - це комерційний продукт.
David Ammouial

1
Зараз це реальність: elastic.co/products/shield Ця відповідь надходить пізно, але корисна для нових читачів.
raulsaeztapia

2
@rsaez Проте це комерційний продукт із 30-денною пробною версією.
polkovnikov.ph

6

Оновлення : Ця робота працює досить добре, і є (для функцій 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, але тоді доступна лише автентифікація на основі хосту.


4

Єдиний кращий спосіб увімкнути безпеку в Elasticsearch - це плагін X-Pack.

https://www.elastic.co/guide/uk/x-pack/current/xpack-introduction.html

Це багатоцільовий плагін, який добре підходить для цілей безпеки, оскільки ви також можете використовувати моніторинг та налаштовувати попередження та сповіщення відповідно до ваших потреб.

Оскільки це вже є загальновизнаним, я впевнений, що Elasticsearch продовжить це для входу.


3

Якщо ви хочете використовувати базову автентифікацію за допомогою Kibana3, ось моє рішення:

https://github.com/fangli/kibana-authentication-proxy

Підтримка не лише бекенда basicAuth ES, але також GoogleOAuth та BasicAuth для клієнта. Будь ласка, дайте зірочку, якщо це вам підходить, дякую.


Чи можете ви надати посилання на те, як цим користуватися? Я встановив його та склав програму, але не знайшов допомоги в Інтернеті щодо використання.
Сіддхарт Тріха

3

Спробуйте Щит . Він має аутентифікацію та авторизацію. Наразі йому потрібна ліцензія. Незабаром люди створять подібні плагіни з відкритим кодом.


3

Я дуже новачок у ElasticSearch, але я вважаю, що плагін X-Pack повинен з’явитися тут як відповідь: https://www.elastic.co/guide/en/x-pack/current/index.html

Наскільки я розумію, зараз X-Pack є фактичним стандартом захисту ElasticSearch (і багато іншого), включаючи аутентифікацію.


1
Ліцензія X-Pack коштує тисячі доларів за вузол. Elastic Cloud включає X-Pack і починає дешевше. Інший варіант - сторонні плагіни.
Марек Томан

2

Щодо конкретного вирішення цієї проблеми, я натрапив на таке, що являє собою просту реалізацію підходу зворотного проксі, як згадано в інших відповідях:

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


2

Оскільки ElasticSearch - це свого роду служба баз даних, ви, мабуть, все одно не хотіли б, щоб вона була виставлена ​​публічно.

Я не довіряю плагінам робити це для мене, тому я зробив це з проксі nginx.

Цей підручник дуже корисний:

http://www.minvolai.com/blog/2014/08/Setting-up-a-Secure-Single-Node-Elasticsearch-server-behind-Nginx/Setting-up-a-Secure-Single-Node-Elasticsearch- сервер позаду Nginx /


2
Я розумію, що ви їм не довіряєте, але ви не можете бути впевнені, що виконуєте справжню ізоляцію індексу, якщо у вас немає доступу до внутрішнього аналізатора ElasticSearch :) Ось чому я написав це: github.com/sscarduzio/ elasticsearch-readonlyrest-plugin
sscarduzio

2

Починаючи з Elasticверсії 6.8 , деякі функції безпеки стали безкоштовними (читайте: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free )

Деякі основні кроки для базової автентифікації

  1. Найголовніша конфігурація пари для безлічі: "xpack.security.enabled=true".

Наприклад, якщо ви використовуєте docker-compose.ymlфайл, додайте рядок під environment:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
  1. Далі вам потрібно буде вказати, 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}

Що саме вам потрібно (без імені користувача та пароля, тому доступ заборонений)

Дуже важливо пам’ятати :

  1. При Elasticзапуску відбувається попередня підготовка Bootstrap checks( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).

  2. Існує різниця Elasticміж режимом "розробки" та "виробництва" під час проведення цих перевірок.

  3. Якщо elasticпрацює в productionрежимі, цих конфігурацій недостатньо (перевірка Bootstrap не вдасться, і БД не буде працювати). Ви також повинні додати конфігурації SSL-шифрування між вузлами. Детальніше: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.