如何使用keycloak-gatekeeper保护Kibana仪表板?

时间:2019-08-14 15:12:51

标签: kubernetes kibana keycloak keycloak-gatekeeper

当前流量:

  

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

预期流量:

  

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

     

->如果未登录->密钥斗篷登录页面-> / 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}}]

问题:

我可以在/ Kibana上调用keycloak登录,但是登录后用户不会转到/ Kibana网址,即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。流程如下:

步骤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:

在Envoy.yaml中添加新路线后,

404错误已解决

Envoy.yaml

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

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

  

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

     

->如果未登录->密钥斗篷登录页面-> / sso-kibana

     

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

1 个答案:

答案 0 :(得分:2)

在您的配置中,您明确启用了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