Guide · Cybersécurité

Gérer les secrets API proprement : variables, scopes, rotation et tests

Guide de gestion des secrets API : inventaire, variables d’environnement, scopes minimaux, rotation, fuite et vérifications.

Un secret API est une capacité d’accès, pas une simple chaîne de caractères dans un fichier. Une clé peut permettre de lire des données, envoyer des emails, lancer un modèle, modifier une base ou administrer un fournisseur. La gérer proprement signifie connaître son propriétaire, sa portée, son environnement, son stockage, sa durée de vie et la façon de la révoquer. Une variable d’environnement aide à ne pas committer la valeur ; elle ne remplace pas ce cycle de vie.

L’objectif est de réduire le nombre de secrets, leur privilège et leur durée d’exposition, tout en gardant les déploiements et le diagnostic possibles.

Ce que vous allez apprendre

Vous allez inventorier les secrets, distinguer configuration et capacité d’accès, injecter les valeurs au runtime, limiter les scopes, organiser une rotation, répondre à une fuite et écrire des tests qui empêchent la régression. Ces pratiques s’appliquent aux applications web, workers et agents IA.

Prérequis

  • La liste des services externes et internes appelés par l’application.
  • Un propriétaire technique pour chaque intégration.
  • Un mécanisme de configuration par environnement.
  • Des clés de test séparées de la production.
  • Une procédure de réponse à incident ou un canal d’escalade.

Ne partagez jamais une valeur réelle dans un ticket, un prompt, une capture d’écran ou un exemple de documentation. Utilisez une valeur factice identifiable pour les tests et exemples.

1. Inventorier les secrets et leurs capacités

Pour chaque secret, notez le fournisseur, le propriétaire, les environnements concernés, les actions autorisées, la date de création, l’expiration éventuelle et la procédure de révocation. Distinguez les secrets de configuration non sensible comme une URL publique. Un secret donne accès à quelque chose ; s’il est exposé, il peut être utilisé par une personne ou un processus non prévu.

Supprimez les clés inutilisées et évitez les secrets partagés entre plusieurs applications. Une clé par service et environnement rend la rotation et l’analyse d’incident beaucoup plus précises. Pour un agent IA, n’utilisez pas une clé personnelle ou d’administration : créez une identité dédiée à la tâche, limitée et révocable.

Vérification : sélectionnez une clé existante et répondez à cinq questions : qui la possède, que peut-elle faire, où est-elle injectée, quand expire-t-elle et comment la révoquer. Une réponse inconnue est un risque à traiter.

2. Stocker et injecter au bon moment

Conservez les valeurs dans un gestionnaire de secrets ou le mécanisme sécurisé de votre plateforme, puis injectez-les au runtime dans l’environnement du seul processus qui en a besoin. Ne les placez pas dans le dépôt, l’image de conteneur, le code client ou un fichier de configuration publié. Un fichier local peut être utile au développement s’il est exclu du contrôle de version, mais il ne doit pas devenir la source de vérité de production.

Évitez de transmettre tous les secrets à tous les services. Un worker de génération n’a pas besoin de la clé de paiement ; un front-end n’a pas besoin d’un token serveur. Vérifiez également les outils de build et de CI : une variable rendue disponible au mauvais job peut finir dans un artefact ou un log.

Vérification : recherchez les valeurs factices dans le code, les artefacts de build, l’historique de shell et les logs. Elles ne doivent apparaître que dans le mécanisme de test autorisé.

3. Limiter la portée et la durée

Utilisez les scopes, rôles, restrictions de projet et listes de destinations quand le fournisseur les propose. Une clé de lecture ne doit pas écrire ; une clé de test ne doit pas toucher la production ; un token court peut réduire la fenêtre d’exposition. La limite utile est celle qui correspond à la tâche réelle, pas celle qui rend l’intégration la plus rapide.

Définissez une durée ou une revue périodique. Les clés sans expiration peuvent être nécessaires dans certains systèmes, mais elles exigent une discipline plus forte : propriétaire, alertes d’usage et rotation planifiée. Ne changez pas toutes les clés simultanément sans plan de retour ; vous pourriez créer une panne généralisée sans savoir quelle dépendance échoue.

Vérification : utilisez une identité de test avec un scope insuffisant pour une écriture. L’opération doit être refusée, tandis que la lecture autorisée reste fonctionnelle.

4. Faire tourner un secret sans interrompre le service

