LLM Security

Chiffrement, isolation et zero-trust appliqués aux workloads IA

Chiffrement, isolation et zero-trust pour workloads IA : KMS, mTLS, SPIFFE, micro-segmentation, Confidential Computing. Patterns NIST 800-207 adaptés LLM.

Naim Aouaichia
13 min de lecture
  • zero-trust
  • chiffrement
  • isolation
  • mTLS
  • confidential computing

L'application des principes zero-trust (NIST SP 800-207, never trust always verify) aux workloads IA est devenu en 2026 un standard de sécurité enterprise pour les apps LLM critiques. Les approches périmétriques classiques (WAF + firewall + VPN) sont insuffisantes : un agent IA compromis par prompt injection opère depuis l'intérieur, un confused deputy détourne des privilèges légitimes, un modèle weights stocké en clair fuite au premier compromis. Cet article documente les 3 piliers techniques : chiffrement (KMS/HSM, Confidential Computing TDX/SEV-SNP/H100 TEE, quantum-safe), isolation (NetworkPolicies, micro-segmentation eBPF Cilium, GPU isolation MIG), workload identity (SPIFFE/SPIRE, mTLS, OAuth on-behalf-of). Avec 5 piliers CISA Zero Trust Maturity Model adaptés (Identity, Devices, Networks, Apps & Workloads, Data + AI Models en bonus), grille d'audit, patterns d'implémentation. Cible : architectes sécurité / SRE / RSSI structurant la sécurité workloads IA, équipes plateforme migrant vers zero-trust, auditeurs vérifiant la posture sécurité.

Pour l'architecture on-premise associée : architecture sécurisée pour déployer un LLM on-premise. Pour le threat model qui guide ces choix : threat modeling LLM avec STRIDE adapté.

Pourquoi zero-trust pour workloads IA

Limites des approches périmétriques

[Modèle traditionnel]
┌───────────────────────────────┐
│   Périmètre corporate          │
│  ┌─────────────────────────┐   │
│  │ Tout ce qui est ici     │   │  ← problème :
│  │ est trusted             │   │     une fois "dedans",
│  │                         │   │     plus de contrôle
│  │  [App] [LLM] [Tools]    │   │
│  │  [Vector] [Memory]      │   │
│  └─────────────────────────┘   │
│   ↑ WAF / Firewall / VPN       │
└───────────────────────────────┘
        ↑
   Internet (untrusted)

