Проект OpenSearch, созданный компанией Amazon, представляет собой форк поискового проекта, основанного на старых версиях Elasticsearch и Kibana. Эти проекты были созданы в первую очередь для поддержки Amazon OpenSearch Service (ранее Amazon Elasticsearch Service).
Что такое OpenSearch
Начиная с версии 7.11 (в феврале 2021 года), Elastic изменил лицензию продуктов на Elastic License v2 (ELv2) и SSPL, в связи с этим Amazon создал собственный форк на базе Elasticsearch 7.10.
OpenSearch – это распределенный, управляемый сообществом, лицензированный Apache 2.0, со 100 % открытым исходным кодом комплект поисковых и аналитических ресурсов для различных примеров использования, таких как:
- Мониторинг приложений в режиме реального времени
- Анализ журналов
- Поиск по веб-сайтам
OpenSearch представляет собой легко масштабируемую систему для обеспечения быстрого доступа и реагирования на большие объемы данных.
OpenSearch работает на базе поисковой библиотеки Apache Lucene и поддерживает ряд поисковых и аналитических возможностей, таких как поиск по методу k-ближайших соседей (KNN), SQL, обнаружение аномалий, Machine Learning Commons, Trace Analytics, полнотекстовый поиск и многое другое.
Установка OpenSearch в CentOS
Перед началом установки, необходимо изменить параметры ядра Linux следующим образом
1 2 | sudo echo vm.max_map_count=262144 >> /etc/sysctl.conf sudo sysctl -p |
Устанавливаем Java
1 | sudo yum install java |
Добавляем репозиторий Opensearch в CentOS
1 | curl https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/opensearch-2.x.repo|sudo tee /etc/yum.repos.d/opensearch-2.x.repo |
Рекомендуется, но не обязательно, формируем кеш yum командой ниже
1 | yum makecache |
И устанавливаем opensearch
1 | yum install opensearch |
Дожидаемся окончания установки. Нам остается только запустить службу opensearch
1 2 | sudo systemctl enable opensearch sudo systemctl start opensearch |
Проверим статус службы
1 | sudo systemctl status opensearch |
Так проверяем доступность API, логин и пароль по умолчанию admin:admin
1 | curl -X GET https://localhost:9200 -u 'admin:admin' --insecure |
так же, проверяем список доступных (установленных) плагинов
1 | curl -X GET https://localhost:9200/_cat/plugins?v -u 'admin:admin' --insecure |
Настройка OpenSearch
По умолчанию OpenSearch не привязан к сетевому интерфейсу и не может быть доступен внешним хостам. Кроме того, параметры безопасности заполнены именами пользователей и паролями по умолчанию. Следующие рекомендации позволят пользователю привязать OpenSearch к сетевому интерфейсу, создать и подписать сертификаты TLS, а также настроить базовую аутентификацию.
Следующие рекомендуемые настройки позволят вам:
- Привязать OpenSearch к IP-адресу или сетевому интерфейсу на хосте.
- Установить начальный и максимальный размеры кучи JVM.
- Определить переменную окружения, указывающую на поставляемый JDK.
- Настроить собственные сертификаты TLS - сторонний центр сертификации (ЦС) не требуется.
- Создайте пользователя admin с пользовательским паролем.
Если вы запустили сценарий демонстрации безопасности, то вам нужно будет вручную перенастроить измененные параметры. Прежде чем продолжить, обратитесь к разделу "Конфигурация безопасности".
Прежде чем изменять какие-либо файлы конфигурации, всегда полезно сохранить резервную копию перед внесением изменений. Резервный файл может быть использован для устранения любых проблем, вызванных неправильной конфигурацией.
Откройте файл opensearch.yml.
1 | sudo nano /etc/opensearch/opensearch.yml |
добавьте следующие строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Привяжите OpenSearch к правильному сетевому интерфейсу. Используйте 0.0.0.0 # для включения всех доступных интерфейсов или укажите IP-адрес. # назначенный определенному интерфейсу. network.host: 0.0.0.0 # Если вы еще не сконфигурировали кластер, вам следует установить # discovery.type на single-node, иначе проверки bootstrap будут # не сработают при попытке запустить службу. discovery.type: single-node # Если вы ранее отключили плагин безопасности в opensearch.yml, # обязательно включите его снова. В противном случае вы можете пропустить эту настройку. plugins.security.disabled: false |
Сохраните изменения и закройте файл.
Укажите начальный и максимальный размеры кучи JVM.
Откройте файл jvm.options.
1 | sudo nano /etc/opensearch/jvm.options |
Измените значения начального и максимального размеров кучи. В качестве отправной точки, вы должны установить эти значения на половину доступной системной памяти. Для выделенных хостов это значение может быть увеличено в зависимости от требований рабочего процесса.
Например, если хост-машина имеет 8 ГБ памяти, то начальный и максимальный размеры кучи следует установить на 4 ГБ:
1 2 | -Xms4g -Xmx4g |
Сохраните изменения и закройте файл.
Настройка TLS
Сертификаты TLS обеспечивают дополнительную безопасность вашего кластера, позволяя клиентам подтверждать идентичность узлов и шифровать трафик между клиентом и узлом. Для получения дополнительной информации обратитесь к разделам Настройка сертификатов TLS и Генерация сертификатов, которые включены в документацию Security Plugin. Для работы в среде разработки обычно достаточно самоподписанных сертификатов. В этом разделе мы расскажем вам об основных шагах, необходимых для создания собственных TLS сертификатов и их применения к вашему хосту OpenSearch.
Перейдите в каталог, где будут храниться сертификаты.
1 | cd /etc/opensearch |
Удалите демонстрационные сертификаты.
1 | sudo rm -f *pem |
Сгенерируйте корневой сертификат. Это то, что вы будете использовать для подписи других сертификатов.
1 | sudo openssl genrsa -out root-ca-key.pem 2048 |
Используйте закрытый ключ для создания самоподписанного корневого сертификата. Обязательно замените аргументы, переданные в -subj, чтобы они отражали ваш конкретный хост.
1 | sudo openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=ROOT" -out root-ca.pem -days 730 |
Далее создайте сертификат администратора. Этот сертификат используется для получения повышенных прав для выполнения административных задач, связанных с плагином безопасности.
Создайте закрытый ключ для сертификата администратора.
1 | sudo openssl genrsa -out admin-key-temp.pem 2048 |
Преобразуйте закрытый ключ в PKCS#8.
1 | sudo openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem |
Создайте запрос на подписание сертификата (CSR). Общее имя (CN) "A" является приемлемым, поскольку этот сертификат используется для аутентификации повышенного доступа и не привязан к хосту.
1 | sudo openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr |
Подпишите сертификат администратора с помощью корневого сертификата и закрытого ключа, которые вы создали ранее.
1 | sudo openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730 |
Создайте сертификат для конфигурируемого узла.
1 | sudo openssl genrsa -out node1-key-temp.pem 2048 |
Преобразуйте закрытый ключ в PKCS#8.
1 | sudo openssl pkcs8 -inform PEM -outform PEM -in node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node1-key.pem |
Создайте CSR и замените аргументы, переданные в -subj, чтобы они отражали ваш конкретный хост.
# CN должен соответствовать записи DNS A для хоста - не используйте имя хоста.
1 | sudo openssl req -new -key node1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node1.dns.a-record" -out node1.csr |
Создайте файл расширения, определяющий DNS-имя SAN для узла. Этот должно соответствовать записи DNS A хоста.
1 | sudo sh -c 'echo subjectAltName=DNS:node1.dns.a-record > node1.ext' |
Подпишите сертификат узла с помощью корневого сертификата и закрытого ключа, которые вы создали ранее.
1 | sudo openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node1.pem -days 730 -extfile node1.ext |
Удалите временные файлы, которые больше не нужны.
1 | sudo rm -f *temp.pem *csr *ext |
Убедитесь, что оставшиеся сертификаты принадлежат пользователю opensearch.
1 | sudo chown opensearch:opensearch admin-key.pem admin.pem node1-key.pem node1.pem root-ca-key.pem root-ca.pem root-ca.srl |
Добавьте эти сертификаты в opensearch.yml, как описано в разделе Генерация сертификатов. Опытные пользователи также могут добавить настройки с помощью сценария:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #! /bin/bash # Перед запуском этого сценария убедитесь, что вы заменили CN в # отличительном имени узла реальной записью DNS A. echo "plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/node1.pem" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/node1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.ssl.http.enabled: true" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/node1.pem" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/node1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.allow_default_init_securityindex: true" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.authcz.admin_dn:" | sudo tee -a /etc/opensearch/opensearch.yml echo " - 'CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.nodes_dn:" | sudo tee -a /etc/opensearch/opensearch.yml echo " - 'CN=node1.dns.a-record,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.audit.type: internal_opensearch" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.enable_snapshot_restore_privilege: true" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.check_snapshot_restore_write_privileges: true" | sudo tee -a /etc/opensearch/opensearch.yml echo "plugins.security.restapi.roles_enabled: [\"all_access\", \"security_rest_api_access\"]" | sudo tee -a /etc/opensearch/opensearch.yml |
(Необязательно) Добавьте доверие для самоподписанного корневого сертификата.
Скопируйте корневой сертификат в нужный каталог
1 | sudo cp /etc/opensearch/root-ca.pem /etc/pki/ca-trust/source/anchors/ |
Добавить доверие
1 | sudo update-ca-trust |
Настройка пользователя
Пользователи определяются и аутентифицируются OpenSearch различными способами. Один из способов, не требующий дополнительной инфраструктуры бэкенда, заключается в ручной настройке пользователей в файле internal_users.yml. Дополнительную информацию о настройке пользователей смотрите в разделе Файлы YAML. Следующие шаги объясняют, как удалить всех демонстрационных пользователей, кроме пользователя admin, и как заменить пароль admin по умолчанию с помощью скрипта.
Перейдите в каталог инструментов плагинов безопасности.
1 | cd /usr/share/opensearch/plugins/opensearch-security/tools |
Запустите файл hash.sh для генерации нового пароля. Этот сценарий завершится неудачно, если не определен путь к JDK.
1 | OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./hash.sh |
Введите нужный пароль в подсказке и запишите хэш на выходе.
Откройте файл internal_users.yml.
1 | sudo nano /etc/opensearch/opensearch-security/internal_users.yml |
Удалите всех демо-пользователей, кроме admin, и замените хэш на результат, полученный с помощью hash.sh в предыдущем шаге. Файл должен выглядеть так, как показано в следующем примере:
Применить изменения
Теперь, когда сертификаты TLS установлены, а демо-пользователи удалены или им присвоены новые пароли, остается последний шаг - применить изменения в конфигурации. Этот последний шаг настройки требует вызова securityadmin.sh, пока OpenSearch запущен на хосте.
OpenSearch должен быть запущен, чтобы securityadmin.sh применил изменения. Если вы внесли изменения в opensearch.yml, перезапустите OpenSearch.
1 | sudo systemctl restart opensearch |
Откройте отдельный термина на хосте и перейдите в каталог, содержащий securityadmin.sh.
1 | cd /usr/share/opensearch/plugins/opensearch-security/tools |
Запустите сценарий. Определения аргументов, которые необходимо передать, см. в разделе Применить изменения с помощью securityadmin.sh.
Вы можете опустить переменную окружения, если вы объявили ее в своем $PATH.
1 | OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./securityadmin.sh -cd /etc/opensearch/opensearch-security/ -cacert /etc/opensearch/root-ca.pem -cert /etc/opensearch/admin.pem -key /etc/opensearch/admin-key.pem -icl -nhnv |
Заключение
В данной статье мы обьяснили как установить и настроить OpenSearch в CentOS, которыя является альтернативой Elasticsearch под лицензией Apache 2.0, со 100 % открытым исходным кодом.