Prometheus – это бесплатный инструмент с открытым исходным кодом для мониторинга и оповещения в реальном времени, написанный на языке Go.
Он записывает метрики в базу данных временных рядов, используя алгоритм HTTP pull.
Эта модель обеспечивает высокую производительность и масштабируемость Prometheus.
Инструмент мониторинга Prometheus состоит из нескольких компонентов:
- PromQL – Это язык запросов, используемый для создания информационных панелей и фильтрации многомерных данных временных рядов.
- Exporters – запускаются на контролируемых узлах и используются для экспорта метрик из сторонних систем.
- Alertmanager – запускает оповещения на основе собранных метрик.
- Prometheus – Централизует и хранит метрики.
- Grafana – Этот инструмент используется для визуализации данных, опрашиваемых Prometheus. Он создает дашборды для мониторинга и анализа.
Это руководство продемонстрирует, как защитить Prometheus Server с помощью бэйсик аутентификации.
Обеспечение безопасности Prometheus Server с базовой аутентификацией означает, что вы настроите его на требование имени пользователя и пароля для всех пользователей, получающих доступ к экземпляру Prometheus.
В этом руководстве я предполагаю, что у вас уже установлен и работает Prometheus Server.
В противном случае вам придется установить его с помощью специальных руководств, приведенных ниже:
- 🗽 Что такое Prometheus и почему он так популярен?
- ☸️ Как установить Prometheus и Grafana на Kubernetes с помощью Helm 3
- 🗽 Интеграция Prometheus и Grafana для Мониторинга логов
- Как контролировать веб-сервер Apache с помощью Prometheus и Grafana за 5 минут
- Как установить Prometheus на Ubuntu 18.04
- 🐳 Как запустить Grafana в контейнере Docker
После установки вы можете приступить к выполнению следующих шагов.
Шаг 1 – Хеширование пароля
В этом руководстве мы установим пароль для пользователя admin и зададим любой предпочтительный пароль.
Сгенерируйте bcrypt-хэш предпочитаемого пароля.
Конечно, вам понадобится пакет python3-bcrypt, который можно установить, как показано ниже:
##На Debian/Ubuntu
sudo apt update
sudo apt install python3-bcrypt -y
##На CentOS/Rocky/Alma Linux
sudo yum -y install epel-release
sudo yum -y install python3-bcrypt
После установки создайте скрипт python, который будет запрашивать пароль.
$ vim gen-pass.py
import getpass
import bcrypt
password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())
Сохраните скрипт и запустите его, как показано ниже:
python3 gen-pass.py
Продолжайте и укажите желаемый пароль:
password: $2b$12$.9J0cFyfcLaNjwBW9McDWObbLjM0n0Wb0ToW9wZArxfmwVlctK8SS
Сохраните где-нибудь сгенерированный пароль, он понадобится вам в следующих шагах.
Шаг 2 – Создание YAML
Создайте YAML-файл конфигурации Prometheus.
Этот файл будет считываться при каждом HTTP-запросе.
Для этого руководства мы разместили свой YAML-файл в /etc/prometheus/ как web.yml.
Теперь добавьте аутентификацию к конечным точкам, как показано ниже:
$ sudo vim /etc/prometheus/web.yml
basic_auth_users:
admin: '$2b$12$.9J0cFyfcLaNjwBW9McDWObbLjM0n0Wb0ToW9wZArxfmwVlctK8SS'
Замените $2b$12$.9J0cFyfcLaNjwBW9McDWObbLjM0n0Wb0ToW9wZArxfmwVlctK8SS на значение вашего зашифрованного пароля.
Вы можете проверить этот файл с помощью команд, приведенных ниже.
$ promtool check web-config /etc/prometheus/web.yml
/etc/prometheus/web.yml SUCCESS
Шаг 3 – Запуск Prometheus Server
Теперь мы запустим сервер Prometheus Server, используя созданные веб-конфигурации.
Обновите файл блока Prometheus systemd, чтобы включить в него файл веб-конфигурации, который мы только что создали.
$ sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
Environment="GOMAXPROCS=1"
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.config.file=/etc/prometheus/web.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.external-url=
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
Также может потребоваться перезапуск сервера Prometheus Server.
sudo systemctl daemon-reload
sudo systemctl restart prometheus
sudo systemctl enable prometheus
Убедитесь, что служба Prometheus запущена без ошибок
$ systemctl status prometheus
● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-04-26 08:05:50 UTC; 7s ago
Docs: https://prometheus.io/docs/introduction/overview/
Main PID: 12461 (prometheus)
Tasks: 7 (limit: 23694)
Memory: 21.8M
CGroup: /system.slice/prometheus.service
└─12461 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --web.config.file=/etc/prometheus/web.yml --storage.tsdb.path=/var/lib/prometheus --web.console.template>
После запуска перейдите к проверке работоспособности пароля.
Здесь мы будем использовать команду cURL для доступа к конечной точке /metrics с именем пользователя:
$ curl -u admin http://localhost:9090/metrics
Enter host password for user 'admin': <Enter the set password>
Если пароль указан неверно, аутентификация не будет выполнена:
$ curl -u admin http://localhost:9090/metrics
Enter host password for user 'admin':
Unauthorized
При доступе к веб-консоли Prometheus через браузер вам будет предложено пройти аутентификацию с помощью имени пользователя и пароля.
Заключение.
Вот и все, мы успешно защитили сервер Prometheus с помощью basic аутентификации.
Теперь все пользователи, обращающиеся к Prometheus, должны будут указать имя пользователя и пароль.
а можно по старинке, повесить его на localhost и через nginx закрыть basic авторизацией
Ну тут для примера
localhost