Настройка докера Grafana за обратным прокси-сервером nginx в iframe с аутентификацией токена - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь настроить работу Grafana на docker-compose за обратным прокси-сервером nginx, все работает нормально, если для меня установлено [auth.anonymous] равным enabled = true.

Но когда я отключаюанонимный вход и попытка входа с помощью токена «Authorization» в заголовке, я получаю ошибку ниже при переходе к Grafana sub_path:

Если вы видите, что Grafana не удалось загрузить файлы приложения

  1. Это может быть вызвано настройками обратного прокси-сервера.

  2. Если вы размещаете grafana в подпутье, убедитесь, что ваш параметр root_path grafana.ini содержит подпуть

  3. Если у вас есть локальная сборка dev, убедитесь, что вы строите внешний интерфейс, используя: npm run dev, npm run watch или npm run build

  4. ИногдаПерезапуск grafana-сервера может помочь

Мои настройки ngnix.conf:

server {
  listen 80
  charset utf-8
  location /grafana-dashboard/ {
    proxy_pass http://grafana:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_max_temp_file_size 0;
  }
}

Grafana работает на grafana: 3000 из docker-compose.

Содержание docker-compose.config.yaml:

version: '3.4'
services:
  grafana:
    container_name: grafana
    depends_on:
      - db
    networks:
    - static-network
    ports:
    - 3000:3000
    restart: always
    volumes:
    - grafana_stor:/var/lib/grafana
    environment:
    - GF_AUTH_PROXY_ENABLED=true
    - GF_SERVER_DOMAIN=10.0.0.3
    - GF_SERVER_ROOT_URL=http://10.0.0.3/grafana-dashboard/
    user: "472"

volumes:
  grafana_stor: {}

networks:
  static-network:
    ipam:
      config:
    - subnet: 172.20.0.0/16

Перед доступом к 10.0.0.3/grafana-dashboard/ я генерирую API_KEY, используя Grafana HTTP_API / api / auth / keys Grafana, а затем передаю возвращенный токен в заголовке «Authorization: Bearer [token]» на клиенте.

Просто чтобы прояснить, графическая панель инструментов предназначалась для отображения на iframe в моем веб-приложении, но, поскольку мне нужно передать заголовок авторизации, я делаю запрос к / grafana-dashboard /, обслуживаемому nginx изатем поместите ответ «blob» на iframe.

Вся идея в том, чтобы иметь «единый вход» в grafana и в мое веб-приложение.Таким образом, пользователям, которые только что вошли в веб-приложение, также не нужно входить в систему grafana.Но если графана используется напрямую (не из iframe), потребуется экран входа в систему графана или простая аутентификация nginx.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Как указано выше Ян , вы не передаете идентификационную информацию пользователя из прокси-сервера nginx.Я использовал базовую аутентификацию и добавил строку ниже к блоку местоположения

proxy_set_header  Authorization "Basic <base64 encoded username:password>";

, что заставило его работать.Лучше было бы добавить нового пользователя только для чтения в Grafana и выставить его вместо администратора.Вы также можете обновить grafana.ini с помощью приведенных ниже настроек для большей безопасности.

session_life_time = 900
allow_sign_up = false
allow_org_create = false
0 голосов
/ 03 февраля 2019

Ваши проблемы: 1. Ключ API для доступа к API, но вы пытаетесь загрузить пользовательский интерфейс (не API, который доступен по пути /api) с ключом API 2. Вы включили прокси-сервер аутентификации, но выне передавать идентификационные данные пользователя из прокси-сервера nginx

Решение:

  1. Решить аутентификацию пользователя на прокси-сервере (nginx): нет аутентификации, базовая аутентификация, SSO (OIDC / SAML), LDAP, ...
  2. Передача идентификатора пользователя из прокси в заголовке запроса
  3. Правильная настройка прокси-сервера аутентификации Grafana для этого заголовка запроса: http://docs.grafana.org/auth/auth-proxy/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...