第 9 章:确保微服务的通信安全
本文系统梳理了 Istio 在微服务安全领域的核心能力,涵盖服务间与终端用户的认证、授权、自动 mTLS、SPIFFE 身份、授权策略与外部授权集成等关键实践,帮助读者构建安全、可控的云原生服务网格。
应用安全需求与微服务挑战
应用安全的核心目标是保护数据不被未授权访问或篡改。微服务架构下,服务间通信频繁,传统基于静态 IP 的信任模型已不适用。Istio 通过自动化的身份认证、加密和访问控制,解决了多云、动态环境下的安全难题。


SPIFFE 身份与 Istio 证书
Istio 采用 SPIFFE 标准为每个工作负载分配唯一身份(spiffe://trust-domain/ns/namespace/sa/serviceaccount),通过自动签发和轮换 X.509 证书,实现服务间的强身份认证和加密通信。
Istio 安全资源与认证机制
Istio 主要通过以下 CRD 实现安全能力:
- PeerAuthentication:配置服务间(mTLS)认证策略
- RequestAuthentication:配置终端用户(JWT)认证
- AuthorizationPolicy:基于身份和属性的细粒度访问控制

自动 mTLS 与服务间加密
Istio 默认为注入 Sidecar 的服务自动启用双向 TLS(mTLS),实现流量加密和身份验证。通过 PeerAuthentication 可灵活配置全局、命名空间或工作负载级别的认证模式(STRICT、PERMISSIVE、DISABLE)。
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
- STRICT:仅允许加密流量
- PERMISSIVE:同时接受明文和加密流量,便于平滑迁移
验证流量加密与身份
可通过 tcpdump 验证流量是否加密,通过 openssl 检查证书中的 SPIFFE ID 与 ServiceAccount 绑定:
kubectl -n istioinaction exec deploy/webapp -c istio-proxy -- openssl s_client -showcerts -connect catalog.istioinaction.svc.cluster.local:80 -CAfile /var/run/secrets/istio/root-cert.pem | openssl x509 -text -noout
证书中应包含类似 URI:spiffe://cluster.local/ns/istioinaction/sa/catalog
的身份信息。
授权策略与访问控制
Istio 的 AuthorizationPolicy 支持基于身份、命名空间、IP、请求方法、路径等多维度的访问控制。可实现网格级、命名空间级、工作负载级的精细授权。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: allow-catalog-requests-in-web-app
namespace: istioinaction
spec:
selector:
matchLabels:
app: webapp
action: ALLOW
rules:
- to:
- operation:
paths: ["/api/catalog*"]
- ALLOW 策略需明确匹配,未匹配流量默认拒绝
- 可通过 DENY 策略实现全局拒绝,提升安全基线
终端用户认证与 JWT 支持
Istio 支持通过 RequestAuthentication 验证 JWT,实现终端用户认证。结合 AuthorizationPolicy,可基于 JWT claims 实现细粒度授权。
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: jwt-token-request-authn
namespace: istio-system
spec:
selector:
matchLabels:
app: istio-ingressgateway
jwtRules:
- issuer: "[email protected]"
jwks: |-
{ "keys": [ ... ] }
- 支持多种 JWT 签发方与公钥(JWKS)配置
- 可通过 AuthorizationPolicy 控制不同用户组的访问权限
外部授权(ExtAuthz)集成
Istio 支持通过 CUSTOM 策略集成外部授权服务(如 OPA、Gloo、自定义 HTTP 服务),实现更复杂的访问控制逻辑。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: ext-authz
namespace: istioinaction
spec:
selector:
matchLabels:
app: webapp
action: CUSTOM
provider:
name: sample-ext-authz-http
rules:
- to:
- operation:
paths: ["/"]
需在 meshConfig 中配置 extensionProviders,指定外部服务地址和端口。
常见安全配置与调试建议
- 推荐逐步推进 mTLS,先 PERMISSIVE 后 STRICT,确保平滑迁移
- 授权策略建议“默认拒绝,显式允许”,减少误授权风险
- 使用 tcpdump、openssl、istioctl 等工具验证流量加密与身份
- 外部授权需关注性能影响,建议与内置 RBAC 配合使用
总结
- Istio 通过自动 mTLS、SPIFFE 身份、JWT 支持和细粒度授权,显著提升微服务安全性
- 灵活的安全策略适应多云、动态环境下的服务治理需求
- 推荐结合实际场景,合理配置认证与授权策略,持续监控与验证安全效果
参考文献
- Istio 官方文档 - istio.io
- SPIFFE 标准 - spiffe.io
- Open Policy Agent - openpolicyagent.org
- Envoy ExtAuthz - envoyproxy.io
- JWT 标准 - jwt.io