Как обезопасить приборную панель Kibana с помощью keycloak-gatekeeper?
Текущий поток:
входящий запрос (/sso-kibana) -> Посланник прокси -> / sso-kibana
Ожидаемый поток:
входящий запрос (/sso-kibana) -> Посланник прокси -> Keycloak-Gatekeeper -> Keycloak
-> Если не залогинен -> страница входа в Keycloak -> / sso-kibana
-> Если вы уже вошли в систему -> / sso-kibana
Я развернул keycloak-gatekeeper в качестве кластера k8s, который имеет следующую конфигурацию:
keycloak-gatekeeper.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: keycloak-gatekeeper
name: keycloak-gatekeeper
spec:
selector:
matchLabels:
app: keycloak-gatekeeper
replicas: 1
template:
metadata:
labels:
app: keycloak-gatekeeper
spec:
containers:
- image: keycloak/keycloak-gatekeeper
imagePullPolicy: Always
name: keycloak-gatekeeper
ports:
- containerPort: 3000
args:
- "--config=/keycloak-proxy-poc/keycloak-gatekeeper/gatekeeper.yaml"
- "--enable-logging=true"
- "--enable-json-logging=true"
- "--verbose=true"
volumeMounts:
-
mountPath: /keycloak-proxy-poc/keycloak-gatekeeper
name: secrets
volumes:
- name: secrets
secret:
secretName: gatekeeper
gatekeeper.yaml
discovery-url: https://keycloak/auth/realms/MyRealm
enable-default-deny: true
listen: 0.0.0.0:3000
upstream-url: https://kibana.k8s.cluster:5601
client-id: kibana
client-secret: d62e46c3-2a65-4069-b2fc-0ae5884a4952
Envoy.yaml
- name: kibana
hosts: [{ socket_address: { address: keycloak-gatekeeper, port_value: 3000}}]
Проблема:
Я могу вызвать регистрацию с помощью keycloak на / Kibana, но после входа пользователь не собирается на / Kibana url, т.е. панель управления Kibana не загружается.
Примечание: Kibana также работает как кластер k8s.
Рекомендации:
https://medium.com/@vcorreaniche/securing-serverless-services-in-kubernetes-with-keycloak-gatekeeper-6d07583e7382
https://medium.com/stakater/proxy-injector-enabling-sso-with-keycloak-on-kubernetes-a1012c3d9f8d
Обновление 1:
Я могу вызвать keycloak login на / sso-kibana, но после ввода учетных данных его выдача 404. Поток следующий:
Шаг 1. Кликнул по http://something/sso-kibana
Шаг 2. Страница входа в Keycloak открывается по адресу https://keycloak/auth/realms/THXiRealm/protocol/openid-connect/auth?...
Шаг 3. После ввода учетных данных, перенаправленных на этот URL-адрес https://something/sso-kibana/oauth/callback?state=890cd02c-f...
Шаг 4. 404
Обновление 2:
Ошибка 404 была решена после добавления нового маршрута в Envoy.yaml
Envoy.yaml
- match: { prefix: /sso-kibana/oauth/callback }
route: { prefix_rewrite: "/", cluster: kibana.k8s.cluster }
Поэтому ожидаемый поток (как показано ниже) теперь работает нормально.
входящий запрос (/sso-kibana) -> Посланник прокси -> Keycloak-Gatekeeper -> Keycloak
-> Если не залогинен -> страница входа в Keycloak -> / sso-kibana
-> Если вы уже вошли в систему -> / sso-kibana
1 ответ
В вашем конфиге вы явно включены enable-default-deny
что объясняется в документации как:
разрешает отказ по умолчанию для всех запросов, вы должны явно сказать, что разрешено (рекомендуется)
Если это включено, вам нужно будет указать URL-адреса, методы и т. Д. Через resources
записи, как показано в [1] или аргумент командной строки [2]. В случае с Kibana вы можете начать с:
resources:
- uri: /app/*
[1] https://www.keycloak.org/docs/latest/securing_apps/index.html
[2] https://www.keycloak.org/docs/latest/securing_apps/index.html