Как обезопасить приборную панель 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

Другие вопросы по тегам