我目前面临 JWT 身份验证的 Istio AuthorizationPolicy 配置问题。我们的目标是为来自命名空间外部的流量启用 JWT 身份验证,同时允许命名空间内的请求无需身份验证即可继续进行。
相关配置如下:
- List item
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
annotations:
name: auth-policy
namespace: istio-system
spec:
rules:
- from:
- source:
requestPrincipals:
- '*'
- source:
notNamespaces:
- <namespace>
selector:
matchLabels:
<key>: <value>
apiVersion: "security.istio.io/v1beta1"
kind: "RequestAuthentication"
metadata:
name: jwt
namespace: istio-system
spec:
selector:
matchLabels:
<key>: <value>
jwtRules:
- issuer: "<issuer>"
jwksUri: "<jwksUri>"
fromHeaders:
- name: x-jwt-assertion
prefix: "Bearer "
我们遇到的问题是,尽管在 AuthorizationPolicy 中使用了 notNamespaces 字段,但指定命名空间内的请求也需要身份验证。我们预计命名空间内的请求将免于身份验证。
如果有人遇到类似的问题或了解正确的配置以实现我们期望的行为,我将非常感谢您的帮助。预先感谢您的帮助!
在 Istio AuthorizationPolicy 配置中,我们尝试使用以下规则实现 JWT 身份验证:
来自命名空间外部的所有流量都应该需要 JWT 身份验证。 应允许指定名称空间内的请求,无需任何身份验证。 为了实现这一点,我们使用 AuthorizationPolicy 中的 notNamespaces 字段来指定应绕过身份验证的命名空间。
我们预计源自指定命名空间的请求不会触发 JWT 身份验证过程,并且无需任何身份验证要求即可继续进行。
但是,尽管我们进行了配置,指定命名空间内的请求仍然受到 JWT 身份验证,这不是所需的行为。我们正在寻求帮助来理解和解决这个问题。
您必须在
from
部分使用 AND 语义。您编写它的方式就好像有两个单独的规则,它们具有 OR 语义。
删除
-
使其成为 AND:
- from:
- source:
requestPrincipals:
- '*'
source:
notNamespaces:
- <namespace>