我已经安装了istio v1.1.1,使用Istio身份验证策略时遇到了麻烦。即,我的大多数微服务都需要同时支持最终用户身份验证(JWT令牌)和服务服务身份验证(通过istio mTLS)。
我设计了同时启用mTLS和JWT身份验证的Istio身份验证策略。我必须将 originIsOptional 设置为 true ,因为服务呼叫仅将K8S ServiceAccount作为服务身份。
现在,问题是:如果JWT令牌过期或丢失,则istio将返回403-RBAC访问被拒绝,因为将绕过JWT身份验证并且RBAC将会生效。
如果我将 originIsOptional 设置为 false 。 JWT到期/丢失将按预期返回401-JWT令牌失败,但由于必须使用JWT令牌,因此服务/服务调用将被阻止。
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
name: "default"
namespace: "ns-fota"
spec:
peers:
1. mtls: {}
origins:
2. jwt:
issuer: "https://47.100.178.136:9444/oauth2/token"
jwksUri: "http://47.100.178.136:9764/oauth2/jwks"
principalBinding: USE_ORIGIN
originIsOptional: true
EOF
我的问题:
为什么服务-服务调用(没有JWT令牌,只有K8S ServiceAccount / Istio mTLS)在附加的配置中传递? principalBinding 已配置 USE_ORIGIN 。这是否意味着只有JWT用户主体有效?
如何同时支持jwt / mTLS身份验证,同时系统可以区分jwt令牌丢失和Istio RBAC失败?