kubernetes 通过Nginx auth-url使用正则表达式中的参数

wkyowqbh  于 2023-03-22  发布在  Kubernetes
关注(0)|答案(1)|浏览(98)

我在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......似乎我不能在这个注解中使用正则表达式。
我该怎么做呢?

scyqe7ek

scyqe7ek1#

Keycloak Auth Provider中,通过OAuth2 Proxy选项--allowed-group标志,可以指定限制哪些组对组成员身份进行授权。
请按照以下步骤创建所需的客户端作用域组,以便通过OAuth2 Proxy授权Keycloak组成员身份。

  • 在Keycloak中新建一个名为groups的Client Scope。
  • 包括类型为组成员身份的Map器。
  • Token Claim Name设置为组,或通过匹配OAuth2 Proxy的--oidc-groups-claim选项进行自定义。
  • 如果选择了完整组路径选项,请在OAuth2 Proxy的--allowed-group选项中定义的组名中包含“/”分隔符。

示例:"/groupname" or "/groupname/group1".
创建客户端范围命名组后,请将其附加到客户端,如下所示:

客户端-〉〈您的客户端ID〉-〉客户端范围-〉添加客户端范围-〉选择组并选择可选。

这将组成员关系Map到JWT令牌中,以便Oauth2代理可以评估它们。OAuth2代理选项--allowed-group=/groupname现在将允许过滤组成员关系。
上述信息来自文档。

相关问题