首页 > 解决方案 > 根据 JWT 中的用户声明路由 Istio 虚拟服务

问题描述

Istio 可以根据标头等路由流量。在 Istio 文档中有很好的例子来说明如何做到这一点。

Istio 还可以验证您的 JWT。Istio 文档也涵盖了这一点

但是我似乎找不到让我的 JWT Validated 的方法,然后使用在 JWT Json 中找到的用户声明来路由流量。我链接到的示例只是希望用户是标题中的纯文本。

如何将 Istio 虚拟服务设置为基于 JWT 中的声明(最好是经过验证的声明)进行路由。

标签: kubernetesjwtistio

解决方案


您可以使用Istio 授权策略来实现这一点。如果没有声明或角色,我对 Keycloak 和 Kong 做了类似的事情来限制 API 网关级别的用户流量。

是使用 istio 进行 JWT 身份验证的一个很好的示例:

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
 name: backend
 namespace: default
spec:
  selector:
    matchLabels:
      app: backend
  jwtRules:
  - issuer: "${KEYCLOAK_URL}/auth/realms/istio"
    jwksUri: "${KEYCLOAK_URL}/auth/realms/istio/protocol/openid-connect/certs"
---
# To allow only requests with a valid token, create an authorization policy
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: backend
 namespace: default
spec:
 selector:
   matchLabels:
     app: backend
 action: ALLOW
 rules:
 - from:
   when:  
    - key: request.auth.claims[preferred_username]
      values: ["testuser"]

示例链接:https ://istio.io/latest/docs/tasks/security/authorization/authz-jwt/

OIDC 的另一个很好的例子:https ://www.jetstack.io/blog/istio-oidc

RBAC 和组列表检查:https ://istio.io/v1.4/docs/tasks/security/authorization/rbac-groups/


推荐阅读