OpenSearch - это пакет для поиска и аналитики с открытым исходным кодом. Разработчики создают решения для поиска, наблюдаемости данных, ввода данных и многого другого, используя OpenSearch.
Еще один популярный вариант использования - аналитика журналов. Вы берете журналы приложений, серверов и сетевых элементов, передаете их в OpenSearch и используете богатые возможности поиска и визуализации для выявления проблем. Например, неисправный веб-сервер может выдавать ошибку 500 в 0,5% случаев, что может быть трудно заметить, если у вас нет графика всех кодов состояния HTTP, которые сервер выдавал в реальном времени за последние двадцать четыре часа. Вы можете использовать OpenSearch Dashboards для создания подобных визуализаций на основе данных из OpenSearch.
OpenSearch предлагается под лицензией Apache Software License, версия 2.0, что означает, что это бесплатное программное обеспечение с открытым исходным кодом и поддерживается сообществом. OpenSearch и Dashboards первоначально были получены из Elasticsearch 7.10.2 и Kibana 7.10.2.
Проекты с открытым исходным кодом часто сопровождаются очень активными сообществами. OpenSearch имеет более 1,4 миллиона загрузок и тысячи звезд в 70+ репозиториях GitHub. Проект OpenSearch также входит в топ-5 поисковых систем в рейтингах DB engine.
Установка OpenSearch из репозитория APT
APT, основной инструмент управления пакетами для операционных систем на базе Debian, позволяет вам загрузить и установить пакет Debian из репозитория APT.
Установите Java
1 | sudo apt install default-jre |
Установите дополнительные пакеты, неоходимые для установки GPG ключей.
1 | sudo apt install curl gnupg2 |
Импортируйте открытый ключ GPG. Этот ключ используется для проверки того, что репозиторий APT подписан.
1 | curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo apt-key add - |
Создайте репозиторий APT для OpenSearch
1 | echo "deb https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/opensearch-2.x.list |
убедитесь, что репозиторий был добавлен.
1 | sudo apt-get update |
Добавив информацию о репозитории, перечислите все доступные версии OpenSearch:
1 | sudo apt list -a opensearch |
Выберите версию OpenSearch, которую вы хотите установить:
Если не указано иное, устанавливается последняя доступная версия OpenSearch.
1 | sudo apt-get install opensearch |
Чтобы установить определенную версию OpenSearch, укажите версию вручную, используя opensearch=[version]
1 | sudo apt-get install opensearch=2.6.0 |
После завершения установки включите автоматический запуск OpenSearch.
1 | sudo systemctl enable opensearch |
и запустите службу OpenSearch.
1 | sudo systemctl start opensearch |
Убедитесь, что OpenSearch запустился правильно.
1 | sudo systemctl status opensearch |
Прежде чем приступать к настройке, необходимо протестировать установку OpenSearch. В противном случае может быть трудно определить, вызваны ли будущие проблемы проблемами установки или пользовательскими настройками, которые вы применили после установки.
Когда OpenSearch устанавливается с помощью пакета Debian, некоторые демонстрационные настройки безопасности применяются автоматически. Они включают самоподписанные сертификаты TLS и несколько пользователей и ролей. Если вы хотите настроить их самостоятельно, смотрите раздел Настройка OpenSearch в вашей среде.
Узел OpenSearch в конфигурации по умолчанию (с демонстрационными сертификатами и пользователями с паролями по умолчанию) не подходит для производственной среды. Если вы планируете использовать узел в производственной среде, вам следует, как минимум, заменить демонстрационные TLS-сертификаты на собственные TLS-сертификаты и обновить список внутренних пользователей и паролей. Дополнительные рекомендации по обеспечению конфигурации узлов в соответствии с требованиями безопасности см. в разделе Конфигурация безопасности.
Отправьте запросы на сервер, чтобы убедиться, что OpenSearch запущен. Обратите внимание на использование флага --insecure, который необходим, поскольку сертификаты TLS являются самоподписанными.
Отправьте запрос на порт 9200:
1 | curl -X GET https://localhost:9200 -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 в Debian, которыя является альтернативой Elasticsearch под лицензией Apache 2.0, со 100 % открытым исходным кодом.