ProHoster > Блог > адміністрування > Elastic під замком: включаємо опції безпеки кластера Elasticsearch для доступу зсередини та зовні
Elastic під замком: включаємо опції безпеки кластера Elasticsearch для доступу зсередини та зовні
Elastic Stack - відомий інструмент на ринку SIEM-систем (загалом, не тільки їх). Може збирати багато різнокаліберних даних, як чутливих, так і не дуже. Не зовсім правильно, якщо доступ до елементів Elastic Stack не буде захищений. За замовчуванням всі коробки Elastic (Elasticsearch, Logstash, Kibana і колектори Beats) працюють за відкритими протоколами. А у самій Kibana відключено автентифікацію. Всі ці взаємодії можна убезпечити і в цій статті ми розповімо, як це зробити. Для зручності розділили оповідь на 3 смислових блоки:
Рольова модель доступу до даних
Безпека даних всередині кластера Elasticsearch
Безпека даних поза кластером Elasticsearch
Деталі під катом.
Рольова модель доступу до даних
Якщо встановити Elasticsearch і ніяк його тюнити - доступ до всіх індексів буде відкритий для всіх бажаючих. Ну, або тих, хто може користуватися curl. Щоб цього уникнути, в Elasticsearch є рольова модель, яка доступна з підписки рівня Basic (вона безкоштовна). Схематично виглядає приблизно так:
Що на зображенні
Користувачі - це всі, хто може авторизуватися з використанням облікових даних.
Ресурси – це індекси, документи, поля, користувачі та інші суб'єкти сховища (рольова модель для деяких ресурсів доступна лише у платних підписках).
У Elasticsearch за замовчуванням є коробкові користувачі, до яких прив'язані коробкові ролі. Після ввімкнення налаштувань безпеки їх можна одразу починати використовувати.
Щоб активувати безпеку в налаштуваннях Elasticsearch, потрібно додати конфігураційний файл (за замовчуванням це elasticsearch/config/elasticsearch.yml) новий рядок:
xpack.security.enabled: true
Після зміни файлу конфігурації запускаємо або перезапускаємо Elasticsearch, щоб зміни набули чинності. Наступний крок – присвоєння паролів коробковим користувачам. Зробимо це інтерактивно за допомогою команди нижче:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
перевіряємо:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Можна ляснути себе по плечу - налаштування на стороні Elasticsearch виконані. Тепер настала черга налаштувати Kibana. Якщо запустити її зараз, посиплються помилки, тому важливо створити сховище ключів. Робиться це у дві команди (користувач кібана і пароль, введений на етапі створення паролів в Elasticsearch):
Якщо все правильно - Kibana почне просити логін та пароль. У підписці рівня Basic є рольова модель на основі внутрішніх користувачів. Починаючи з Gold, можна підключати зовнішні системи аутентифікації — LDAP, PKI, Active Directory та системи Single sign-on.
Права доступу до об'єктів всередині Elasticsearch також можна обмежити. Щоправда, щоб те саме зробити для документів або полів, буде потрібно платна підписка (ця розкіш починається з рівня Platinum). Ці налаштування доступні в інтерфейсі Kibana або через Security API. Можна перевірити вже через знайоме меню Dev Tools:
Коли Elasticsearch працює в кластері (а це звичайна справа), важливими стають налаштування безпеки всередині кластера. Для безпечної взаємодії між нодами, Elasticsearch використовує протокол TLS. Щоб налаштувати безпечну взаємодію між ними, потрібний сертифікат. Генеруємо сертифікат та приватний ключ у PEM-форматі:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem
Після виконання команди вище, у директорії /../elasticsearch з'явиться архів elastic-stack-ca.zip. Усередині нього виявляться сертифікат та приватний ключ із розширеннями crt и ключ відповідно. Їх бажано викласти на shared ресурс, до якого має бути доступ з усіх нод кластера.
Для кожної ноди тепер потрібні свої сертифікати та приватні ключі на основі тих, що лежать у shared директорії. Під час виконання команди попросять задати пароль. Можна додати додаткові опції -ip і -dns для повної верифікації нод, що взаємодіють.
За підсумками виконання команди отримаємо сертифікат та приватний ключ у форматі PKCS#12, захищений паролем. Залишилось перемістити згенерований файл p12 у директорію із конфігурацією:
Є ще одна опція безпеки — фільтрація IP-адрес (доступна у підписках від рівня Gold). Дозволяє створювати білі списки IP-адрес, з яких можна звертатися до нодів.
Безпека даних поза кластером Elasticsearch
Поза кластером означає підключення зовнішніх інструментів: Kibana, Logstash, Beats або інші зовнішні клієнти.
Щоб налаштувати підтримку https (замість http), додамо до elasticsearch.yml нові рядки:
Після додавання ключів ноди Elasticsearch готові до підключення по https. Тепер їх можна запустити.
Наступний крок — створення ключа для підключення Kibana та його додавання до конфігурації. На основі сертифікату, який вже розміщений у shared директорії, згенеруємо сертифікат у PEM-форматі (PKCS#12 Kibana, Logstash та Beats поки не підтримують):
Ключі є, значить, залишилося змінити конфігурацію Kibana, щоб вона почала їх використовувати. У файлі конфігурації kibana.yml змінюємо http на https і додаємо рядки з налаштуваннями SSL-підключення. Останні три рядки налаштовують безпечну взаємодію між браузером користувача та Kibana.
Таким чином, налаштування виконані і доступ до даних в кластері Elasticsearch зашифрований.
Якщо у вас є питання щодо можливостей Elastic Stack на безкоштовних або платних підписках, завдання моніторингу або створення SIEM-системи залиште запит у формі зворотного зв'язку на нашому сайті.