---
title: Istio External Auth 与全局鉴权(Envoy ext_authz、OPA 与验证)
date: 2025-11-26
keywords:
- ext_authz
- OPA
- EnvoyFilter
- AuthorizationPolicy
- JWT
description: 在Istio中通过Envoy ext_authz对接外部鉴权服务或OPA,实现入口与服务间统一鉴权,并提供策略与端到端验证方法。
categories:
- 文章资讯
- 编程技术
---
概述
ext_authz可在HTTP请求进入服务前调用外部鉴权服务,结合OPA策略或自研鉴权接口,统一实现跨服务的授权控制与审计,支持JWT解析与细粒度规则。
关键实践与参数
- 入口层: Gateway或Sidecar插入
envoy.filters.http.ext_authz - 超时与缓存: 配置鉴权超时、失败策略与结果缓存
- JWT与属性: 解析令牌并传递用户属性给鉴权服务
- 审计: 记录拒绝事件与规则命中
示例/配置/实现
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: ext-authz
namespace: istio-system
spec:
workloadSelector:
labels: { istio: ingressgateway }
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener: { portNumber: 443 }
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.ext_authz
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
http_service:
server_uri:
uri: http://authz.svc.cluster.local/check
cluster: ext-authz
timeout: 0.5s
authorization_request:
headers_to_add: [{ header: "x-user", value: "%REQ(x-user)%" }]
authorization_response:
allowed_upstream_headers: ["x-user", "x-roles"]
# OPA 示例策略
package authz
default allow = false
allow {
input.path = ["/api", "orders"]
input.method = "GET"
some r
r := input.user.roles[_]
r == "reader"
}
验证
- 允许与拒绝: 根据角色访问不同路径返回200或403
- 性能与超时: 鉴权服务超时时采取失败策略并告警
- 审计: 记录拒绝与规则命中日志,可追溯
- 安全属性: JWT解析与用户属性传递正确
注意事项
- 鉴权服务需高可用与低延迟
- 缓存与失败策略需谨慎,避免放过风险请求
- 与现有AuthorizationPolicy协同,保持策略一致
- 定期审计与测试策略覆盖

发表评论 取消回复