Kubernetes Istio(1.6.2):授权策略中的拒绝策略不适用于有效令牌

Kubernetes Istio(1.6.2):授权策略中的拒绝策略不适用于有效令牌,kubernetes,oauth-2.0,jwt,authorization,istio,Kubernetes,Oauth 2.0,Jwt,Authorization,Istio,我是新来的。我正在用JWT实现授权。拒绝操作未反映为有效的JWT令牌。我添加了JWT负载和授权策略以供参考。 我使用的是kubernetes版本v1.18.3和Istio 1.6.2。我在minikube上运行集群 我首先在入口通道上应用了以下规则: apiVersion: "security.istio.io/v1beta1" kind: "RequestAuthentication" metadata: name: ingress-auth-jwt

我是新来的。我正在用JWT实现授权。拒绝操作未反映为有效的JWT令牌。我添加了JWT负载和授权策略以供参考。 我使用的是kubernetes版本v1.18.3和Istio 1.6.2。我在minikube上运行集群

我首先在入口通道上应用了以下规则:

apiVersion: "security.istio.io/v1beta1"
kind: "RequestAuthentication"
metadata:
  name: ingress-auth-jwt
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  jwtRules:
  - issuer: "https://dev-n63ipah2.us.auth0.com/"
    jwksUri: "https://dev-n63ipah2.us.auth0.com/.well-known/jwks.json"
    audiences: 
    - "http://10.97.72.213/"
---
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: ingress-authz
 namespace: istio-system
spec:
 selector:
   matchLabels:
     istio: ingressgateway
 action: ALLOW
 rules:
  - when:
    - key: request.auth.claims[iss]
      values: ["https://dev-n63ipah2.us.auth0.com/"]
之后,我申请了以下dex ms联系服务政策

JWT Payload:
{
  "iss": "https://dev-n63ipah2.us.auth0.com/",
  "sub": "sEbjHGBcZ16D0jk8wohIp7vPoT0MWTO0@clients",
  "aud": "http://10.97.72.213/",
  "iat": 1594274641,
  "exp": 1594361041,
  "azp": "sEbjHGBcZ16D0jk8wohIp7vPoT0MWTO0",
  "gty": "client-credentials"
}
入口通道政策运作良好。但是,当我在dex ms联系人服务上应用拒绝策略时,拒绝策略不会使用有效的JWT令牌反映。理想情况下,它不应该允许我访问dex ms联系人服务,对吗

预期的行为是什么?

根据istio:

Istio授权策略支持对网格中的工作负载进行访问控制

授权策略支持允许和拒绝策略。当允许和拒绝策略同时用于工作负载时,首先评估拒绝策略。评估由以下规则确定:

  • 如果存在任何与请求匹配的拒绝策略,请拒绝该请求
  • 如果工作负载没有允许策略,请允许请求
  • 如果任何允许策略与请求匹配,请允许请求
  • 拒绝请求
  • 因此,考虑到拒绝策略是首先评估的。您的请求可能首先在工作负载策略上被拒绝,然后在网关策略上被允许,这导致完全覆盖拒绝规则

    考虑到策略的评估顺序更为具体,允许策略中应该允许的内容可能会使您的权限模型成为可能

    希望能有帮助


    编辑:

    据istio称:

    工作量

    部署的二进制文件,用于提供服务网格应用程序的某些功能。工作负载具有名称、名称空间和唯一ID。这些属性可在策略和遥测配置中使用,具体如下:

    • source.workload.name
      source.workload.namespace
      source.workload.uid
    • destination.workload.name
      destination.workload.namespace
      destination.workload.uid
    在Kubernetes中,工作负载通常对应于Kubernetes部署,而工作负载对应于由部署管理的个人


    很抱歉回答晚了,我已经离开一段时间了。

    你能帮助我理解istio中的工作量到底意味着什么吗?我在回答中已经回答了你的问题。我在我的项目中遇到了同样的问题,如果所有的请求都经过,这是回购协议,你能给我一个建议吗?
    RequestAuthentication:
    
    apiVersion: "security.istio.io/v1beta1"
    kind: "RequestAuthentication"
    metadata:
      name: dex-ms-contact-jwt
      namespace: default
    spec:
      selector:
        matchLabels:
          app: dex-ms-contact
      jwtRules:
      - issuer: "https://dev-n63ipah2.us.auth0.com/"
        jwksUri: "https://dev-n63ipah2.us.auth0.com/.well-known/jwks.json"
        audiences: 
        - "http://10.97.72.213/"
    ---
    apiVersion: "security.istio.io/v1beta1"
    kind: "AuthorizationPolicy"
    metadata:
      name: dex-ms-contact-require-jwt
      namespace: default
    spec:
      selector:
        matchLabels:
          app: dex-ms-contact
      action: DENY
      rules:
      - when:
        - key: request.auth.claims[iss]
          values: ["https://dev-n63ipah2.us.auth0.com/"]