Service Mesh Cheatsheet

Service Mesh CheatsheetKapitel 03 von 8

Service Mesh Security und Identity

Stand Istio 1.31, Cilium 1.20, Linkerd edge-26.10.x, Kuma 3.0, Consul 2.1 · Edition 2026.11 · Release-Daten geprüft am 30. Oktober 2026

mTLS & Identity

Istio: SPIFFE-Identity (spiffe://td/ns/X/sa/Y), istiod als CA, automatische Cert-Rotation. PeerAuthentication STRICT pro Namespace. FIPS 140-3 ab 1.31: COMPLIANCE_POLICY=fips-140-3 (TLS 1.2+/AES-GCM, P-256/P-384), davor als FIPS-Profil nur fips-140-2.

Linkerd: linkerd-identity als CA, Identity per ServiceAccount, mTLS by default ohne Opt-in (sobald beide Pods im Mesh sind). Trust Anchor aus linkerd install läuft nach 365 Tagen ab: selbst erzeugen, Issuer per cert-manager rotieren.

Cilium: Identity per Pod-Labels, nicht ServiceAccount. Mutual Auth (SPIFFE, Beta seit 1.14) ist seit 1.20 abgekündigt; bis 1.19.5, 1.18.11 und 1.17.17 konnte damit, wer ein gültiges Client-Zertifikat hatte, jede Identität imitieren (GHSA-33qq-jq9c-6gcc, 1.14 bis 1.16 ohne Fix). Nachfolger: ztunnel-Encryption (Beta seit 1.19, Namespace-Label io.cilium/mtls-enabled=true, nicht mit ClusterMesh).

Öffentlicher Trust Store (eMudhra-Intermediates, 10/2026): Mesh-mTLS läuft über die mesheigene CA und ist nicht betroffen. Betroffen ist nur, was dem öffentlichen CA-Bundle vertraut: TLS-Origination und Egress zu externen Hosts (Istio: DestinationRule mit SIMPLE ohne caCertificates), JWKS-Abruf durch istiod. Fix: Istio 1.31.3 und 1.30.7, Cilium 1.20.4, 1.19.10 und 1.18.16. Linkerd edge-26.10.2 baut mit Go 1.26.10; bei Consul 2.1.0 (1.26.10) und Kuma 3.0.1 (1.27.3) deckt Go nur die Go-Teile ab, nicht das CA-Bundle der Envoy-Images.

Authorization-Policy

Istio: AuthorizationPolicy mit action: ALLOW | DENY | AUDIT | CUSTOM. JWT: RequestAuthentication validiert, AuthorizationPolicy erzwingt (requestPrincipals, when). In Ambient greifen L7-Regeln nur am Waypoint (targetRefs); gegen Umgehung gehört eine ztunnel-Policy dazu, die nur die Waypoint-Identität zulässt. Ingress-Gateways umgehen den Waypoint per Default: L7-Policies am Waypoint greifen für Nord-Süd-Traffic erst mit istio.io/ingress-use-waypoint=true am Service (am Namespace ab 1.25). DENY-Regeln mit methods (und ALLOW mit notMethods) ließen sich über HTTP/2 durch abweichende Groß-/Kleinschreibung der Methode umgehen, Fix ab 1.31.2 und 1.30.6 (ISTIO-SECURITY-2026-007; dessen CVSS 9.2 gilt einer Brotli-Lücke in Envoy).

Linkerd: AuthorizationPolicy auf Server oder HTTPRoute, ServerAuthorization ist die ältere Form. Default-deny per Annotation config.linkerd.io/default-inbound-policy: deny. Vor edge-26.9.1 verfehlte ein Host-Header in anderer Schreibweise eine hostnamegebundene HTTPRoute und fiel auf eine breitere Route mit deren Policy durch (GHSA-7cq8-3jwj-3pcf). Vor edge-26.6.2 blieb eine gelöschte MeshTLSAuthentication wirksam (GHSA-229q-25q4-rxm8).

Cilium: L7-Rules in CiliumNetworkPolicy (HTTP-Method, Path, Header). JWT nicht nativ.

Kuma: MeshTrafficPermission mit Matches auf spiffeID oder sni. Consul: Intentions.

# Istio: default-deny + selektive Erlaubnis
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata: {name: deny-all, namespace: prod}
spec: {}                       # leere Rules = deny
---
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata: {name: allow-api, namespace: prod}
spec:
  selector: {matchLabels: {app: api}}
  rules:
  - from: [{source: {principals:
      ["cluster.local/ns/web/sa/frontend"]}}]

Projekte und Quellen