Préparez la rotation avant l’urgence : créer une nouvelle clé, la distribuer par le canal prévu, vérifier l’application, révoquer l’ancienne et confirmer son refus. Lorsque le fournisseur autorise deux clés actives, utilisez une période de chevauchement courte et documentée. Lorsqu’il n’autorise qu’une clé, planifiez une fenêtre de maintenance et testez le chemin sur un environnement non productif.

Mettez à jour les déploiements, workers, jobs planifiés et intégrations qui utilisent la clé. Une rotation partielle est une source fréquente d’échecs différés. Après révocation, surveillez les erreurs d’authentification : elles peuvent révéler un consommateur oublié ou une tentative d’usage non autorisé.

Vérification : réalisez une rotation avec une clé de test. Confirmez le fonctionnement avec la nouvelle, le refus de l’ancienne et l’absence de valeur dans les logs.

5. Réagir à une fuite possible

Une clé apparue dans Git, une image, une issue publique, un log ou une conversation doit être considérée comme exposée, même si vous ne trouvez pas de preuve d’usage. Limitez immédiatement la diffusion, révoquez ou remplacez la clé, vérifiez les journaux d’accès et cherchez les autres copies. Ne vous contentez pas de supprimer la ligne : l’historique, les caches ou les outils tiers peuvent conserver la valeur.

Documentez la cause : erreur de code, mauvaise variable CI, outil de diagnostic, configuration copiée ou secret partagé. Ajoutez une protection ciblée : scan de secrets, revue de build, filtre de logs, droits de fichier ou création d’identité dédiée. La correction doit empêcher la même voie de fuite, pas seulement changer la valeur.

Vérification : faites un exercice avec une valeur factice « exposée » dans un dépôt de test. Chronométrez détection, révocation, remplacement et vérification de l’ancienne clé.

6. Tester et documenter le cycle de vie

Ajoutez des tests et contrôles de livraison : le build échoue si une variable serveur est incluse dans le client, les logs sont examinés avec des valeurs factices, les secrets de test n’accèdent pas à la production et la configuration manque clairement lorsqu’une valeur obligatoire est absente. Gardez la documentation sous forme de noms de variables et de propriétaires, jamais de valeurs.

Une documentation courte doit indiquer comment demander un secret, où le configurer, comment tester l’intégration, comment le tourner et qui alerter. Elle évite que la connaissance reste dans une conversation ou un poste individuel. Révisez-la à chaque ajout de fournisseur ou changement d’architecture.

Problèmes fréquents et solutions

Un .env est committé. Considérez les valeurs exposées, révoquez-les, retirez-les des déploiements et ajoutez un contrôle qui bloque la réintroduction.

La même clé sert en développement et production. Créez des identités par environnement et vérifiez que la clé de test ne peut pas appeler la production.

La rotation casse un job oublié. Inventoriez les consommateurs et surveillez les erreurs après révocation ; une période de chevauchement contrôlée peut réduire ce risque.

Un secret apparaît dans une exception. Masquez les champs avant émission de log, révisez la clé et vérifiez les copies dans le collecteur.

FAQ

Une variable d’environnement est-elle un secret manager ?

Non. Elle est un moyen de transmettre une valeur au processus. Le stockage, l’accès, l’audit, la rotation et la révocation restent à organiser.

Faut-il chiffrer les secrets dans Git ?

Évaluez le mécanisme et ses clés ; dans de nombreux cas, un gestionnaire ou la configuration sécurisée de la plateforme évite de distribuer des secrets dans le dépôt.

À quelle fréquence faire une rotation ?

Selon la sensibilité, les capacités du fournisseur et votre politique. Une rotation doit être testable et planifiée, pas seulement fixée à une date arbitraire.

Que doit recevoir un agent IA ?

Une identité dédiée avec le scope minimal, une expiration si possible et aucun droit d’administration non nécessaire.

Peut-on réutiliser une clé entre services ?

Évitez-le. Des clés séparées réduisent le périmètre d’incident et rendent l’usage et la révocation traçables.

Conclusion

Gérer les secrets API proprement, c’est limiter leurs capacités et rendre leur cycle de vie visible : inventaire, injection au runtime, scopes, rotation, révocation et tests. Une clé n’est pas sûre parce qu’elle est cachée dans un fichier ; elle l’est davantage lorsqu’elle peut être remplacée rapidement sans toucher au reste du système.

Sources et limites

Sources primaires : OWASP Secrets Management Cheat Sheet, NIST SP 800-57 et NIST SP 800-63. Les mécanismes exacts dépendent de votre fournisseur et de votre infrastructure. Ce guide ne remplace pas une politique de gestion de clés ou une réponse à incident.