1. Istio mTLS 的自动双向认证与 PeerAuthentication/AuthorizationPolicy 如何实现零信任?
Istio 的 mTLS 如何实现自动双向认证,PeerAuthentication 与 AuthorizationPolicy 是如何协同实现零信任的?
- PeerAuthentication 的 mTLS 模式(PERMISSIVE/STRICT)
- SPIFFE 身份与双向认证
- AuthorizationPolicy 的默认拒绝与授权
Istio 的自动 mTLS 通过 PeerAuthentication 配置:PERMISSIVE 模式允许明文与 mTLS 并存(迁移期),STRICT 模式强制服务间所有流量走双向 mTLS。工作负载通过 SPIFFE 身份(spiffe://trust-domain/ns/.../sa/...)在证书 SAN 中标识,TLS 握手时双方互相校验对方身份,实现双向认证。零信任由 AuthorizationPolicy 完成:它基于已认证的身份(source)、目标(destination)与请求属性(方法、路径)定义授权,默认拒绝(deny-by-default)——未匹配任何允许策略的请求被拒绝。两层协同:PeerAuthentication 先保证"身份可信"(强 mTLS),AuthorizationPolicy 再保证"可信身份也只能访问授权范围",实现最小权限的零信任。
零信任 = 身份认证(mTLS)+ 访问授权(AuthorizationPolicy)+ 持续验证。PeerAuthentication 解决"你是谁",AuthorizationPolicy 解决"你能访问什么"。默认拒绝是最关键的零信任特征——只放行显式授权的流量。迁移时先用 PERMISSIVE 逐步过渡到 STRICT,避免一次性强制 mTLS 导致明文流量中断。
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: default
spec:
mtls:
mode: STRICT
---
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-orders
namespace: default
spec:
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/checkout"]
to:
- operation:
methods: ["GET"]