Envoy中Safe Regex在外部授权过滤器中失效问题
问题解决:Safe_regex匹配路由禁用ExtAuthz失效
核心问题
你当前使用的正则表达式^/(css|img|assets)/存在匹配范围限制:它仅会匹配以/css/、/img/、/assets/(末尾带斜杠)开头的路径,但对于/css(无后续斜杠)、/css.style(无斜杠)这类路径无法命中,导致这些请求依然会走ExtAuthz校验,和预期不符。
而用三条prefix规则(/css、/img、/assets)时,prefix匹配逻辑是只要路径前缀完全匹配就生效,覆盖了所有以这些字符串开头的请求,所以能正常禁用ExtAuthz。
修正方案
调整safe_regex的正则表达式,让它匹配所有以/css、/img、/assets开头的路径,无论后续是否有斜杠或其他内容。修改后的路由匹配规则如下:
routes: - match: safe_regex: google_re2: {} regex: "^/(css|img|assets)(/.*)?$" route: host_rewrite_literal: www.envoyproxy.io cluster: service_envoyproxy_io typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute disabled: true - match: prefix: "/" route: host_rewrite_literal: www.envoyproxy.io cluster: service_envoyproxy_io
正则说明
^/(css|img|assets)(/.*)?$的含义:
^/(css|img|assets):匹配以/css、/img或/assets开头的路径(/.*)?:可选的后续部分,匹配斜杠开头的任意内容(或没有)$:匹配路径结尾,确保整个路径都符合前缀规则
这样就能覆盖所有目标路径,和三条prefix规则的匹配范围完全一致,从而正确禁用ExtAuthz校验。
内容的提问来源于stack exchange,提问作者Rakesh Goyal
相关产品推荐
相关产品推荐

