根据 JWT 中的用户声明路由 Istio 虚拟服务

时间:2021-05-27 22:57:30

标签: kubernetes jwt istio

Istio 可以根据标头等路由流量。 Istio 文档中有 great examples 如何做到这一点。

Istio 还可以验证您的 JWT。 Istio 文档也cover that

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

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

1 个答案:

答案 0 :(得分:2)

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

Here 是使用 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/