👾 Защита сервера Prometheus с помощью basic аутентификации

Мануал

Prometheus – это бесплатный инструмент с открытым исходным кодом для мониторинга и оповещения в реальном времени, написанный на языке Go.

Он записывает метрики в базу данных временных рядов, используя алгоритм HTTP pull.

Эта модель обеспечивает высокую производительность и масштабируемость Prometheus.

Инструмент мониторинга Prometheus состоит из нескольких компонентов:

  • PromQL – Это язык запросов, используемый для создания информационных панелей и фильтрации многомерных данных временных рядов.
  • Exporters  – запускаются на контролируемых узлах и используются для экспорта метрик из сторонних систем.
  • Alertmanager – запускает оповещения на основе собранных метрик.
  • Prometheus – Централизует и хранит метрики.
  • Grafana – Этот инструмент используется для визуализации данных, опрашиваемых Prometheus. Он создает дашборды для мониторинга и анализа.

Это руководство продемонстрирует, как защитить Prometheus Server с помощью бэйсик аутентификации.

Обеспечение безопасности Prometheus Server с базовой аутентификацией означает, что вы настроите его на требование имени пользователя и пароля для всех пользователей, получающих доступ к экземпляру Prometheus.

В этом руководстве я предполагаю, что у вас уже установлен и работает Prometheus Server.

В противном случае вам придется установить его с помощью специальных руководств, приведенных ниже:

После установки вы можете приступить к выполнению следующих шагов.

Шаг 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, должны будут указать имя пользователя и пароль.

 

Добавить комментарий

  1. аноним

    а можно по старинке, повесить его на localhost и через nginx закрыть basic авторизацией

    Ответить
    1. cryptoparty автор

      Ну тут для примера localhost

      Ответить