Istio Ingress Gateway同时支持证书与AAD认证流量的配置咨询
Istio Ingress Gateway 双认证模式配置方案
核心实现思路
Istio默认的强制双向TLS认证会在TLS握手阶段直接拒绝无客户端证书的连接,无法满足双认证共存的需求。我们可以采用可选客户端证书校验+分层授权判断的方案实现需求:先将网关TLS校验改为非强制模式,允许无证书的请求完成TLS握手,再通过授权策略对两类合法请求做放行判断,其余请求直接拒绝。
具体配置调整步骤
- 调整Gateway资源的TLS配置,将原有
MUTUAL模式修改为OPTIONAL_MUTUAL模式。该模式下网关会尝试请求客户端证书并做校验,但不会直接拒绝未携带证书的连接,配置示例如下:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: your-ingress-gateway namespace: istio-ingress spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "your.domain.com" tls: mode: OPTIONAL_MUTUAL credentialName: gateway-tls-secret # 存储服务端证书、CA根证书的Secret
- 配置网关层面的AuthorizationPolicy,实现双条件放行:只要请求满足「携带有效客户端证书」或「携带Authorization请求头」任意一种条件就允许通行,配置示例如下:
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: gateway-dual-auth-policy namespace: istio-ingress spec: selector: matchLabels: istio: ingressgateway action: ALLOW rules: # 放行带有效客户端证书的请求 - from: - source: requestPrincipals: ["*"] # 放行带Authorization头的请求 - when: - key: request.headers[Authorization] values: ["*"]
- 保留原有VirtualService中的HTTP路由规则,两类请求都会被网关正常解密,基于查询参数的路由逻辑不受影响,携带Authorization头的请求会原样透传到后端服务,由服务自行完成AAD认证校验。
注意事项
- 如果需要对两类请求做差异化路由,可以在VirtualService中添加基于
request.auth.principal属性或Authorization头的匹配规则,实现更细粒度的流量调度。 - 需确保网关关联的Secret中CA根证书配置正确,避免合法客户端证书被判定为无效,导致mTLS类请求校验失败。
- 若要禁止同时携带客户端证书和Authorization头的请求,只需在AuthorizationPolicy中新增优先级更高的DENY规则即可。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

