Авторизация в сервисах VictoriaMetrics#
Важно
Начиная с версии 5.1.0, в поставку DropApp в инструмент VictoriaMetrics включен компонент vmauth, который заменяет устаревший компонент vmgateway. Компонент vmgateway больше не поддерживается и исключен из поставки. Функциональность vmgateway полностью перенесена в vmauth. Используйте vmauth вместо vmgateway.
Компонент vmauth#
vmauth — это прокси-сервер и компонент аутентификации для экосистемы VictoriaMetrics. Он предоставляет функции управления доступом, маршрутизации запросов и балансировки нагрузки между бэкендами VictoriaMetrics.
vmauth поддерживает следующие функции:
аутентификацию пользователей по статическим учетным данным (логин/пароль), токену или Basic Auth;
авторизацию по JWT-токену от внешнего OIDC-провайдера (например, Keycloak) с контролем доступа на уровне метрик через claim
vm_access— функциональность, ранее выполнявшаяся vmgateway;маршрутизацию запросов к различным бэкендам VictoriaMetrics по правилам конфигурации (
url_map);разделение доступа на чтение и запись для каждого пользователя;
доступ по
TenantIdв кластерной версии VictoriaMetrics;контроль доступа на уровне метрик для одиночной и кластерной версий VictoriaMetrics;
автоматическое обнаружение IP-адресов бэкенд-сервисов в кластере;
кеширование ответов бэкендов и балансировку нагрузки между репликами.
Базовая конфигурация (статическая аутентификация)#
vmauth конфигурируется через YAML-файл (по умолчанию vmauth.yml). Пример базовой конфигурации:
users:
# Пользователь с доступом на чтение и запись
- username: "<ИМЯ_ПОЛЬЗОВАТЕЛЯ>"
password: "<ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ>"
url_map:
# запись метрик направляем в vminsert
- src_paths: ["/insert/.*"]
url_prefix: ["http://vminsert:8480"]
# чтение метрик направляем в vmselect
- src_paths: ["/select/.*", "/api/v1/query.*"]
url_prefix: ["http://vmselect:8481"]
# Пользователь только на чтение
- username: "<ИМЯ_ПОЛЬЗОВАТЕЛЯ>"
password: "<ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ>"
url_map:
- src_paths: ["/select/.*", "/api/v1/query.*"]
url_prefix: ["http://vmselect:8481"]
# Правила маршрутизации для неавторизованных запросов (необязательно)
unauthorized_user:
url_map:
- src_paths: ["/api/v1/query.*"]
url_prefix: ["http://vmselect:8481"]
Где:
username— имя пользователя для аутентификации;password— пароль пользователя;url_map— список правил маршрутизации:src_paths(регулярные выражения путей запроса),url_prefix(адреса бэкендов, куда проксируется запрос);url_prefixдля чтения указывает наvmselect(порт 8481), для записи — наvminsert(порт 8480);unauthorized_user— настройки маршрутизации запросов от неавторизованных пользователей (если раздел не задан, такие запросы отклоняются).
Примечание
Вместо username/password (Basic Auth) для пользователя можно задать bearer_token: "<ТОКЕН>". В этом случае аутентификация выполняется по заголовку Authorization: Bearer <токен>.
vmauth прослушивает входящие запросы на порту 8427 (по умолчанию), проверяет учетные данные пользователя, сопоставляет запрошенный путь с правилами маршрутизации и перенаправляет запрос к соответствующему бэкенду.
Авторизация по JWT (замена vmgateway)#
vmauth умеет проверять JWT-токены, выданные внешним OIDC-провайдером (Keycloak), и применять контроль доступа на уровне метрик — эта функциональность ранее обеспечивалась компонентом vmgateway. Токен должен содержать claim vm_access; поле metrics_extra_filters внутри него задает, какие метрики разрешены пользователю.
users:
- jwt:
oidc:
# адрес OIDC-провайдера (Keycloak), по нему vmauth получает ключи для проверки токена (jwks)
issuer: "http://keycloak.keycloak.svc.cluster.local:8080/realms/dev"
# значения по умолчанию, если в токене claim не заполнен
default_vm_access_claim:
metrics_account_id: 0
metrics_project_id: 0
url_map:
- src_paths: ["/select/.*", "/api/.*", "/prometheus/.*"]
url_prefix:
# extra_filters подставляется из claim vm_access.metrics_extra_filters токена
- "http://vmselect:8481/select/0/prometheus/?extra_filters={{.MetricsExtraFilters}}"
access_log: {}
Где:
jwt.oidc.issuer— адрес OIDC-провайдера; vmauth строго сверяет значениеissв токене с этимissuer, поэтому адрес должен совпадать с тем, что провайдер прописывает в токен;поле токена
vm_access.metrics_extra_filtersподставляется вurl_prefixчерез шаблон{{.MetricsExtraFilters}}— пользователь видит только разрешенные ему метрики;access_log: {}— включение журналирования обращений (поле уровня пользователя).
Сценарий проверки настройки аутентификации vmauth#
Разверните компоненты VictoriaMetrics (
vmselectиvminsertдля кластерной версии илиvictoria-metricsдля одиночной версии).Создайте файл конфигурации с учетными данными и правилами маршрутизации (по аналогии с примером выше). При запуске через оператор VictoriaMetrics конфигурация передается в
Secret, на который ссылается CRVMAuth(spec.configSecret); ключ в секрете —config.yaml.Запустите vmauth с указанием пути к файлу конфигурации (флаг
-auth.config):./vmauth -auth.config=config.yamlВыполните запрос к API VictoriaMetrics через vmauth с корректными учетными данными:
curl -u <ИМЯ_ПОЛЬЗОВАТЕЛЯ>:<ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ> 'http://localhost:8427/api/v1/query?query=up'vmauth аутентифицирует пользователя, проверяет права доступа и перенаправляет запрос к указанному бэкенду.
Для авторизации по JWT-токену используется заголовок
Authorization:curl -H "Authorization: Bearer <token>" 'http://localhost:8427/api/v1/query?query=up'Запрос без учетных данных или с неверными учетными данными будет отклонен:
curl 'http://localhost:8427/api/v1/query?query=up'В ответе будет код
401 Unauthorized.