[Системное администрирование, IT-инфраструктура, Серверное администрирование, DevOps] Сервер Prometheus и TLS (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Prometheus теперь поддерживает TLS и базовую аутентификацию для HTTP эндпоинтов.
Скрейпинг таргетов через HTTPS вместо HTTP поддерживается уже давно. Метрики можно собирать с поддержкой HTTPS, аутентификации по клиентским сертификатам и базовой аутентификации.
В прошлом году Node Exporter стал первым официальным экспортером, который нативно предоставляет метрики по HTTPS. Все подробности в предыдущем посте. На этой неделе (прим. переводчика: статья вышла 6 января 2021 года) мы встречаем Prometheus 2.24.0. В последнее время Prometheus радует нас крутыми новшествами — это и TLS, и backfilling (обратное заполнение, тоже в версии 2.24) и даже переход на современный пользовательский интерфейс на React.
В этом посте мы расскажем о TLS и базовой аутентификации.
Здесь можно узнать больше о модели безопасности Prometheus и о том, как пожаловаться на уязвимости.
Если вы обнаружили в Prometheus, официальном экспортере или библиотеке какую-нибудь критическую уязвимость, не рассказывайте об этом публично, а сообщите нам, чтобы мы все исправили.
API для администрирования и управления жизненным циклом
По умолчанию Prometheus предоставляет эндпоинты API только для запроса данных. При необходимости можно включить еще эндпоинты для управления жизненным циклом (перезагрузка конфигурации, выход) и для администрирования (удаление метрик, создание снапшотов).
При этом нужно будет защитить порт Prometheus, например, с помощью аутентификации.
Защита доступа к Prometheus
Раньше между клиентами и сервером Prometheus для защиты обычно ставили обратный прокси:
С такой конфигурацией можно не только управлять доступом и шифрованием, но и автоматизировать создание сертификатов, использовать троттлинг, дополнительные средства контроля, изменения имен (mangling) и так далее. За задачи балансировщиков нагрузки и обратных прокси Prometheus не отвечает, так что продолжайте использовать обратный прокси, если вам нужны эти расширенные функции.
Если ваш сценарий попроще или нужно защитить трафик между обратным прокси и Prometheus, теперь у вас есть встроенные средства для защиты входящего HTTP-трафика.
Как настроить TLS
Посмотрим, как это работает на практике, на примере Prometheus на Linux.
Настройка рабочего каталога
Мы будем работать в отдельном каталоге:
$ mkdir ~/prometheus_tls_example
$ cd ~/prometheus_tls_example
Создание TLS-сертификатов
Для начала создадим самоподписанный TLS-сертификат.
$ cd ~/prometheus_tls_example
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout prometheus.key -out prometheus.crt -subj "/C=BE/ST=Antwerp/L=Brasschaat/O=Inuits/CN=localhost" -addext "subjectAltName = DNS:localhost"
Здесь localhost — это имя хоста для сервера Prometheus.
Создается два файла: prometheus.crt и prometheus.key.
Веб-конфигурация Prometheus
Скачиваем Prometheus v2.24.0, распаковываем, переносим сертификаты, которые создали выше:
$ cd ~/prometheus_tls_example
$ wget https://github.com/prometheus/prometheus/releases/download/v2.24.0/prometheus-2.24.0.linux-amd64.tar.gz
$ tar xvf prometheus-2.24.0.linux-amd64.tar.gz
$ cp prometheus.crt prometheus.key prometheus-2.24.0.linux-amd64
$ cd prometheus-2.24.0.linux-amd64
Сейчас нужно создать новый файл конфигурации. Мы не будем настраивать TLS и аутентификацию в основном файле конфигурации prometheus.yml. Это позволит нам перечитывать отдельный файл конфигурации при каждом запросе, чтобы на лету подхватывать новые учетки и сертификаты.
Создадим файл web.yml с конфигурацией TLS:
tls_server_config:
cert_file: prometheus.crt
key_file: prometheus.key
Запускаем сервер Prometheus, указывая --web.config.file в командной строке:
$ ./prometheus --web.config.file=web.yml
[...]
enabled and it cannot be disabled on the fly." http2=true
level=info ts=2021-01-05T13:27:53.677Z caller=tls_config.go:223 component=web
msg="TLS is enabled." http2=true
Если мы видим это сообщение, сервер Prometheus запущен с поддержкой TLS.
Примечание: Все параметры TLS можно менять динамически, но если уж мы включили TLS, то без перезапуска Prometheus его не отключишь.
Подробности об этом дополнительном файле конфигурации смотрите в документации.
Проверка конфигурации TLS вручную
В curl проверим конфигурацию TLS. В новом терминале запустим пару команд для теста:
$ cd ~/prometheus_tls_example
$ curl localhost:9090/metrics
Client sent an HTTP request to an HTTPS server.
$ curl --cacert prometheus.crt https://localhost:9090/metrics
[...]
Вместо --cacert prometheus.crt можно передать -k, чтобы пропустить проверку
сертификата в curl.
Конфигурация скрейпа
Настроить TLS выборочно не получится — если он включен, он распространяется на все эндпоинты. Это значит, что собственные метрики Prometheus тоже будет извлекать через TLS, поэтому настроим использование HTTPS.
Изменим задание prometheus в файле prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scheme: https
tls_config:
ca_file: prometheus.crt
static_configs:
- targets: ['localhost:9090']
Для tls_config и scheme установим https. Полный список параметров клиента tls_config см. в конфигурации Prometheus.
Перечитаем конфигурацию Prometheus:
$ killall -HUP prometheus
Откроем https://localhost:9090/targets локально в браузере и увидим https://localhost:9090/metrics в списке таргетов.
Таргет имеет статус UP? Ура! Мы настроили TLS для сервера Prometheus и теперь собираем метрики с шифрованием.
Как настроить базовую аутентификацию
Давайте пойдем еще дальше и затребуем имя пользователя и пароль. TLS здесь не обязателен, но крайне рекомендуется (настраивать его мы уже умеем).
Веб-конфигурация
Для начала создадим хэш паролей (с помощью bcrypt). Для этого используем команду htpasswd (пакет apache2-utils или httpd-tools есть в дистрибутиве; если это не продакшен, можно найти генераторы bcrypt онлайн).
$ htpasswd -nBC 10 "" | tr -d ':\n'
New password:
Re-type new password:
$2y$10$EYxs8IOG46m9CtpB/XlPxO1ei7E4BjAen0SUv6di7mD4keR/8JO6m
Для примера возьмем пароль inuitsdemo.
Добавим пользователя в файл веб-конфигурации Prometheus web.yml:
tls_server_config:
cert_file: prometheus.crt
key_file: prometheus.key
basic_auth_users:
prometheus: $2y$10$EYxs8IOG46m9CtpB/XlPxO1ei7E4BjAen0SUv6di7mD4keR/8JO6m
Примечание: В этом файле prometheus — это имя пользователя.
Если Prometheus еще запущен, введите пароль для доступа к веб-интерфейсу по адресу https://127.0.0.1:9090, иначе на странице targets для таргета будет отображаться ошибка 401 Unauthorized.
Конфигурация Prometheus
Внесём изменения в prometheus.yml, чтобы скрейпинг шёл с использованием логина и пароля.
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scheme: https
basic_auth:
username: prometheus
password: inuitsdemo
tls_config:
ca_file: prometheus.crt
static_configs:
- targets: ['localhost:9090']
Перезагрузим конфигурацию Prometheus сигналом SIGHUP:
$ killall -HUP prometheus
Если все работает, Prometheus снова откроет страницу targets.
Promtool
У Prometheus есть свой инструмент командной строки — promtool, которым теперь можно проверять и файлы веб-конфигурации:
$ ./promtool check web-config web.yml
web.yml SUCCESS
Используйте любой инструмент автоматизации для удобного обновления файлов web.yml.
Grafana
Grafana поддерживает все необходимые функции для подключения к серверу Prometheus. Можно указать CA (наш prometheus.crt) или пропустить проверку сертификатов.
Заключение
Это только общий обзор. В продакшене нужно будет использовать подходящий CA и продумать еще много деталей. Можно настроить клиентские сертификаты, но из соображений безопасности эта функция считается экспериментальной. Со временем поддерживаемая версия TLS может меняться, а с ней и поведение функций.
В следующие несколько месяцев мы планируем развернуть эту поддержку HTTPS по всем официальным экспортерам Prometheus и другим проектам, например, Alertmanager, Pushgateway.
Мы за безопасный мониторинг.
От редакции: Подробнее о работе с Prometheus можно узнать на курсе Слёрма «Мониторинг и логирование инфраструктуры в Kubernetes». Сейчас курс находится в разработке и его можно купить по цене предзаказа.
Полезные ссылки
Prometheus 2.24.0
Модель безопасности Prometheus
Документация по конфигурации TLS-сервера (для Prometheus)
Документация по конфигурации TLS-клиента (для сервера Prometheus)
===========
Источник:
habr.com
===========
===========
Автор оригинала: Julien Pivotto
===========Похожие новости:
- [Программирование, .NET, Amazon Web Services, C#, DevOps] Nuke: настраиваем сборку и публикацию .NET-проекта
- [Habr, IT-инфраструктура, IT-эмиграция] К чему сложно привыкнуть в Испании
- [Open source, Виртуализация, Облачные вычисления, Администрирование баз данных] Изучаем Bash путем написания интерактивой игры, создаем культуру DevOps, а также шпаргалка по MariaDB и MySQL
- [Системное администрирование, Софт] Эксперт обнаружил критическую уязвимость в Windows 10. Однострочная команда повреждает любой диск с NTFS
- [Настройка Linux, Системное администрирование, *nix, Серверное администрирование, CRM-системы] Как установить SSL сертификат на Onlyoffice docker сборки
- [IT-инфраструктура, Сетевые технологии, Беспроводные технологии, Законодательство в IT, Сетевое оборудование] Застройщиков обяжут прокладывать в новых домах интернет-коммуникации
- [Разработка веб-сайтов, Поисковые технологии, Серверная оптимизация, Серверное администрирование] Как не держать лишнее железо и справляться с ростом нагрузки: внедрение graceful degradation в Яндекс.Маркете
- [Информационная безопасность, Системное администрирование, DevOps] Лучшие практики при написании безопасного Dockerfile
- [Настройка Linux, Системное администрирование, *nix] Systemd для продолжающих. Part 2 — Триггеры на различные события
- [IT-инфраструктура, Администрирование баз данных, Хранение данных, DevOps] Когда-то я внедрял ClickHouse в стартапе, где даже алерты мониторили индийцы — это был Дикий Запад
Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_itinfrastruktura (IT-инфраструктура), #_servernoe_administrirovanie (Серверное администрирование), #_devops, #_prometheus, #_tls, #_grafana, #_blog_kompanii_southbridge (
Блог компании Southbridge
), #_sistemnoe_administrirovanie (
Системное администрирование
), #_itinfrastruktura (
IT-инфраструктура
), #_servernoe_administrirovanie (
Серверное администрирование
), #_devops
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:45
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Prometheus теперь поддерживает TLS и базовую аутентификацию для HTTP эндпоинтов. Скрейпинг таргетов через HTTPS вместо HTTP поддерживается уже давно. Метрики можно собирать с поддержкой HTTPS, аутентификации по клиентским сертификатам и базовой аутентификации. В прошлом году Node Exporter стал первым официальным экспортером, который нативно предоставляет метрики по HTTPS. Все подробности в предыдущем посте. На этой неделе (прим. переводчика: статья вышла 6 января 2021 года) мы встречаем Prometheus 2.24.0. В последнее время Prometheus радует нас крутыми новшествами — это и TLS, и backfilling (обратное заполнение, тоже в версии 2.24) и даже переход на современный пользовательский интерфейс на React. В этом посте мы расскажем о TLS и базовой аутентификации. Здесь можно узнать больше о модели безопасности Prometheus и о том, как пожаловаться на уязвимости. Если вы обнаружили в Prometheus, официальном экспортере или библиотеке какую-нибудь критическую уязвимость, не рассказывайте об этом публично, а сообщите нам, чтобы мы все исправили. API для администрирования и управления жизненным циклом По умолчанию Prometheus предоставляет эндпоинты API только для запроса данных. При необходимости можно включить еще эндпоинты для управления жизненным циклом (перезагрузка конфигурации, выход) и для администрирования (удаление метрик, создание снапшотов). При этом нужно будет защитить порт Prometheus, например, с помощью аутентификации. Защита доступа к Prometheus Раньше между клиентами и сервером Prometheus для защиты обычно ставили обратный прокси: С такой конфигурацией можно не только управлять доступом и шифрованием, но и автоматизировать создание сертификатов, использовать троттлинг, дополнительные средства контроля, изменения имен (mangling) и так далее. За задачи балансировщиков нагрузки и обратных прокси Prometheus не отвечает, так что продолжайте использовать обратный прокси, если вам нужны эти расширенные функции. Если ваш сценарий попроще или нужно защитить трафик между обратным прокси и Prometheus, теперь у вас есть встроенные средства для защиты входящего HTTP-трафика. Как настроить TLS Посмотрим, как это работает на практике, на примере Prometheus на Linux. Настройка рабочего каталога Мы будем работать в отдельном каталоге: $ mkdir ~/prometheus_tls_example
$ cd ~/prometheus_tls_example Создание TLS-сертификатов Для начала создадим самоподписанный TLS-сертификат. $ cd ~/prometheus_tls_example
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout prometheus.key -out prometheus.crt -subj "/C=BE/ST=Antwerp/L=Brasschaat/O=Inuits/CN=localhost" -addext "subjectAltName = DNS:localhost" Здесь localhost — это имя хоста для сервера Prometheus. Создается два файла: prometheus.crt и prometheus.key. Веб-конфигурация Prometheus Скачиваем Prometheus v2.24.0, распаковываем, переносим сертификаты, которые создали выше: $ cd ~/prometheus_tls_example
$ wget https://github.com/prometheus/prometheus/releases/download/v2.24.0/prometheus-2.24.0.linux-amd64.tar.gz $ tar xvf prometheus-2.24.0.linux-amd64.tar.gz $ cp prometheus.crt prometheus.key prometheus-2.24.0.linux-amd64 $ cd prometheus-2.24.0.linux-amd64 Сейчас нужно создать новый файл конфигурации. Мы не будем настраивать TLS и аутентификацию в основном файле конфигурации prometheus.yml. Это позволит нам перечитывать отдельный файл конфигурации при каждом запросе, чтобы на лету подхватывать новые учетки и сертификаты. Создадим файл web.yml с конфигурацией TLS: tls_server_config:
cert_file: prometheus.crt key_file: prometheus.key Запускаем сервер Prometheus, указывая --web.config.file в командной строке: $ ./prometheus --web.config.file=web.yml
[...] enabled and it cannot be disabled on the fly." http2=true level=info ts=2021-01-05T13:27:53.677Z caller=tls_config.go:223 component=web msg="TLS is enabled." http2=true Если мы видим это сообщение, сервер Prometheus запущен с поддержкой TLS. Примечание: Все параметры TLS можно менять динамически, но если уж мы включили TLS, то без перезапуска Prometheus его не отключишь. Подробности об этом дополнительном файле конфигурации смотрите в документации. Проверка конфигурации TLS вручную В curl проверим конфигурацию TLS. В новом терминале запустим пару команд для теста: $ cd ~/prometheus_tls_example
$ curl localhost:9090/metrics Client sent an HTTP request to an HTTPS server. $ curl --cacert prometheus.crt https://localhost:9090/metrics [...] Вместо --cacert prometheus.crt можно передать -k, чтобы пропустить проверку сертификата в curl. Конфигурация скрейпа Настроить TLS выборочно не получится — если он включен, он распространяется на все эндпоинты. Это значит, что собственные метрики Prometheus тоже будет извлекать через TLS, поэтому настроим использование HTTPS. Изменим задание prometheus в файле prometheus.yml: global:
scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' scheme: https tls_config: ca_file: prometheus.crt static_configs: - targets: ['localhost:9090'] Для tls_config и scheme установим https. Полный список параметров клиента tls_config см. в конфигурации Prometheus. Перечитаем конфигурацию Prometheus: $ killall -HUP prometheus
Откроем https://localhost:9090/targets локально в браузере и увидим https://localhost:9090/metrics в списке таргетов. Таргет имеет статус UP? Ура! Мы настроили TLS для сервера Prometheus и теперь собираем метрики с шифрованием. Как настроить базовую аутентификацию Давайте пойдем еще дальше и затребуем имя пользователя и пароль. TLS здесь не обязателен, но крайне рекомендуется (настраивать его мы уже умеем). Веб-конфигурация Для начала создадим хэш паролей (с помощью bcrypt). Для этого используем команду htpasswd (пакет apache2-utils или httpd-tools есть в дистрибутиве; если это не продакшен, можно найти генераторы bcrypt онлайн). $ htpasswd -nBC 10 "" | tr -d ':\n'
New password: Re-type new password: $2y$10$EYxs8IOG46m9CtpB/XlPxO1ei7E4BjAen0SUv6di7mD4keR/8JO6m Для примера возьмем пароль inuitsdemo. Добавим пользователя в файл веб-конфигурации Prometheus web.yml: tls_server_config:
cert_file: prometheus.crt key_file: prometheus.key basic_auth_users: prometheus: $2y$10$EYxs8IOG46m9CtpB/XlPxO1ei7E4BjAen0SUv6di7mD4keR/8JO6m Примечание: В этом файле prometheus — это имя пользователя. Если Prometheus еще запущен, введите пароль для доступа к веб-интерфейсу по адресу https://127.0.0.1:9090, иначе на странице targets для таргета будет отображаться ошибка 401 Unauthorized. Конфигурация Prometheus Внесём изменения в prometheus.yml, чтобы скрейпинг шёл с использованием логина и пароля. global:
scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' scheme: https basic_auth: username: prometheus password: inuitsdemo tls_config: ca_file: prometheus.crt static_configs: - targets: ['localhost:9090'] Перезагрузим конфигурацию Prometheus сигналом SIGHUP: $ killall -HUP prometheus
Если все работает, Prometheus снова откроет страницу targets. Promtool У Prometheus есть свой инструмент командной строки — promtool, которым теперь можно проверять и файлы веб-конфигурации: $ ./promtool check web-config web.yml
web.yml SUCCESS Используйте любой инструмент автоматизации для удобного обновления файлов web.yml. Grafana Grafana поддерживает все необходимые функции для подключения к серверу Prometheus. Можно указать CA (наш prometheus.crt) или пропустить проверку сертификатов. Заключение Это только общий обзор. В продакшене нужно будет использовать подходящий CA и продумать еще много деталей. Можно настроить клиентские сертификаты, но из соображений безопасности эта функция считается экспериментальной. Со временем поддерживаемая версия TLS может меняться, а с ней и поведение функций. В следующие несколько месяцев мы планируем развернуть эту поддержку HTTPS по всем официальным экспортерам Prometheus и другим проектам, например, Alertmanager, Pushgateway. Мы за безопасный мониторинг. От редакции: Подробнее о работе с Prometheus можно узнать на курсе Слёрма «Мониторинг и логирование инфраструктуры в Kubernetes». Сейчас курс находится в разработке и его можно купить по цене предзаказа. Полезные ссылки Prometheus 2.24.0 Модель безопасности Prometheus Документация по конфигурации TLS-сервера (для Prometheus) Документация по конфигурации TLS-клиента (для сервера Prometheus) =========== Источник: habr.com =========== =========== Автор оригинала: Julien Pivotto ===========Похожие новости:
Блог компании Southbridge ), #_sistemnoe_administrirovanie ( Системное администрирование ), #_itinfrastruktura ( IT-инфраструктура ), #_servernoe_administrirovanie ( Серверное администрирование ), #_devops |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:45
Часовой пояс: UTC + 5