Aller au contenu principal

Versions et restauration

Disponible

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:describe pour lister les versions, ssm:read pour lire une valeur, ssm:write pour réécrire ou restaurer, ssm:delete pour supprimer (policies gérées readwrite ou admin).

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, describe et get répondent 404 ;
  • 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-password ulté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).

Options de suppression

--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:write sur ce secret (policies gérées readwrite ou admin).
  • 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 voyezCauseCorrection
secret not foundLe 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 versionsSecret déclaré sans valeur (version 0)sng secret set NAME
secret not found sur sng secret restoreAucun secret de ce nom n'a existé dans le tenantVérifier le nom, et le tenant courant (sng tenant list)
forbidden (…)Il manque ssm:describe, ssm:read, ssm:write ou ssm:deleteDemander 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 : versions renvoie no versions et get ne renvoie aucune donnée tant que vous n'avez pas fait set.
  • 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éponse 204), POST /v1/secrets/{name}/restore (ssm:write, réponse 204, 404 si le secret est inconnu).

Voir aussi​