Versions et restauration
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
Chaque écriture d'un secret crée une nouvelle version numérotée ; les précédentes restent stockées et lisibles. Ce guide montre comment parcourir cet historique, revenir à une ancienne valeur, supprimer un secret et le restaurer.
Prérequis
- Un secret existant : voir Créer et lire un secret.
- Les droits
ssm:describepour lister les versions,ssm:readpour lire une valeur,ssm:writepour réécrire ou restaurer,ssm:deletepour supprimer (policies géréesreadwriteouadmin).
1. Lister les versions
sng secret set db-password --from-file ./v1.txt
sng secret set db-password --from-file ./v2.txt
sng secret versions db-password
VERSION STAGES CREATED
1 2026-10-07T09:10:03Z
2 2026-10-07T09:31:48Z
Les versions sont des entiers croissants à partir de 1. La colonne STAGES est toujours vide dans cette version : il n'y a pas d'étiquette de type « courante / précédente », la version la plus haute est la courante.
2. Relire une ancienne version
sng secret get db-password --version-id 1
{
"value": "contenu-de-v1"
}
Sans --version-id, get renvoie la version la plus récente.
3. Revenir à une ancienne valeur
Il n'existe pas de commande de retour arrière : l'historique est en ajout seul. Pour revenir à la version 1, relisez-la et réécrivez-la ; elle devient la version 3.
sng secret get db-password --version-id 1 --key value --out-file ./old
sng secret set db-password --from-file ./old
rm ./old
sng secret versions db-password
VERSION STAGES CREATED
1 2026-10-07T09:10:03Z
2 2026-10-07T09:31:48Z
3 2026-10-07T09:40:12Z
Les Apps qui consomment ce secret reçoivent la nouvelle version comme pour toute écriture : voir Rotation — comment une App voit la nouvelle valeur.
4. Supprimer un secret
sng secret delete db-password
⚠ Suppression définitive du secret "db-password".
Tapez « oui » pour confirmer : oui
secret "db-password" scheduled for deletion (recovery 30 d)
Dans un script, passez --yes (-y) pour sauter la confirmation.
Après suppression :
- le secret disparaît de
sng secret list,describeetgetrépondent404; - si une App le référence, les conteneurs déjà démarrés gardent la valeur en mémoire ; ceux qui redémarrent ensuite (au plus tard quelques minutes après) restent bloqués tant que le secret n'est pas recréé ;
- un
sng secret set db-passwordultérieur recrée le secret sous le même nom et poursuit la numérotation des versions (la version 4 suit la 3) ; l'historique n'est pas perdu.
La suppression ne détruit aucune version : le secret peut être restauré (étape suivante).
--force et --recovery-days sont acceptés par la CLI et l'API, mais sans effet dans cette version : la suppression est la même avec ou sans eux, et le message « recovery 30 d » n'annonce pas un délai réel. Aucun délai n'est appliqué : un secret supprimé reste restaurable.
5. Restaurer un secret supprimé
sng secret restore db-password
secret "db-password" restored
Le secret revient tel qu'il était au moment de la suppression : même valeur, toutes ses versions, même planification de rotation. Il réapparaît dans sng secret list, et describe et get répondent de nouveau. Une App qui le référence le retrouve à son prochain démarrage.
- Il faut l'action
ssm:writesur ce secret (policies géréesreadwriteouadmin). - Restaurer un secret qui n'est pas supprimé ne change rien et réussit aussi : vous pouvez relancer la commande sans risque.
- Un nom qui n'a jamais existé dans votre tenant répond
secret not found.
Vérification
sng secret describe db-password
sng secret versions db-password
Après une suppression, describe échoue avec secret not found. Après sng secret restore, il répond de nouveau et versions liste toutes les versions d'avant la suppression. Après un nouveau set, version_id reprend à la valeur suivante.
Si ça ne marche pas
| Ce que vous voyez | Cause | Correction |
|---|---|---|
secret not found | Le secret a été supprimé, ou le nom est mal orthographié | sng secret list ; pour le remettre en service avec ses versions, sng secret restore NAME |
no versions | Secret déclaré sans valeur (version 0) | sng secret set NAME |
secret not found sur sng secret restore | Aucun secret de ce nom n'a existé dans le tenant | Vérifier le nom, et le tenant courant (sng tenant list) |
forbidden (…) | Il manque ssm:describe, ssm:read, ssm:write ou ssm:delete | Demander la policy à un administrateur |
Pour aller plus loin
- Pourquoi l'historique est en ajout seul : une version enregistrée n'est jamais modifiée. Réécrire une ancienne valeur sous un nouveau numéro garantit que l'historique reste fidèle.
- Un secret déclaré sans valeur (
sng secret create NAME --length 0, ou référencé par une App avant d'exister) est en version 0 :versionsrenvoieno versionsetgetne renvoie aucune donnée tant que vous n'avez pas faitset. - Secret déclaré par manifeste : si le secret est porté par un manifeste
SSMSecret, supprimez le manifeste (sng kind delete SSMSecret NAME) plutôt que le secret, sinon le manifeste reste en attente. Voir Déclarer un secret par manifeste. - API :
GET /v1/secrets/{name}/versions(ssm:describe),GET /v1/secrets/{name}/value?version_id=N(ssm:read),DELETE /v1/secrets/{name}(ssm:delete, réponse204),POST /v1/secrets/{name}/restore(ssm:write, réponse204,404si le secret est inconnu).