Хранитель ключей: установите базовый URL-адрес

#keycloak #keycloak-gatekeeper

#скрытый ключ #хранитель ключей-gatekeeper #тайник ключей

Вопрос:

Я не могу найти способ обновить базовый URL-адрес моей коляски keycloak gatekeeper. Моя конфигурация хорошо работает со службами, установленными на базовый URL (например:https://monitoring.example.com /), а не с пользовательским базовым путем (например:https://monitoring.example.com/prometheus).

Моя конфигурация yaml:

 apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: prometheus-deployment
spec:
  replicas: 1
  template:
    metadata:
      name: prometheus
    spec:
      containers:
      - name: prometheus
        image: quay.io/coreos/prometheus:latest
        args:
          - '--web.external-url=https://monitoring.example.com/prometheus'
          - '--web.route-prefix=/prometheus
      - name: proxy
        image:  keycloak/keycloak-gatekeeper:5.0.0
        imagePullPolicy: Always
        args:
          - --resource=uri=/*
          - --discovery-url=https://auth.example.com/auth/realms/MYREALM
          - --client-id=prometheus
          - --client-secret=XXXXXXXX
          - --listen=0.0.0.0:5555
          - --enable-logging=true
          - --enable-json-logging=true
          - --upstream-url=http://127.0.0.1:9090/prometheus
  

Моя проблема в том, чтобы иметь возможность установить другой базовый URL-путь («/ prometheus») для sidecar as, когда я открываюhttps://monitoring.example.com/prometheus , я получаю перенаправление 307 наhttps://monitoring.example.com/oauth/authorize?state=XXXXXXX
Тогда как это должно быть https://monitoring.example.com/prometheus/oauth/authorize?state=XXXXXXX

Я попытался с параметром «—перенаправление-url=https://monitoring.example.com/prometheus » Но это все равно перенаправляет меня на тот же URL.

Редактировать:

Моя цель — иметь возможность защитить несколько Prometheus и ограничить доступ к ним. Я также ищу решение для установки разрешений в отношении области или клиента. Я имею в виду, что некоторые пользователи keycloak должны иметь возможность, например, авторизоваться и увидеть содержимое /prometheus-dev, но не /prometheus-prod.

РЕДАКТИРОВАТЬ 2:

Я пропустил параметр «base_uri». Когда я устанавливаю его в «/ prometheus» и пытаюсь подключиться к «https://monitoring.example.com/prometheus /«, Я получаю хорошее перенаправление «https://monitoring.example.com/prometheus/oauth/authorize?state=XXXXXXX » но не работает. В keycloak журнал является:

«сообщение: сеанс не найден в запросе, перенаправление для авторизации, ошибка: сеанс аутентификации не найден»

Комментарии:

1. Почему вам нужно использовать path /prometheus ? keycloak-gatekeeper не был предназначен для этого.

2. Потому что я хочу защитить несколько путей, но не все из них будут использовать одну и ту же область или клиент Keycloak. Я ищу решение для использования keycloak для управления разрешениями. Я имею в виду, что некоторые пользователи в области должны иметь доступ только к некоторому пути, а другие пользователи, расположенные во второй области, к другим путям.

3. Вы действительно не можете использовать gatekeeper для защиты только пути без дополнительного взлома (ответа и перезаписи пути). IMHO использует gatekeeper для защиты всего домена, занесения в белый список общедоступных ресурсов и определения дополнительных условий для выбранных ресурсов, например, только пользователи с prometheus group могут получить доступ к ресурсу prometheus.

4. Спасибо за ваш комментарий @JanGaraj. Но одна вещь, как я должен сделать, чтобы защитить несколько контейнеров. Потому что, например, мой путь /prometheus-prod нацелен на контейнер (pod), а / prometheus-dev нацелен на другой контейнер. Итак, идея состоит в том, чтобы настроить gatekeeper sidecar для каждого и развернуть тот, который способен ответить на один «/»? Я не понимаю, как выполнить эту настройку.

5. Это действительно зависит от ваших настроек. Я предполагаю, что вы используете входной ресурс, поэтому kubernetes.github.io/ingress-nginx/examples/auth /…

Ответ №1:

В версии Gatekeeper 7.0.0 вы можете использовать один из этих параметров:

  • --oauth-uri
  • --base-uri

Но в настоящее время, если вы используете --base-uri , то завершающий / будет добавлен к URL обратного вызова после baseUri (т. Е. /baseUri//oauth/callback ). Но для меня это отлично работает с oauth-uri=/baseUri/oauth .

Комментарии:

1. Я попробовал это, и мой интерфейс перенаправляется так много раз, что я получаю сообщение об ошибке «перенаправлял вас слишком много раз». Есть идеи, что происходит?

Ответ №2:

Это можно сделать, если переписать заголовок местоположения в 307 ответах браузера. Если вы находитесь за входом в nginx, добавьте эти примечания.

 nginx.ingress.kubernetes.io/proxy-redirect-from: /
nginx.ingress.kubernetes.io/proxy-redirect-to: /prometheus/