Gestion des secrets
Gestion des secrets
1) Pourquoi et ce que nous considérons exactement comme un « secret »
Secret - tout matériel dont la divulgation conduit à la compromission du système ou des données : mots de passe, jetons API, clés privées OAuth/JWT, clés SSH, certificats, clés de cryptage (KEK/DEK), clés de signature de webhooks, DSN de bases/caches, clés de fournisseurs (paiements, fournisseurs de messagerie/SMS), cookies sels/pepper, tokens bots/chat, licences.
Les secrets vivent dans le code, конфиге, l'entourage, les images de conteneur, CI/CD, Terraform/Ansible, les logakh/vidages - la tâche du management des secrets : le compte → la conservation → la livraison → l'utilisation → la rotation → le rappel → l'audit → l'utilisation.
2) Principes de l'architecture
Centralisation. Un seul calque de confiance (Vault/Cloud Secret Manager/KMS) pour le stockage, l'émission et l'audit.
Les plus petits privilèges (PoLP). Accès uniquement aux bons services/rôles, pour une durée minimale.
Une vie courte. Les secrets dynamiques/temporels avec TTL/lease sont préférés.
Crypto-agility. Possibilité de changer les algorithmes/longueurs de clés sans interruption de service.
Séparer les secrets des codes/images. Pas de mots de passe dans les référentiels ou dans les images Docker.
Observation et audit. Chaque opération d'émission/lecture de secrets est logifiée et validée.
Rotation automatique. La rotation est un processus dans la pipeline, pas une action manuelle.
3) Les solutions types et les rôles des composants
KMS/HSM. Confiance racine, chiffrement/enveloppes de clés (envelope).
Secret Manager/Vault. Stockage des versions secrètes, ACL, audit, secrets dynamiques (DB, cloud-IAM, PKI), modèles de rotation.
PKI/CA. Délivrance de certificats mTLS/SSH/JWT à courte durée de vie.
Agent/sidecar. Livrez des secrets à rantim (fichiers tmpfs, in-memory k/v, hot-reload).
Pilotes/opérateurs CSI. Intégration avec Kubernetes (Secret Store CSI Driver, cert-manager).
Couche de chiffrement dans Git. SOPS/age, git-crypt (pour le code d'infrastructure).
4) Classification et politique
Séparer les secrets selon la criticité (P0/P1/P2) et le volume des dommages (tenant-scoped, environment-scoped, org-wide). Pour chaque classe, définissez :- TTL/lease et fréquence de rotation ;
- Méthode d'émission (dynamique vs statique), format, support ;
- la politique d'accès (qui/où/quand/pourquoi), les exigences du mTLS et l'authentification mutuelle ;
- audit (ce que nous logions, combien nous stockons, qui revoit) ;
- procédures de break-glass et rappel.
5) Le cycle de vie du secret
1. Création : via l'API Secret Manager avec les métadonnées (owner, tags, scope).
2. Stockage : sous forme cryptée (envelope : DEK enroulé KEK de KMS/HSM).
3. Livraison : sur demande d'une entité autorisée (OIDC/JWT, SPIFFE/S...., mTLS).
4. Utilisation : uniquement en mémoire/dans tmpfs ; interdiction de loger/vider.
5. Rotation : par TTL ou événement (compromission) ; prise en charge des versions parallèles (N-1).
6. Rappel/blocage : fin immédiate de lease, diesel du compte/clé dans le système cible.
7. Élimination : destruction des versions/du matériel, chaîne de vérification claire.
6) Secrets dynamiques (recommandé par défaut)
Idée : un secret est émis pour une courte période et expire automatiquement. Exemples :- Informations d'identification OBD (Postgres/MySQL) avec TTL 15-60 min.
- Clés de temps cloud (AWS/GCP/Azure) par rôle de service.
- Certificats SSH (5-30 min), certificats X.509 (heure/jour).
- JWT temporaire pour la signature des demandes, sessions-tickets des courtiers.
- Avantages : minimum de radius blast, rappel simplifié (rien ne « restera » dans le monde).
7) Livrer des secrets à rantim
Kubernetes:- Secret Store CSI Driver → le montage de secrets à partir d'un gestionnaire externe dans un pod en tant que fichiers (tmpfs).
- Éviter Kubernetes Secret comme seule source (base64 ≠ cryptage) ; si nécessaire, activez le fournisseur KMS pour etcd.
- Agent sidecar (Vault Agent/Secret Store) avec auto-renoval lease et hot-reload.
- VM/Bare-metal : agent système + mTLS vers Vault/Secret Manager, cache en mémoire, TCB minimum.
- Serverless : intégration du nuage avec la substitution transparente des secrets comme variables d'environnement/fichiers, mais éviter les envars à longue durée de vie - de préférence les fichiers/en mémoire.
Exemple (Kubernetes + CSI, conceptuellement)
yaml apiVersion: v1 kind: Pod metadata: { name: app }
spec:
serviceAccountName: app-sa # is associated with a role in Secret Manager volumes:
- name: secrets csi:
driver: secrets-store. csi. k8s. io readOnly: true volumeAttributes:
secretProviderClass: app-spc containers:
- name: app volumeMounts:
- mountPath: /run/secrets name: secrets readOnly: true
8) Intégration CI/CD et IaC
CI : Les workers reçoivent des tokens à courte durée de vie selon l'OIDC (Workload Identity). L'interdiction des secrets « masqués » qui tombent dans les loges ; étape « scan des fuites » (trufflehog/gitleaks).
CD : Le dépliant prend les secrets au moment de la mise en place, ne les enregistre pas dans les artefacts.
IaC : Terraform stocke les variables dans Secret Manager ; l'état (state) est crypté et limité à l'accès.
SOPS/age : pour repo - stocker les manifestes cryptés, les clés - sous KMS.
Exemple (fragment SOPS)
yaml apiVersion: v1 kind: Secret metadata: { name: app }
data:
PASSWORD: ENC[AES256_GCM,data:...,sops:...]
sops:
kms:
- arn: arn:aws:kms:...
encrypted_regex: '^(data stringData)$'
version: '3. 8. 0'
9) Stratégies d'accès et authentification des charges de travail
Workload identity: SPIFFE/SPIRE, Kubernetes SA→OIDC→IAM-роль, mTLS.
Jetons temporaires : court TTL, scope étroit.
ABAC/RBAC dans Secret Manager : "qui peut lire le secret X dans l'environnement Y est séparé de" qui peut créer/tourner ".
Polyvalence : namespaces/key-rings séparés par locataire ; des politiques et des rapports distincts.
10) Rotation, versions et compatibilité
Séparez l'ID du secret et sa version ('secret/app/db # v17').
Maintenez deux versions actives (N et N-1) pour une rotation non-stop.
La rotation est un événement : lors du licenciement, de la compromission, du changement de fournisseur, de la migration des algorithmes.
Automatisez : cron/backend de rotation dans Vault/Secret Manager + webhook-déclencheurs de redémarrage d'applications/renewal.
Mini-recette « à deux clics » rotation webhook
text
T0: we publish two secrets in the provider: current, next
T1: the application starts accepting signatures by both current and next
T2: external system switches signature to next
T3: we do next -> current, re-release new next
11) Stockage en dehors du rentim : sauvegardes et artefacts
Ne jamais tomber dans les artefacts (images, archives de loges, vides).
Backaps Secret Manager - chiffrer, clés de stockage en dehors du même contour (séparation de duties).
Étiquettes et scans DLP : détection de secrets dans les S3/Blob/GCS, Git, artefacts CI.
12) Observation, audit et SLO
Métriques : nombre d'émissions/secret/service, proportion de lease expirée, TTL moyen, temps de rotation, temps de convergence (secondes/minutes avant l'adoption de la nouvelle version).
Audit-logs : qui/quoi/quand/d'où/pourquoi ; stockage séparé, crypté aussi.
SLO : 99 % des émissions <200 ms ; 0 fuites dans les logs ; 100 % des secrets ont owner/TTL/tags ; 100 % des secrets critiques - dynamique ou rotation ≤ 30 jours.
Alert : secret expire <7 jours (pour les statiques), sursaut de refus d'authentification au magasin, pas de lecture de secret> N jours (mort), sources géo/ASN inattendues.
13) Erreurs fréquentes et comment les éviter
Secrets dans Git/images. Utiliser SOPS/age et scanners ; La politique interdit les lignes nues.
Envvars comme support à long terme. Préférez les fichiers tmpfs/in-memory ; nettoyer l'environnement aux forks/dames.
Les mêmes secrets pour dev/stage/prod. Divisez-le par environnement.
Mots de passe statiques à longue durée de vie. Passez à dynamique/courte vie.
Une clé maître unique pour tout. Diviser par locataires/projets/services.
Pas de hot-reload. L'application nécessite un restart → une fenêtre de vulnérabilité lors de la rotation.
14) Exemples d'intégrations (schématiquement)
Vault Dynamic Access à Postgres
hcl
Vault: role -> issues the user to the database with TTL 30m and privileges only to the app path "database/creds/app-role" {
capabilities = ["read"]
}
Application requests/database/creds/app-role -> receives (user, pass, ttl)
Signature JWT des demandes (bref délai)
La clé privée est stockée dans Secret Manager ; le service demande un signing-token à courte vie et l'agent local signe payload (la clé n'est pas transmise à l'application en tant que chaîne).
Certificats SSH pour les admins
Émission de SSH-cert pendant 10 minutes par SSO (OIDC), sans distribution de clés permanentes.
15) Sécurité sur les bords
Logs/remorques/métriques : désinfectants, filtres pour clés/patterns connus ; les champs « secrets » sont masqués dans l'APM.
Décharges/crash-reports : couper par défaut ; Si nécessaire, crypter et nettoyer.
Applications clientes/mobile : minimisez les secrets hors ligne, utilisez les coffres-forts de plate-forme (Keychain/Keystore), attachez à votre appareil, TLS-pinning avec un déroulage d'urgence.
16) Conformité
PCI DSS : interdiction de stocker des PAN/secrets sans chiffrement ; contrôle strict de l'accès et de la rotation.
ISO 27001/SOC 2 : exigences en matière de gestion des actifs, de journalisation, de contrôle d'accès, de modification des configurations.
RGPD/régulateurs locaux : minimisation, accès au besoin, audit.
17) Processus et runbook
Mise en service
1. Inventaire des secrets (référentiels, CI, images, runtime, backaps).
2. Classification et balises (owner, environnement, tenant, rotation-politique).
3. Sélection de stockage (Vault/Cloud SM) + intégration avec KMS/HSM.
4. Configurer l'émission par workload identity (OIDC/SPIRE).
5. Activation des secrets dynamiques pour les bases de données/nuages/PKI.
6. Auto-rotation et hot-reload ; les alertes à l'export.
7. Configurer les scanners de fuites et Data Catalogue/DS.
Scénarios d'urgence
Suspicion de fuite : liste d'accès stop, rotation immédiate, retrait des certificats/clés, transfert de tokens, activation de l'audit élevé, RCA.
Gestionnaire Secret non disponible : Cache local en mémoire TTL, dégradation des fonctions, limitation des nouvelles connexions, étapes de break-glass manuelles.
Compromission de la clé racine : régénération key-hierarchy, rewrap de tous les DEK, vérification de toutes les émissions par la fenêtre de risque.
18) Chèques-feuilles
Avant la vente
- Secrets supprimés du code/images ; les scanners de fuite sont inclus.
- Des mécanismes dynamiques sont inclus pour les secrets critiques.
- Livraison via sidecar/CSI/tmpfs avec hot-reload, sans envars durables.
- Stratégie IAM/ABAC configurée, ancrage à l'identité workload.
- Auto-rotation et versions doubles (N, N-1) pour la compatibilité.
- Métriques/alertes/audit inclus ; les tests de dégradation sont passés.
Exploitation
- Rapport mensuel : propriétaires, TTL, secrets périmés, non utilisés.
- Rotations périodiques et pentestes des voies de fuite (logs, décharges, artefacts).
- Plan de crypto-agility et remplacement d'urgence du SA/racine.
19) FAQ
Q : Est-ce que Secret Manager est suffisant sans KMS ?
R : Pour le niveau de base - oui, mais il est préférable d'utiliser le cryptage envelope : KEK dans KMS/HSM, secrets - emballés. Cela facilite les rappels et la conformité.
Q : Que choisir - statique ou dynamique ?
R : Par défaut, le haut-parleur. Laissez la statique seulement là où il n'y a pas de fournisseurs pris en charge et brûler la TTL à des jours/heures + rotation automatique.
Q : Comment jeter des secrets en toute sécurité dans un microservice ?
О: Workload identity → mTLS к Secret Manager → sidecar/CSI → файлы в tmpfs + hot-reload. Sans loges, sans envvars « pour toujours ».
Q : Est-il possible de garder des secrets dans Kubernetes Secret ?
R : Seulement avec le cryptage etcd activé avec le fournisseur KMS et les politiques strictes. Préférez le stockage externe et le CSI.
Q : Comment « crypto-effacer » l'accès du locataire ?
R : Retirer/bloquer ses politiques dans Secret Manager, invalider toutes les leases, rotation/régénération des clés ; Si vous utilisez KMS, désactivez les KEK correspondants.
- Cryptage At Rest
- Cryptage In Transit
- Gestion des clés et rotation
- Authentification S2S
- Signature et vérification des demandes