首页 > 解决方案 > 如何使用 keycloak-gatekeeper 保护 Kibana 仪表板?

问题描述

电流:

传入请求 (/sso-kibana) --> Envoy 代理 --> /sso-kibana

预期流量:

传入请求 (/sso-kibana) --> Envoy 代理 --> 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

看门人.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

特使.yaml

- name: kibana
    hosts: [{ socket_address: { address: keycloak-gatekeeper, port_value: 3000}}]

问题:

我可以在 /Kibana 上调用 keycloak 登录,但登录后用户不会去 /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:

我可以在 /sso-kibana 上调用 keycloak 登录,但在输入凭据后它会给出 404。流程如下:

Step 1.点击http://something/sso-kibana
Step 2. Keycloak 登录页面打开https://keycloak/auth/realms/THXiRealm/protocol/openid-connect/auth ?...
Step 3.进入后凭据重定向到此 URL https://something/sso-kibana/oauth/callback?state=890cd02c-f ...
步骤 4. 404

更新 2:

在 Envoy.yaml 中添加新路由后,404 错误得到解决

特使.yaml

  - match: { prefix: /sso-kibana/oauth/callback }
                route: { prefix_rewrite: "/", cluster: kibana.k8s.cluster }

因此,预期流程(如下所示)现在工作正常。

传入请求 (/sso-kibana) --> Envoy 代理 --> keycloak-gatekeeper --> keycloak

--> 如果未登录 --> keycloak 登录页面 --> /sso-kibana

--> 如果已经登录 --> /sso-kibana

标签: kuberneteskibanakeycloakkeycloak-gatekeeper

解决方案


在您的配置中,您明确启用enable-default-deny了文档中解释为:

对所有请求启用默认拒绝,您必须明确说明允许的内容(推荐)

启用该功能后,您将需要通过resources[1] 中所示的条目或命令行参数 [2] 指定 url、方法等。对于 Kibana,您可以从以下内容开始:

resources:
- uri: /app/*

[1] https://www.keycloak.org/docs/latest/securing_apps/index.html#example-usage-and-configuration

[2] https://www.keycloak.org/docs/latest/securing_apps/index.html#http-routing


推荐阅读