#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/