我在kubernetes集群中使用Ingress Nginx。我使用Keycloak管理用户和组,以及oauth2-proxy。我过滤了一些资源的访问,例如:
用户必须属于group 1才能访问my.app.com/resources/group1/page.html
我能够通过此入口强制执行组检查,按预期工作:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/auth-url: "https://###/oauth2/auth?allowed_groups=group1"
nginx.ingress.kubernetes.io/auth-signin: "https://###/oauth2/start?rd=$escaped_request_uri"
name: app
spec:
ingressClassName: nginx
rules:
- host:###
http:
paths:
- path: /resources/group1/(/|$)(.*)
pathType: Prefix
backend:
service:
name: app
port:
number: 80
我将不得不为每个组复制这个入口,并为以后添加的每个新组......我正在寻找一种方法来输入组作为auth-url路径的参数。我试过:
nginx.ingress.kubernetes.io/auth-url: "https://###/oauth2/auth?allowed_groups=$3"
...
path: /resources(/|$)((\w*)(/|$)(.*))
但是当我检查发送到oauth2的请求时,allowed_groups是空的。尝试使用$2,$3,$4......似乎我不能在这个注解中使用正则表达式。
我该怎么做呢?
1条答案
按热度按时间scyqe7ek1#
在Keycloak Auth Provider中,通过OAuth2 Proxy选项
--allowed-group
标志,可以指定限制哪些组对组成员身份进行授权。请按照以下步骤创建所需的客户端作用域组,以便通过OAuth2 Proxy授权Keycloak组成员身份。
--oidc-groups-claim
选项进行自定义。--allowed-group
选项中定义的组名中包含“/”分隔符。示例:
"/groupname" or "/groupname/group1".
创建客户端范围命名组后,请将其附加到客户端,如下所示:
客户端-〉〈您的客户端ID〉-〉客户端范围-〉添加客户端范围-〉选择组并选择可选。
这将组成员关系Map到JWT令牌中,以便Oauth2代理可以评估它们。OAuth2代理选项
--allowed-group=/groupname
现在将允许过滤组成员关系。上述信息来自文档。