Échoue contre :

  • Compromis interne (prompt injection rend l'agent malveillant)
  • Confused deputy (agent légitime utilisé pour actions malveillantes)
  • Insider threat (admin host accède aux weights)
  • Lateral movement (un service compromis attaque les autres librement)

Modèle zero-trust

[Modèle zero-trust]
   Chaque appel = vérification :
   ▸ Identity vérifiée (SPIFFE / mTLS)
   ▸ Authorization explicite (RBAC fin)
   ▸ Channel chiffré (TLS 1.3)
   ▸ Logged et auditable
   
   Pas de "trusted zone" implicite.
   Pas de "shared secret" entre services.
   Tout est authentifié à la frontière.

NIST SP 800-207 (2020), référentiel fondateur. Cinq piliers (CISA Zero Trust Maturity Model v2.0, 2023) :

  1. Identity : qui agit ?
  2. Devices : depuis quel device ?
  3. Networks : sur quel réseau ?
  4. Applications & Workloads : quelle app/service ?
  5. Data : quelle donnée ?

Pour LLM 2026, ajouter implicitement un 6ème pilier : AI Models (weights, embeddings, training data).

Pilier 1, Chiffrement par actif IA

Modèles weights

Threat : vol disque physique, compromise host, insider threat (admin curieux).

Mitigations :

# K8s : StorageClass chiffré
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: encrypted-models
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp3
  encrypted: "true"
  kmsKeyId: arn:aws:kms:eu-west-1:...:key/...
  iops: "16000"
  throughput: "1000"
allowVolumeExpansion: true

Niveau supérieur, Confidential Computing :

# Pod scheduling sur nodes Confidential Computing
apiVersion: v1
kind: Pod
metadata:
  name: vllm-confidential
spec:
  nodeSelector:
    confidential-computing: "intel-tdx"
  containers:
    - name: vllm
      image: vllm/vllm-openai:v0.6.4
      # Mémoire chiffrée par le hardware,
      # admin host ne peut pas lire weights en mémoire

Embeddings et vector store

Risk spécifique : embeddings peuvent être reverse-engineerés pour reconstruire texte original (Morris et al., Text Embeddings Reveal (Almost) As Much As Text, EMNLP 2023, ~92% reconstruction accuracy).

Mitigation pour données sensibles :

# 1. Pseudonymiser AVANT embedding
from presidio_analyzer import AnalyzerEngine
from presidio_anonymizer import AnonymizerEngine
 
def safe_embed(text: str) -> list[float]:
    # Strip PII before embedding
    redacted = anonymize(text, entities=["EMAIL", "PHONE", "PERSON", "FR_NIR"])
    return embedding_model.encode(redacted)
 
 
# 2. Chiffrer at rest
# ChromaDB / Qdrant supports encryption at rest natif
# Sinon : disque chiffré + access control strict
 
 
# 3. Chiffrer in transit
# TLS 1.3 sur connection vector store
client = QdrantClient(
    url="https://qdrant.internal:6333",
    api_key=os.environ["QDRANT_API_KEY"],
    https=True,
    verify=True,  # ne JAMAIS désactiver verify en prod
)

Prompts et réponses

In transit : TLS 1.3 partout.

At rest dans logs :

import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
 
def encrypt_log_payload(plaintext: bytes, key_id: str) -> dict:
    """Chiffre un payload sensible avec KMS-managed key."""
    # Récupérer DEK via KMS (Vault, AWS KMS, Azure Key Vault)
    dek = kms_decrypt(key_id, encrypted_dek)
    
    aesgcm = AESGCM(dek)
    nonce = os.urandom(12)
    ciphertext = aesgcm.encrypt(nonce, plaintext, associated_data=None)
    
    return {
        "ciphertext": ciphertext.hex(),
        "nonce": nonce.hex(),
        "key_id": key_id,
    }
 
 
def log_sensitive_interaction(prompt: str, response: str, user_id: str):
    payload = json.dumps({
        "prompt": prompt,
        "response": response,
        "user_id_hash": pseudonymize(user_id),
    }).encode()
    
    encrypted = encrypt_log_payload(payload, key_id="logs-llm-prod")
    
    logger.info({
        "event": "llm_interaction",
        "encrypted_payload": encrypted,
        "ts": datetime.utcnow().isoformat(),
    })

Standards et quantum-safe

Aujourd'hui :

  • AES-256-GCM pour data
  • RSA-4096 / ECDSA-P384 / Ed25519 pour signatures
  • TLS 1.3 wire (ne plus accepter TLS 1.2 nouveaux services)

Quantum-safe (2026-2028) :

  • NIST PQC standards 2024 : ML-KEM (Kyber, key encapsulation), ML-DSA (Dilithium, digital signatures)
  • À anticiper pour assets longue durée : modèles weights conservés 5+ ans, audit logs avec rétention longue, embeddings de données médicales/légales
  • Stratégie hybride : combiner classique + PQ pendant la transition

Pilier 2, Workload identity (SPIFFE/SPIRE)

Pourquoi pas des API keys partagées

Anti-pattern fréquent :

# ConfigMap avec API key partagée entre tous les pods
apiVersion: v1
kind: ConfigMap
metadata:
  name: shared-llm-config
data:
  vllm_api_key: "sk-shared-key-12345"  # ← TOUT le monde a ça

Problèmes :

  • Fuite d'un seul pod = compromise globale
  • Aucune traçabilité (qui a appelé ?)
  • Rotation manuelle complexe et risquée

Pattern SPIFFE/SPIRE

SPIFFE = format d'identité standard, SVID = certificat X.509 signé par CA SPIRE.

spiffe://zerodaysupport.com/ns/llm-prod/sa/agent-customer-support
        └── trust domain ────────┘    └── workload path ─────────┘

SPIRE Server = CA centrale, SPIRE Agent = sur chaque node, attest workload via méta-données K8s.

# SPIRE Server registration entry
apiVersion: spire.io/v1
kind: ClusterSPIFFEID
metadata:
  name: agent-customer-support
spec:
  spiffeIDTemplate: "spiffe://zerodaysupport.com/ns/{{ .PodMeta.Namespace }}/sa/{{ .PodSpec.ServiceAccountName }}"
  podSelector:
    matchLabels:
      app: agent-customer-support
  ttl: 1h  # rotation automatique

mTLS basé sur SPIFFE

# Service Python qui authenticate via SPIFFE SVID
from pyspiffe.spiffe_id.spiffe_id import SpiffeId
from pyspiffe.workloadapi.default_x509_source import DefaultX509Source
import ssl
 
x509_source = DefaultX509Source()
 
# Server side : seuls SPIFFE IDs authorized acceptés
ALLOWED_SPIFFE = {
    SpiffeId.parse("spiffe://zerodaysupport.com/ns/llm-prod/sa/agent-customer-support"),
    SpiffeId.parse("spiffe://zerodaysupport.com/ns/llm-prod/sa/api-gateway"),
}
 
def verify_peer(svid):
    return svid.spiffe_id in ALLOWED_SPIFFE
 
# Configurer TLS server avec source SPIFFE + verifier
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain(x509_source.get_x509_svid().cert_chain_path,
                            x509_source.get_x509_svid().private_key_path)
ssl_context.verify_mode = ssl.CERT_REQUIRED
ssl_context.set_verify_callback(verify_peer)

Service mesh (alternative) Istio / Linkerd

Plus simple à adopter pour les équipes K8s : Istio fournit mTLS automatique sur tout le mesh, basé sur SPIFFE under the hood.

# Istio strict mTLS namespace-wide
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: llm-prod
spec:
  mtls:
    mode: STRICT
---
# Authorization policy : seul agent-customer-support peut appeler vllm
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: vllm-authz
  namespace: llm-prod
spec:
  selector:
    matchLabels:
      app: vllm-llama-3-70b
  action: ALLOW
  rules:
    - from:
        - source:
            principals:
              - "cluster.local/ns/llm-prod/sa/agent-customer-support"
              - "cluster.local/ns/llm-prod/sa/api-gateway"
      to:
        - operation:
            methods: ["POST"]
            paths: ["/v1/chat/completions"]

OAuth on-behalf-of pour agents

Cf article Confused Deputy du cluster vulnérabilités. Pattern critique pour agents IA : ne jamais propager les privilèges de l'agent vers les tools, toujours utiliser l'identité de l'utilisateur initial via OBO flow.

Pilier 3, Isolation et micro-segmentation

NetworkPolicies, deny-all par défaut

# Étape 1 : Deny all par défaut dans le namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: llm-prod
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
 
---
# Étape 2 : Allow explicite
# vLLM accepte de api-gateway uniquement
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: vllm-from-gateway
  namespace: llm-prod
spec:
  podSelector:
    matchLabels:
      app: vllm-llama-3-70b
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: api-gateway
      ports:
        - protocol: TCP
          port: 8000
  egress:
    # Vers observability stack
    - to:
        - namespaceSelector:
            matchLabels:
              name: monitoring
      ports:
        - protocol: TCP
          port: 9090  # Prometheus
        - protocol: TCP
          port: 3100  # Loki
    # Vers model storage (read only)
    - to:
        - podSelector:
            matchLabels:
              app: minio-models
      ports:
        - protocol: TCP
          port: 9000
    # PAS d'internet egress

Cilium eBPF, micro-segmentation L7

NetworkPolicies K8s standard sont L3/L4. Cilium ajoute L7 (HTTP path, gRPC method, Kafka topic).

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: vllm-l7-policy
  namespace: llm-prod
spec:
  endpointSelector:
    matchLabels:
      app: vllm-llama-3-70b
  ingress:
    - fromEndpoints:
        - matchLabels:
            app: api-gateway
      toPorts:
        - ports:
            - port: "8000"
              protocol: TCP
          rules:
            http:
              # Seuls ces paths autorisés
              - method: "POST"
                path: "/v1/chat/completions"
              - method: "GET"
                path: "/health"
              # Bloque /metrics depuis api-gateway (réservé Prometheus)

GPU isolation (rappel)

Cf article Architecture on-premise du cluster. Récap :

  • Taints/tolerations K8s pour dédier nodes
  • Multi-Instance GPU (MIG) sur H100/A100 pour partition matérielle
  • Pas de mix workloads tiers / sensibles
  • Confidential Computing GPU pour cas haut risque

Pilier 4, Devices et endpoints

Souvent oublié dans contexte IA mais important :

Posture compliance

Avant qu'un dev / ops accède à la stack LLM (kubectl, console admin, accès SSH GPU node), vérifier :

  • OS patché (last patches < 30j)
  • Disk encryption activé
  • EDR running (CrowdStrike, SentinelOne, etc.)
  • MFA enrollment up-to-date
  • VPN / ZTNA actif (Cloudflare Access, Tailscale, Twingate)
# Exemple Cloudflare Access policy
- include:
    - emails:
        - llm-team@zerodaysupport.com
- require:
    - mfa
    - device_posture:
        - integration_id: crowdstrike-falcon
          minimum_version: "7.0"

Device attestation pour accès LLM

Pour utilisateurs finaux (employés enterprise) accédant à un assistant IA interne, attester le device avant accès :

  • Browser : WebAuthn + device-bound credentials
  • Mobile : Apple DeviceCheck / Android SafetyNet attestation
  • Desktop : platform attestation (TPM)

Empêche credential stuffing depuis device non corporate.

Pilier 5, Data

Classification automatique

# DLP pre-prompt : détecter classification de la donnée
DATA_CLASSIFICATIONS = {
    "public": 0,
    "internal": 1,
    "confidential": 2,
    "secret": 3,
}
 
CLASS_PATTERNS = {
    "secret": [r"\bSECRET\b", r"CONFIDENTIAL.*", r"API_KEY="],
    "confidential": [r"\bCLIENT-\d+\b", r"contract.*signed"],
    # ...
}
 
def classify_data(text: str) -> str:
    for cls, patterns in CLASS_PATTERNS.items():
        if any(re.search(p, text) for p in patterns):
            return cls
    return "internal"
 
 
@app.post("/chat")
async def chat(req: ChatReq):
    classification = classify_data(req.message)
    
    if classification == "secret":
        # Force routing vers LLM on-prem (pas API cloud)
        return await call_local_llm(req.message)
    elif classification == "confidential":
        # Log avec extra audit + on-prem si dispo
        await audit_log_strict(req)
        return await call_local_llm(req.message)
    else:
        return await call_default_llm(req.message)

DLP egress

Avant que la réponse LLM sorte vers le user, scan PII et data classification :

def dlp_egress(response: str, user_classification: int) -> str:
    """
    Si la réponse contient données plus sensibles que ce que user
    peut voir, redact.
    """
    detected = analyzer.analyze(text=response, language="fr")
    for finding in detected:
        if finding.classification > user_classification:
            response = response.replace(finding.text, "[REDACTED]")
    return response

Access logging granulaire

Chaque accès à donnée sensible (RAG retrieval cross-tenant, weights download, embedding query) → log structured avec SPIFFE ID demandeur, asset accédé, classification, action.

Pilier 6 (bonus IA), AI Models

Pas dans CISA standard. Critique pour IA en 2026 :

Asset IANiveau de protectionMesures
Modèles weights propriétaires (fine-tuned)Top secretConfidential Computing + KMS HSM + signature Sigstore
Modèles open-source (Llama, Mistral)InternalEncryption at rest + supply chain check
Embeddings de PIIConfidentialEncryption + access logging + pseudonymization upstream
Embeddings de data publiquePublicEncryption baseline
Training dataSelon source dataDPIA + chiffrement + audit access
System prompts (avec secrets)SecretVault + git-crypt si versionné
System prompts (génériques)InternalVersionnés en git classique

CISA Zero Trust Maturity Model, grille adaptée LLM

PillarTraditionalInitialAdvancedOptimal
IdentityPasswordsMFAPhishing-resistant MFA + workload identity SPIFFE+ behavioral analytics + just-in-time access
DevicesPas de gestionInventory + AVEDR + posture compliance+ device attestation + zero-trust device for LLM access
NetworksPérimètre seulSegmentation grossièreMicro-segmentation + mTLS partouteBPF L7 + DNS over HTTPS + complete encryption
Apps & WorkloadsTrust intra-LANApp-level authPer-call authn/authz + tool calls scopésOAuth OBO + SPIFFE IDs + capability tokens
DataBulk encryptionClassification manuelleAuto-classification + DLP + chiffrement granulaire+ access logging + egress DLP + retention par classification
AI Models (bonus)Weights en clairEncryption at restKMS + SigstoreConfidential Computing + SBOM ML + backdoor detection

Cible : Advanced minimum sur tous piliers pour app prod sensible. Optimal pour systèmes high risk EU AI Act.

Roadmap d'adoption

Mois 1-3 : Fondations

  • Implémenter MFA partout
  • Migrer secrets vers Vault / KMS
  • Encryption at rest sur weights et vector store
  • Logs structurés avec PII redaction
  • TLS 1.3 partout

Mois 4-6 : Identity et segmentation

  • Déployer SPIFFE/SPIRE ou service mesh (Istio/Linkerd)
  • NetworkPolicies deny-all + allow explicites
  • mTLS entre services
  • OAuth on-behalf-of pour agents

Mois 7-9 : Niveau avancé

  • Cilium eBPF L7 policies
  • Device posture compliance enforcement
  • Auto-classification + DLP egress
  • Audit logs SIEM intégrés

Mois 10-12 : Optimal pour critique

  • Confidential Computing pour modèles haut risque
  • Quantum-safe planning
  • Behavioral analytics intégré au reste
  • Audit zero-trust maturity externe

Erreurs récurrentes

Erreur 1, API key partagée entre tous les services

Compromise d'un = compromise de tout. SPIFFE ou IAM workload identity obligatoire.

Erreur 2, NetworkPolicies absentes ou trop permissives

egress: {} (allow all). À chaque pod compromis, lateral movement libre. Deny-all + allow explicites systématique.

Erreur 3, TLS pas vérifié strictement

verify=False quelque part dans le code Python. MITM possible. Strict verify partout, pinning pour critique.

Erreur 4, Confidential Computing sans attestation

Activer TEE sans vérifier l'attestation = sécurité théorique. Toujours valider attestation cryptographique au boot.

Erreur 5, Embeddings PII non pseudonymisés

Reverse-engineering possible. Pseudonymiser upstream avant embedding.

Erreur 6, Pas de roadmap progressive

"Zero trust everywhere now" = échec. Progressive sur 12-18 mois par pillar prioritaire.

Ce que ça change pour votre dispositif

Une posture zero-trust mature pour workloads IA en 2026 :

  • Chiffrement 3 couches (modèles, embeddings, prompts/réponses) avec Confidential Computing pour critique
  • Workload identity SPIFFE/SPIRE ou service mesh, fini les API keys partagées
  • Micro-segmentation eBPF L7 avec deny-all + allow explicites
  • Device posture + ZTNA pour accès admin / utilisateur
  • DLP automatique + classification + access logging
  • AI Models comme pillar dédié avec mesures spécifiques

ROI : transition complète 12-18 mois, 1-2 ETP sécurité + collab avec équipes plateforme. Bénéfices mesurés :

  • Réduction blast radius d'un compromis (mouvement latéral bloqué)
  • Conformité EU AI Act / NIST AI RMF / ISO 42001 facilitée
  • Audits externes simplifiés (preuve via configs + logs)
  • Maturité détection (chaque accès loggué = baseline anomaly detection)

Le zero-trust pour IA n'est plus une option en 2026 pour les apps stratégiques. C'est l'état de l'art que les régulateurs et les clients enterprise commencent à exiger.


Pour aller plus loin : la couche zero-trust et chiffrement constitue le socle infra sur lequel se posent les couches applicatives (guardrails, observabilité, détection abus) déjà couvertes dans le cluster défense. La synergie complète forme une architecture sécurité IA mature 2026.

Questions fréquentes

  • Pourquoi appliquer le zero-trust aux workloads IA et non un simple périmètre ?
    Le **zero-trust** (NIST SP 800-207) repose sur 'never trust, always verify', chaque accès est authentifié, autorisé et chiffré, indépendamment de la localisation réseau. Trois raisons spécifiques aux workloads IA en 2026. (1) **Surface d'attaque interne** : un agent IA compromis (via prompt injection, confused deputy) opère **depuis l'intérieur** du périmètre. Sans zero-trust, ses appels lateraux passent sans contrôle. (2) **Multi-tenant fréquent** : SaaS LLM, vector store partagé, modèles servis pour plusieurs clients = besoin de cloisonnement strict, pas seulement périmétrique. (3) **Modèles et embeddings = actifs critiques** : weights propriétaires, vector embeddings (peuvent leak training data via membership inference), mérite chiffrement at rest + access logging granulaire. **Référentiels** : NIST SP 800-207 (Zero Trust Architecture, 2020), NIST 800-207A (Zero Trust for Cloud-Native, 2023), CISA Zero Trust Maturity Model. Adaptation LLM = 5 piliers classiques (Identity, Devices, Network, Application Workload, Data) appliqués aux composants IA spécifiques (modèle, RAG, agents, tools).
  • Quelle stratégie de chiffrement pour les actifs IA (modèles, embeddings, prompts/réponses) ?
    Stratégie en 3 couches by-asset. **(1) Modèles weights** : chiffrement at rest obligatoire (KMS / HSM), déchiffrement runtime en mémoire seulement. Pour modèles propriétaires haut risque : **Confidential Computing** (Intel TDX, AMD SEV-SNP, NVIDIA H100 TEE) qui chiffre la mémoire elle-même contre admin host. Coût overhead 5-15% throughput, acceptable pour critique. **(2) Embeddings / vector store** : chiffrement at rest (AES-256-GCM), chiffrement in transit (TLS 1.3 minimum). Risk : embeddings peuvent être reverse-engineerés pour reconstruire texte original (papers Morris et al. 2023). Pour données sensibles (santé, RGPD article 9) : générer embeddings depuis données déjà pseudonymisées. **(3) Prompts et réponses** : in transit toujours TLS 1.3. At rest dans logs/memory : chiffrement obligatoire + redaction PII (Presidio). **Standards crypto** : AES-256-GCM data, RSA-4096 / ECDSA-P384 / Ed25519 signatures, TLS 1.3 wire. **Quantum-safe** : à anticiper 2026-2028 via NIST PQC standards (ML-KEM, ML-DSA) pour assets longue durée (modèles weights gardés 5+ ans).
  • Comment implémenter une identité workload (workload identity) pour services IA ?
    Standard de fait 2024-2026 : **SPIFFE / SPIRE** (CNCF, sandbox graduated 2022). SPIFFE = format d'identité (`spiffe://example.com/ns/llm-prod/sa/vllm-server`), SPIRE = implémentation (control plane + agents). **Mécanisme** : chaque workload (pod K8s, VM, container) reçoit un X.509 SVID (SPIFFE Verifiable Identity Document) signé par CA SPIRE, avec rotation automatique (1h typique). Les workloads s'authentifient mutuellement via mTLS basé sur ces SVIDs. **Pourquoi ça matter pour IA** : (1) Agent qui appelle un tool peut s'authentifier comme `spiffe://.../agent-customer-support`, le tool autorise selon ce SPIFFE ID, pas selon une API key partagée volable. (2) Service vLLM accepte connections seulement de SPIFFE IDs authorized (frontend app), pas du LAN entier. (3) Audit logs trackent SPIFFE ID, pas IP, traçabilité réelle. **Alternatives** : Istio mesh avec mTLS intégré (utilise SPIFFE under the hood), AWS IAM Roles for Service Accounts, Azure Workload Identity, GCP Workload Identity Federation. **Anti-pattern** : API keys partagées entre tous les pods d'un service. Fuite = compromise globale.
  • Comment faire de la micro-segmentation réseau adaptée aux flows IA ?
    Micro-segmentation = règles allow/deny granulaires entre workloads, par défaut deny-all. **Pour workloads IA** : (1) **Frontend app** : peut appeler API Gateway. Ne peut PAS appeler vLLM ni vector store directement. (2) **API Gateway** : peut appeler app middleware. Pas l'inverse. (3) **App middleware** : peut appeler vLLM (port 8000), vector store (gRPC), Vault (secrets read), observability stack (logs/metrics push). Cannot appeler internet. (4) **vLLM service** : ingress only depuis app middleware. Egress only vers observability + model storage (read-only). (5) **Tools (mail, code, payment)** : ingress only depuis agent service avec SPIFFE ID validé. Egress contrôlé selon tool (mail = SMTP allowlist domains). **Implémentation** : NetworkPolicies K8s (Calico, Cilium) + service mesh mTLS (Istio, Linkerd). Cilium offre **eBPF-based** policies pour performance et observabilité fine. **Validation** : tester avec Network Policy Auditing (kubectl ko-policy, Cilium Hubble). **Erreur fréquente** : `egress: {}` (allow all) par flemme. À chaque audit, scan strict des NetworkPolicies, règle deny-all par défaut + allow explicites uniquement.
  • Quels patterns Confidential Computing pertinents pour LLM en 2026 ?
    **Confidential Computing** = exécution dans Trusted Execution Environment (TEE) qui chiffre la mémoire contre admin host, hyperviseur, autres VMs. Pertinent quand model weights ou prompts/réponses doivent être protégés contre cloud provider ou insider threat. **Stack 2026 mature** : (1) **Intel TDX** (Trust Domain Extensions), VMs entières dans TEE, support Sapphire Rapids+. (2) **AMD SEV-SNP** (Secure Encrypted Virtualization, Secure Nested Paging), alternative AMD, support EPYC 3rd+. (3) **NVIDIA H100 Confidential Computing**, TEE GPU, complète CPU TEE pour pipeline complet. **Stack cloud** : Azure Confidential VMs, GCP Confidential Space, AWS Nitro Enclaves. **Use case typique** : entreprise charge ses modèles weights propriétaires sur un cloud, mais ne veut pas que cloud provider puisse les inspecter. Confidential Computing fournit attestation cryptographique que le code tourne dans TEE non altéré. **Coût** : overhead 5-15% throughput, prix instances + 20-40%. Maturité 2026 : production-ready chez les 3 hyperscalers, déploiement croissant. **Anti-hype** : tous les workloads IA n'en ont pas besoin. Réserver pour cas avec menace insider crédible (cloud admin, autres tenants), modèles très sensibles, données régulées strictes.
  • Comment auditer la maturité zero-trust d'un dispositif IA ?
    Référentiel : **CISA Zero Trust Maturity Model v2.0** (2023), 5 piliers × 4 niveaux (Traditional → Initial → Advanced → Optimal). Adapté LLM. **Pillar 1, Identity** : Traditional = passwords. Optimal = phishing-resistant MFA + workload identity SPIFFE + behavioral analytics. **Pillar 2, Devices** : Traditional = pas de gestion. Optimal = posture compliance enforced + EDR + device attestation pour accès LLM. **Pillar 3, Networks** : Traditional = perimeter only. Optimal = micro-segmentation + mTLS partout + encryption in transit + DNS over HTTPS. **Pillar 4, Applications & Workloads** : Traditional = trust intra-périmètre. Optimal = chaque appel LLM authentifié + autorisé granulairement + tool calls scopés OAuth on-behalf-of. **Pillar 5, Data** : Traditional = bulk encryption. Optimal = classification automatique + DLP + chiffrement granulaire par sensibilité + access logging. **Audit** : grille auto-évaluation par pillar, plan de progression vers 'Advanced' minimum sur chaque pillar pour app prod. Cadence : audit annuel + post incident. **Bonus IA** : ajouter pillar 'AI Models' avec niveau de protection des modèles weights, embeddings, training data. Pas dans CISA standard mais critique pour 2026+.

Écrit par

Naim Aouaichia

Cyber Security Engineer et fondateur de Zeroday Cyber Academy

Ingénieur cybersécurité avec un parcours hybride : développement, DevOps Capgemini, DevSecOps IN Groupe (sécurité des documents d'identité régaliens), audits CAC 40. Fondateur de Hash24Security et Zeroday Cyber Academy. Présence LinkedIn 43 000 abonnés, Substack Zeroday Notes 23 000 abonnés.