Faites tourner vos identifiants derrière une passerelle d'action avec preuves
Faites tourner vos identifiants derrière une passerelle d'action sans exposer les secrets aux agents IA, perdre les preuves d'audit ni laisser actifs d'anciens accès API et SSH.

Remplacer un jeton API ou une identité SSH qui arrive à expiration devrait être une opération banale. Cela devient dangereux lorsque chaque agent, profil shell, secret de dépôt et outil local possède sa propre copie. Dans cette configuration, vous ne faites pas tourner un seul identifiant. Vous cherchez un nombre inconnu de copies, vous espérez les avoir toutes trouvées et vous cassez le travail à des endroits que personne n'a pensé à tester.
Une passerelle d'action change la nature du problème. Elle détient l'identifiant, exécute la requête externe et renvoie le résultat à l'agent. La rotation se limite alors à un seul emplacement contenant le secret, une seule bascule contrôlée et des preuves qui distinguent la session de l'agent de l'identité utilisée. Cette séparation est particulièrement importante pendant un incident, lorsque l'on confond facilement « ce processus a envoyé la requête » et « ce processus possédait le jeton ».
J'ai vu des équipes déclarer une rotation terminée parce qu'une nouvelle valeur était apparue dans un gestionnaire de secrets. Puis une ancienne clé de déploiement restait dans le fichier des clés autorisées d'un compte, ou une variable d'environnement locale oubliée maintenait en vie un jeton API expiré. Une rotation est terminée uniquement lorsque le remplacement a démontré que le parcours d'action prévu fonctionne et que l'ancienne identité ne peut plus s'authentifier.
Une rotation est un changement d'identité, pas un remplacement de chaîne
La rotation d'un identifiant remplace une identité d'authentification par une autre et vérifie que l'accès a été transféré comme prévu. Coller un nouveau jeton dans un champ n'est qu'une opération parmi d'autres dans ce changement.
Gardez ces quatre éléments distincts dans vos notes et vos outils :
- L'identité externe : un jeton API, un secret client, une paire de clés SSH ou un identifiant de compte de service accepté par un fournisseur.
- L'enregistrement de l'identifiant : l'entrée chiffrée qui stocke l'identité et les informations liées à son utilisation.
- La cible d'autorisation : le compte API, le dépôt, le compte machine, l'hôte ou le point de terminaison réseau qui l'accepte.
- La session de l'agent : le processus précis qui a demandé une action.
On confond régulièrement le premier et le quatrième élément. Cette erreur produit de mauvais rapports d'incident. Une session d'agent peut avoir appelé un point de terminaison par l'intermédiaire d'une passerelle sans avoir besoin de lire le jeton bearer. À l'inverse, un jeton divulgué peut être utilisé par un processus qui n'apparaît jamais dans votre journal d'agents. Ce sont deux enquêtes différentes, avec des mesures de confinement différentes.
La même distinction vaut pour l'expiration. Un fournisseur peut faire expirer un jeton à une heure donnée, tandis que l'enregistrement de votre passerelle reste parfaitement sain en tant que donnée stockée. L'enregistrement n'expire pas par magie. Vous devez remplacer l'identité externe avant que le fournisseur ne la refuse, valider la nouvelle identité et retirer l'ancienne.
La publication spéciale 800-57 du NIST, partie 1, considère les périodes cryptographiques comme davantage que de simples rappels calendaires. Elle relie leur durée à l'exposition, à l'utilisation et au risque de compromission. C'est aussi la bonne approche pour les identifiants API et SSH. Un jeton qui accorde largement des droits d'écriture, qui est utilisé fréquemment ou dont le propriétaire n'est pas clair mérite une durée de vie planifiée plus courte qu'une identité limitée à une seule tâche en lecture seule. N'en faites pas un rituel qui remplace les chaînes chaque vendredi tout en conservant un périmètre excessif.
Une déclaration de rotation claire devrait ressembler à ceci : « La session de l'agent de build a utilisé l'enregistrement d'identifiant deploy-api-prod pour cette requête. Cet enregistrement est passé de l'identifiant de jeton fournisseur se terminant par 4K2 à celui se terminant par P9M. L'ancien jeton a été révoqué après que le nouvel enregistrement a effectué l'action attendue. » Elle ne doit pas contenir le jeton lui-même.
Placez le secret en un seul endroit avant que son expiration ne vous y oblige
Vous ne pouvez pas contrôler la rotation tant que les identifiants se trouvent encore dans les invites des agents, les fichiers de dépôt, les variables shell et les configurations copiées. Commencez par les regrouper, même si la date d'expiration approche.
Commencez par un inventaire qui suit l'utilisation, pas seulement le stockage. Demandez à chaque équipe quels appels externes et quelles destinations SSH un agent peut effectuer. Pour chaque réponse, consignez le compte fournisseur ou le compte hôte, le type d'identifiant, le propriétaire, l'action prévue, le périmètre, le comportement à l'expiration et la présence éventuelle d'autres copies. C'est dans ce dernier champ que commence le travail désagréable.
Une analyse du dépôt peut repérer les erreurs évidentes, mais elle ne peut pas prouver l'absence de copies. Cherchez les noms de variables d'environnement, les clés de configuration, les modèles de déploiement, les chemins copiés vers des clés privées et la documentation qui demande de coller un jeton dans la configuration d'un agent. Examinez aussi les définitions des outils de l'agent. Si un outil accepte token, api_key, authorization ou le contenu brut d'une clé privée comme argument, l'agent peut encore transporter des secrets, même si un autre système en détient un double.
Pour HTTP, la forme attendue est simple : l'agent fournit une action et les données ordinaires de la requête, tandis que la passerelle sélectionne l'identifiant stocké et injecte le matériel d'autorisation uniquement lorsqu'elle envoie la requête. Un appel d'outil d'agent pourrait conceptuellement contenir ceci :
{
"credential": "deploy-api-prod",
"method": "POST",
"url": "https://api.example.internal/releases",
"headers": {"Content-Type": "application/json"},
"body": {"revision": "a81c2f"}
}
Il ne doit pas contenir de jeton bearer, même sous un nom de champ sympathique. Renvoyer un en-tête d'autorisation dans le résultat de l'outil est le même échec, dans l'autre sens. Masquez-le à la frontière de l'action, pas plus tard dans une transcription de chat.
Pour SSH, l'agent doit demander une connexion au moyen d'un enregistrement d'identifiant et d'une destination nommés. Il ne doit recevoir ni bloc de clé privée, ni fichier de clé privée temporaire, ni instruction pour chercher dans ~/.ssh. Une clé privée présente dans le répertoire de travail d'un agent survit dans les caches, l'historique de l'éditeur, les archives et parfois dans un commit. J'ai nettoyé suffisamment de ces fichiers pour considérer que « temporaire » n'a aucune signification en matière de sécurité.
Sallyport conserve les clés API et SSH dans un coffre chiffré au sein de l'application macOS, puis exécute les actions HTTP et SSH sans exposer le secret à l'agent. Vous disposez ainsi d'un seul enregistrement à modifier, mais vous devez toujours rechercher et supprimer les anciennes copies qui existaient avant le transfert.
Donnez à chaque identifiant un propriétaire et un objectif
Un identifiant peut avoir plusieurs utilisateurs légitimes, mais il doit tout de même avoir un propriétaire responsable et un objectif déclaré. La responsabilité partagée est souvent une manière polie de dire que personne ne vérifie l'expiration, le périmètre ou le retrait.
Nommez les enregistrements de façon à ce qu'un opérateur puisse identifier la frontière d'autorisation sans voir le secret. billing-write-prod en dit plus que token-final-2. github-deploy-repo-a en dit plus que automation-key. Indiquez l'environnement lorsqu'il modifie la cible et évitez d'intégrer le nom d'une personne si l'identifiant appartient à une fonction de service. Les personnes partent, l'objectif du service doit rester lisible.
Ne placez pas des cibles sans rapport derrière un jeton partagé simplement pour réduire le nombre d'enregistrements. Ce raccourci est tentant parce qu'un renouvellement unique semble facile. Il entraîne trois problèmes :
- Vous ne pouvez pas savoir quelle cible a imposé la rotation.
- Une augmentation de périmètre pour un usage élargit l'accès de tous les autres usages.
- La révocation de l'identité pendant un incident interrompt des tâches sans rapport.
Un enregistrement peut prendre en charge un ensemble d'actions étroitement liées auprès d'un même compte fournisseur lorsque le périmètre et le propriétaire sont réellement les mêmes. Faites-en une décision explicite, pas un choix par défaut. Si le service de publication du build et la tâche d'export du support ont besoin de permissions différentes, ils ont besoin d'identités différentes, même s'ils appellent la même API.
SSH exige la même rigueur. Une clé SSH associée à un compte de déploiement sur un groupe d'hôtes ne doit pas aussi servir à accéder à une base de données de production simplement parce que les deux utilisent SSH. Placez si possible les restrictions côté serveur : un compte dédié, une commande limitée, une restriction de source lorsque votre réseau le permet et un commentaire clair dans la clé autorisée. Un commentaire ne contrôle pas l'accès, mais il rend visible l'ancienne clé restante lorsqu'une personne examine authorized_keys sous pression.
Le manuel authorized_keys d'OpenSSH documente des options telles que command=, restrict et from=. Ces options ne sont utiles que si vous testez le parcours exact de la commande dont l'automatisation a besoin. J'ai vu une entrée restrict bien intentionnée interrompre la redirection de ports dont dépendait discrètement une tâche de déploiement. C'est un bon problème à découvrir lors d'une rotation planifiée plutôt qu'à minuit. N'ajoutez pas aveuglément toutes les restrictions disponibles, ajoutez celles qui correspondent à l'action que vous avez définie.
Utilisez une fenêtre de chevauchement avec une fin planifiée
Gardez les anciens et les nouveaux identifiants actifs ensemble uniquement le temps nécessaire pour valider le remplacement et récupérer après une bascule échouée. Le chevauchement est un dispositif de sécurité, pas un mode de fonctionnement permanent.
Certains fournisseurs autorisent plusieurs jetons API ou plusieurs identifiants client actifs. Créez d'abord le remplacement, consignez un identifiant qu'il est prudent de conserver et chargez-le dans l'enregistrement de la passerelle. Effectuez ensuite une action sans danger par le même parcours que celui qu'utilisera normalement l'agent. Un point de terminaison de lecture, la création d'un brouillon dans un projet de test ou une requête qui renvoie l'identité de l'appelant peuvent convenir, à condition que l'action vérifie le périmètre requis et le compte cible.
Ne vous fiez pas à un point de terminaison générique du type « jeton valide » si l'agent publie habituellement des versions ou modifie des tickets. Un jeton peut être valide tout en n'ayant pas le périmètre d'écriture, en pointant vers un compte bac à sable ou en échouant parce que la passerelle injecte le mauvais type d'en-tête. Testez la véritable méthode, la famille d'URL, le compte et la forme de la charge utile avec un objet sans danger.
Définissez l'heure de révocation de l'ancien identifiant avant de tester. Si vous ne pouvez pas nommer cette heure, vous n'avez pas de fenêtre de chevauchement. Vous avez créé un autre identifiant permanent.
Une séquence pratique ressemble à ceci :
- Créez le nouvel identifiant fournisseur avec le périmètre requis et une politique d'expiration connue.
- Mettez à jour l'unique enregistrement de la passerelle, en conservant l'ancien identifiant uniquement pendant le chevauchement déclaré.
- Exécutez une action étroite par l'intermédiaire d'une session d'agent autorisée ou d'une session de test contrôlée par un opérateur.
- Vérifiez le résultat chez le fournisseur et examinez le journal d'action pour confirmer la session et la destination attendues.
- Révoquez ou supprimez l'ancien identifiant fournisseur, puis répétez une fois l'action étroite.
Le test final après révocation n'est pas une formalité. Il détecte le cas embarrassant où votre test a utilisé silencieusement l'ancien jeton parce qu'une variable d'environnement, une configuration de proxy ou un autre enregistrement d'identifiant avait pris le dessus. Cet échec est plus fréquent qu'on ne l'admet.
Pour un fournisseur qui n'autorise qu'un seul identifiant API actif, vous ne pouvez pas avoir de véritable chevauchement. Planifiez une fenêtre de changement, capturez une action de référence avant la bascule, remplacez le secret dans la passerelle, exécutez immédiatement le test étroit et gardez un propriétaire du compte disponible pour émettre un remplacement si le fournisseur le refuse. Ne « résolvez » pas l'absence de chevauchement en plaçant le nouveau jeton dans la configuration de l'agent à l'avance.
Validez le parcours réellement emprunté par un agent
Un test de rotation doit exercer la passerelle, la sélection de l'identifiant, la construction de la requête, l'autorisation distante et la gestion du résultat. Tester chaque composant séparément laisse des failles précisément là où se cachent les erreurs d'identifiants.
Pour HTTP, rendez la requête suffisamment précise pour pouvoir la reconnaître dans les journaux du fournisseur. Utilisez un jeton d'idempotence lorsque l'API le permet, ou créez un objet jetable clairement identifié. Vérifiez que le fournisseur signale le compte ou le principal attendu. Confirmez ensuite que le journal d'action contient un appel correspondant, sa cible, son résultat et sa référence de session, sans afficher de credentials.
Un test shell générique est utile pour isoler le comportement du fournisseur, mais il prouve moins de choses qu'on ne le pense :
curl -sS -D /tmp/headers.txt \\
-H "Authorization: Bearer $NEW_TOKEN" \\
https://api.example.internal/v1/whoami
Le résultat attendu comporte souvent un statut 200 dans /tmp/headers.txt et un corps qui identifie le compte de service. Cela vous indique que le fournisseur accepte le jeton. Cela ne prouve pas que votre passerelle d'action injecte le même en-tête, sélectionne le bon enregistrement ou empêche l'agent de voir $NEW_TOKEN. Utilisez cette méthode uniquement sous le contrôle d'un opérateur et supprimez la variable du shell une fois terminé. Ne collez jamais un véritable jeton dans un ticket ou un enregistrement de terminal sauvegardé.
Pour SSH, testez le même nom d'hôte, le même utilisateur et la même forme de commande que ceux nécessaires à l'automatisation. Le contrôle de clé publique suivant aide à diagnostiquer l'autorisation du serveur sans révéler de matériel privé dans la sortie :
ssh -o BatchMode=yes -o IdentitiesOnly=yes \\
[email protected] 'id \u0026\u0026 test -w /srv/releases \u0026\u0026 echo write-ok'
BatchMode=yes fait échouer l'authentification au lieu d'attendre un mot de passe interactif. IdentitiesOnly=yes empêche le client SSH d'essayer toutes les clés sans rapport chargées dans un agent. Ne considérez pas une connexion réussie à ssh deploy@host comme la preuve qu'une action de déploiement fonctionne. Le compte distant peut accepter un shell tout en refusant la commande, le répertoire ou la restriction de commande forcée utilisés par la tâche.
Le manuel ssh d'OpenSSH explique que IdentitiesOnly limite les identités proposées par le client. Cette option détecte un faux résultat positif courant sur les machines de développement : l'agent local réussit avec une clé personnelle dans un agent d'authentification, alors que la nouvelle clé d'automatisation échouerait en production. Dans une architecture avec passerelle, effectuez le contrôle équivalent par le parcours SSH de la passerelle, où la clé stockée sélectionnée est sans ambiguïté.
Testez aussi bien l'échec que la réussite. Essayez volontairement une requête avec une méthode non autorisée ou une commande SSH en dehors des permissions prévues pour le compte. Vous voulez obtenir un refus clair du système distant et une entrée de journal exacte. Si un identifiant censé être limité réussit une action sans rapport, interrompez la rotation et réduisez son périmètre avant de retirer l'ancienne identité.
Une rotation SSH échoue sur le serveur lorsque les anciennes clés publiques subsistent
Remplacer une clé privée SSH dans un coffre ne révoque pas l'ancienne clé. Le serveur continue d'accepter l'ancienne identité jusqu'à ce que vous supprimiez sa clé publique de toutes les sources d'autorisation qui lui font confiance.
SSH rend l'inventaire plus difficile, car les clés publiques peuvent apparaître à plusieurs endroits : ~/.ssh/authorized_keys, un service de gestion des identités, un paramètre de métadonnées d'instance cloud, un modèle de gestion de configuration ou l'interface de clés de déploiement d'un fournisseur. Trouvez la source faisant autorité avant toute modification. Si la gestion de configuration réécrit authorized_keys, une suppression manuelle d'urgence peut réapparaître lors de l'exécution suivante.
Générez une identité de remplacement avec vos outils approuvés et stockez sa moitié privée uniquement à la frontière de la passerelle. Installez la nouvelle moitié publique à côté de l'ancienne. Ajoutez à chaque entrée un commentaire indiquant son objectif et sa date de rotation, puis testez-la par le parcours prévu. Une fois qu'elle fonctionne, supprimez l'ancienne entrée publique de la source de vérité et vérifiez que le serveur la refuse.
Vous pouvez inspecter l'empreinte d'une clé publique sans exposer de clé privée :
ssh-keygen -lf deploy-release-ed25519.pub
# 256 SHA256:exampleFingerprint deploy-release-2025 (ED25519)
La forme de la sortie compte davantage que l'empreinte d'exemple : longueur en bits, empreinte, commentaire et type de clé. Placez l'empreinte réelle dans l'enregistrement du changement. Ne mettez pas les options d'autorisation qui entourent la clé publique dans une capture d'écran vague. Copiez la règle exacte côté serveur dans votre configuration révisée afin qu'un autre opérateur puisse voir si elle contient une commande forcée ou une restriction de source.
Effectuez ensuite un test négatif avec l'ancienne clé avant de détruire votre dernière copie contrôlée. Le serveur doit la rejeter après sa suppression. Si vous ne pouvez pas effectuer ce test parce que vous n'avez plus l'ancienne clé privée, inspectez plutôt la source autorisée faisant foi et les journaux d'audit du fournisseur. Indiquez cette limite dans l'enregistrement. Prétendre avoir testé une révocation est pire que documenter une vérification incomplète.
Évitez de faire tourner une clé SSH en écrasant un fichier au même emplacement et en redémarrant un client inconnu. Des processus de longue durée peuvent conserver des connexions ouvertes, les agents SSH peuvent proposer une ancienne identité et un utilitaire peut mettre en cache un descripteur de fichier. Un assistant d'action sans état réduit cette ambiguïté, car chaque connexion commence avec une sélection connue. La propriété importante est le comportement observable, pas un langage d'implémentation favori.
Séparez l'autorisation de la rotation
L'autorisation donnée à un agent pour exécuter une action est différente de l'autorisation d'utiliser un identifiant précis à chaque appel. Les traiter comme un même contrôle crée soit une lassitude liée aux approbations, soit des identités sensibles trop peu protégées.
Un contrôle de session répond à la question : « Ce processus agent qui vient de démarrer peut-il effectuer des actions pendant cette exécution ? » Il aide à intercepter un nouveau processus avant qu'il n'obtienne un accès externe. Un contrôle par appel répond à la question : « Cet identifiant précis peut-il être utilisé maintenant ? » Il convient à une action de paiement, à une version de production ou à un identifiant dont le périmètre justifie une vérification humaine à chaque utilisation.
Ne demandez pas à une personne d'approuver chaque lecture d'état sans danger simplement parce que le processus de rotation a inquiété tout le monde. Les utilisateurs approuvent les demandes répétées et identiques sans les lire. Utilisez une approbation fréquente pour les identités dont chaque action nécessite un jugement et une approbation de session clairement limitée pour les autres. La rotation ne doit pas apprendre aux opérateurs à cliquer sur les avertissements.
La grille de décision de Sallyport garde la porte du coffre absolument protégée, puis autorise par défaut un nouveau processus agent pour sa session, avec la possibilité d'exiger une approbation pour chaque utilisation d'un identifiant choisi. Pendant une rotation, un opérateur peut ainsi autoriser la session de test tout en demandant une confirmation explicite pour le nouvel identifiant de production jusqu'à la fin de la bascule.
La porte du coffre a un rôle distinct. Un coffre verrouillé doit refuser les actions, quelles que soient les permissions dont bénéficiait auparavant une session d'agent. Cela donne à l'opérateur un arrêt immédiat pendant une fuite présumée ou lorsqu'une modification commence à se comporter de manière inattendue. Cela ne révoque pas l'identifiant chez le fournisseur. Après avoir verrouillé l'accès, révoquez ou désactivez tout de même l'identité externe si quelqu'un a pu la copier hors de la passerelle.
Conservez une courte trace de la personne qui a approuvé un test de production exceptionnel et de la raison. Ne transformez pas les notes d'approbation en journal intime. Une identité de session, une heure, un enregistrement d'identifiant, une cible et une référence de changement suffisent pour relier l'approbation à l'événement de rotation.
Les preuves d'audit doivent répondre à deux questions distinctes
Un enregistrement de rotation utile peut répondre à la fois à « qu'a fait l'agent ? » et à « pouvons-nous faire confiance à l'enregistrement ? ». Un simple journal applicatif ne répond souvent correctement à aucune de ces questions après qu'une personne a modifié des fichiers, supprimé une ligne ou mélangé des appels courants avec un incident.
La première question nécessite des champs opérationnels : identité de session, autorité de signature du code ou identité du processus lorsqu'elle est disponible, heure, type d'action, cible, nom de l'enregistrement d'identifiant, résultat et référence de requête côté fournisseur lorsqu'elle existe. Le journal ne doit pas conserver de jetons bearer, de mots de passe, de clés privées ni d'en-têtes complets contenant des secrets. Les journaux qui contiennent des identifiants transforment chaque lecteur du journal en détenteur supplémentaire d'un identifiant.
La seconde question concerne l'intégrité. Dire qu'un journal est en ajout uniquement ne suffit pas si un administrateur peut réécrire celui d'hier. Une chaîne de hachage fait dépendre chaque entrée de la précédente, de sorte qu'un vérificateur peut détecter une suppression ou une modification lors du contrôle de la chaîne. Elle ne prouve pas qu'une action n'a jamais eu lieu et ne rend pas exactes de fausses données. Elle rend toutefois beaucoup plus difficiles les modifications discrètes présentées comme l'enregistrement original.
C'est là que des journaux distincts pour les sessions et les activités sont utiles. Le journal des sessions indique quel processus agent a reçu l'autorité et si quelqu'un a révoqué cette exécution. Le journal d'activité indique quelles actions HTTP ou SSH individuelles ont eu lieu pendant celle-ci. Si un jeton API est renouvelé à 14 h, vous pouvez examiner les appels qui ont utilisé l'enregistrement avant et après la bascule sans considérer chaque approbation de session comme la preuve de chaque requête.
Sallyport produit ces deux vues à partir d'un journal d'audit chiffré et inscriptible uniquement, et peut vérifier sa chaîne hors ligne avec sp audit verify, sans exiger la clé du coffre. Lancez la vérification avant et après une rotation sensible et conservez son résultat avec l'enregistrement du changement. Une vérification réussie indique que la chaîne enregistrée est cohérente en interne, mais elle ne remplace pas l'examen des destinations et des résultats réels.
Pour une rotation à haut risque, rassemblez ces preuves dans une entrée concise :
- La raison du changement d'identifiant et le propriétaire de la cible d'autorisation.
- Les identifiants sûrs des anciens et nouveaux identifiants fournisseur, ainsi que la fin prévue du chevauchement.
- L'action de validation étroite et son résultat côté fournisseur.
- Les références de session d'agent et d'activité utilisées pour la validation.
- La preuve de révocation de l'ancienne identité, ou la limite documentée de cette vérification.
Cet enregistrement permet à un enquêteur ultérieur de distinguer un changement normal et planifié d'un nouvel identifiant inexpliqué. Il révèle aussi l'absence d'une vérification de révocation avant que plusieurs mois ne passent.
Traitez une fuite présumée comme un confinement avant le remplacement
Lorsque vous pensez qu'un agent a vu ou exporté un secret, interrompez d'abord l'accès. Créer un nouveau jeton sans désactiver celui qui a été exposé laisse l'ancien parcours à la disposition de la personne qui l'a copié.
Verrouillez la passerelle d'action si vous avez besoin d'un confinement local immédiat, révoquez les sessions d'agents actives qui ne devraient plus fonctionner et désactivez ou révoquez l'identifiant chez le fournisseur. Préservez les preuves de session et d'activité pertinentes avant que les tâches de nettoyage n'effacent le contexte. Émettez ensuite une nouvelle identité dont le périmètre est limité au travail qui doit reprendre.
N'attendez pas d'avoir la preuve parfaite que la valeur a fuité. Un jeton présent dans une transcription d'agent, un historique shell, un commit de dépôt, un journal de build ou un chat copié-collé suffit pour le considérer comme exposé. Pour une clé privée SSH, supprimez la clé publique correspondante de toutes les sources approuvées et recherchez les copies du matériel privé dans les emplacements où l'automatisation écrit des artefacts. Faire tourner une clé privée tout en laissant son ancienne clé publique autorisée n'est pas un confinement.
Après le rétablissement du service, cherchez comment le secret a franchi la frontière. Les causes habituelles sont douloureusement ordinaires : un paramètre d'outil acceptait des identifiants bruts, un journal de débogage affichait les en-têtes de requête, un développeur avait copié un fichier d'environnement local dans l'espace de travail d'un agent ou un client de secours contournait la passerelle. Corrigez ce parcours avant de déclarer l'incident clos. Sinon, le remplacement ne fera que commencer son propre compte à rebours vers la prochaine fuite.
Faites de l'expiration un test opérationnel planifié
Un rappel de calendrier doit déclencher un test répétable, une vérification de propriété et une décision de révocation. Il ne doit pas produire une demande paniquée demandant à quelqu'un de coller un nouveau jeton dans le dernier fichier de configuration qui fonctionnait.
Examinez chaque enregistrement d'identifiant avant la date d'expiration du fournisseur. Vérifiez que le propriétaire désigné possède toujours le compte externe, que l'objectif documenté existe encore, que les périmètres correspondent toujours à l'action et que les sessions d'agents sélectionnées ont toujours besoin de l'accès. Si l'une de ces réponses est négative, retirez l'identité au lieu de la faire tourner.
Pour les identités qui restent nécessaires, répétez suffisamment tôt l'action de validation étroite afin de découvrir les changements de compte fournisseur, les nouvelles restrictions SSH ou les permissions API modifiées. Conservez la trace de cette répétition séparément de la rotation réelle afin que personne ne prenne un ancien test réussi pour la preuve que le remplacement du jour fonctionne.
Le test inconfortable est celui qui détecte le plus de défauts : après avoir révoqué l'ancien identifiant, répétez exactement l'action dont dépend l'agent et vérifiez que le journal l'attribue à la session et à l'enregistrement prévus. Si ce test échoue, vous avez un échec contenu, avec un propriétaire, des preuves et un parcours de retour connu. C'est une bien meilleure situation que de découvrir un identifiant expiré au milieu d'un déploiement autonome.
FAQ
Comment faire tourner une clé API sans transmettre la nouvelle clé à un agent IA ?
Faites tourner l'identifiant chez le fournisseur, mettez à jour l'unique enregistrement de la passerelle d'action, testez le véritable parcours d'action, puis révoquez l'ancien identifiant après la période de chevauchement. L'agent ne doit jamais recevoir l'ancien ni le nouveau secret. Séparez l'identité qui fait l'objet de la rotation du processus agent qui a demandé l'action.
Puis-je savoir quelles sessions d'agents IA ont utilisé un identifiant avant sa révocation ?
Une passerelle peut conserver les éléments de preuve liés à la session si elle enregistre le processus agent appelant, l'heure, l'action ciblée et l'enregistrement d'identifiant utilisé. Elle ne doit pas placer le secret lui-même dans le journal. Examinez l'activité avant la révocation, puis conservez les preuves conformément aux règles de conservation de votre équipe.
Les anciennes et les nouvelles clés API doivent-elles se chevaucher pendant une rotation ?
Faites fonctionner les anciens et les nouveaux identifiants ensemble uniquement si le fournisseur autorise plusieurs identifiants actifs et si vous avez fixé une heure précise de retrait. Le chevauchement fournit une solution de secours pendant que vous vérifiez le nouveau parcours. Les chevauchements prolongés créent un identifiant sans propriétaire que personne ne pense à supprimer.
Que faire si une session d'agent semble suspecte pendant une rotation d'identifiant ?
La rotation n'efface pas l'accès dont dispose déjà un agent par l'intermédiaire d'une session active. Révoquez d'abord les sessions suspectes, faites ensuite tourner l'identifiant, puis examinez l'activité récente pour repérer les requêtes qui nécessitent une investigation. Si le secret a pu sortir de la passerelle, considérez le compte du fournisseur comme la source de référence pour la révocation d'urgence.
Comment faire tourner une clé SSH utilisée par un agent de programmation automatisé ?
Pour SSH, créez une nouvelle paire de clés, installez la nouvelle clé publique avec les restrictions adaptées au compte, testez-la par le même parcours de passerelle que celui utilisé par l'agent, puis supprimez l'ancienne clé publique des accès autorisés. Ne remplacez pas un fichier de clé privée sur place en supposant que le client fera ce qu'il faut. C'est la liste des clés autorisées du serveur qui détermine quelles anciennes identités restent utilisables.
Un seul enregistrement d'identifiant peut-il couvrir plusieurs services en toute sécurité ?
N'utilisez pas le même enregistrement de secret pour des fournisseurs ou des machines sans rapport. Un enregistrement partagé affaiblit l'attribution et impose une rotation large lorsqu'un seul parcours d'accès change. Créez des enregistrements associés à un compte fournisseur ou à une identité serveur, avec un propriétaire et un objectif clairement définis.
Quels événements doivent déclencher une rotation d'identifiant ?
La plupart des équipes déclenchent une rotation régulière à la date d'expiration du fournisseur, lors d'un changement de personnel ou de propriétaire, en cas d'exposition présumée, de changement de périmètre ou de constat d'audit. Un calendrier ne suffit pas, car il ne détecte pas qu'un identifiant est devenu excessif ou sans propriétaire. Consignez le déclencheur avec les preuves de rotation.
Un contrôle de santé API réussi suffit-il à valider un secret qui vient de tourner ?
Non. Un point de contrôle de santé qui réussit peut prouver qu'un jeton existe, sans prouver que les périmètres, le compte cible, les en-têtes de requête ou les permissions SSH nécessaires au travail réel de l'agent sont corrects. Testez une action étroite et sans danger par la passerelle, puis vérifiez l'entrée de journal correspondante.
MCP garde-t-il automatiquement les identifiants hors du contexte d'un agent ?
MCP décrit un protocole pour les appels d'outils, mais il n'empêche pas l'agent de voir un secret fourni par l'implémentation d'un outil. Pour créer une frontière d'identifiants, l'hôte de l'outil ou la passerelle doit conserver l'identifiant et exécuter lui-même l'action HTTP ou SSH sortante. Examinez l'interface et les journaux de l'outil au lieu de vous fier à son nom.
Que faut-il inclure dans un enregistrement de rotation d'identifiant ?
Conservez un enregistrement avec l'identifiant, le propriétaire, la raison, l'heure de remplacement, le résultat de validation, l'heure de révocation de l'ancien identifiant et les références aux sessions ou activités concernées. N'y inscrivez pas la valeur secrète, la clé privée ni le jeton bearer. Un bon enregistrement permet à un autre ingénieur de reconstituer la décision sans révéler l'accès.