Aller au contenu principal

sng secret

Disponible

Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.

Le groupe sng secret gère les valeurs secrètes de votre tenant : création, lecture, versions, rotation, suppression. Il agit sur le service de secrets, pas sur vos manifestes — à l'exception de sng secret create, qui produit et applique un manifeste SSMSecret.

Toutes les commandes exigent une session sur le tenant (sng tenant use NAME) ; sinon : tenant session required: run sng tenant use NAME. Les flags globaux (--config, --json, -v, --version) sont décrits dans l'index de la CLI.

Nom d'un secret (argument NAME partout) : minuscules, chiffres, ., _, - ; 128 caractères au plus ; ni / ni ... Sinon : invalid secret name: use lowercase letters, digits, dots, underscores or hyphens.

Actions IAM par commande :

CommandeAction IAMRoute
listssm:listGET /v1/secrets
describessm:describeGET /v1/secrets/{name}
getssm:readGET /v1/secrets/{name}/value
setssm:writePUT /v1/secrets/{name}
createdeploy:write (apply) ; la plateforme déclare ensuite le secretPOST /v1/apply
versionsssm:describeGET /v1/secrets/{name}/versions
rotatessm:read puis ssm:writeGET …/value puis PUT /v1/secrets/{name}
restoressm:writePOST /v1/secrets/{name}/restore
deletessm:deleteDELETE /v1/secrets/{name}

Un refus renvoie 403 forbidden ; une absence de session 403 tenant session required.

sng secret list​

sng secret list [--json]

Liste les secrets du tenant, sans valeurs.

FlagTypeDéfautDescription
(aucun flag propre)
sng secret list
NAME KEYS UPDATED
api-key 2026-10-07T09:12:41Z
db-password 2026-10-07T09:10:03Z

Sans secret : no secrets. La colonne KEYS est vide dans cette version (la liste ne charge pas les clés ; utilisez describe).

Sortie --json : {"secrets": [{"name": "…", "updated_at": "…", "version_id": "3", "version_stages": {"current": "3"}}]}.

sng secret describe​

sng secret describe NAME

Métadonnées d'un secret, toujours en JSON : clés, version courante, rotation. Jamais la valeur.

ArgumentDescription
NAMEnom du secret
sng secret describe db-password
{
"name": "db-password",
"keys": ["value"],
"updated_at": "2026-10-07T09:10:03Z",
"version_id": "3",
"rotation_enabled": true,
"rotation_days": 30,
"next_rotation_date": "2026-11-06T09:10:03Z",
"version_stages": { "current": "3" },
"bindings": {
"env_from_secret": { "name": "runtime-env", "key": "db-password" },
"external_secret_remote_ref": { "key": "db-password", "property": "value" }
}
}

rotation_* et next_rotation_date n'apparaissent que si une rotation est armée. version_id: "0" signale un secret déclaré sans valeur. Le bloc bindings est un héritage à ignorer.

Erreurs : secret not found (404) si le secret n'existe pas ou a été supprimé.

sng secret get​

sng secret get NAME [--version-id ID] [--key KEY] [--out-file PATH]

Lit la valeur d'un secret. Sans --key, imprime le JSON des clés ; avec --key, imprime la valeur brute de cette clé.

ArgumentDescription
NAMEnom du secret
FlagTypeDéfautDescription
--version-idstring(courante)numéro de version à lire (1, 2, …)
--keystringextraire une clé du secret
--out-filestringécrire dans ce fichier (permissions 0600) au lieu de la sortie standard
sng secret get db-password
sng secret get db-password --key value
sng secret get db-password --version-id 1 --key value --out-file ./old
{
"value": "S3cr3t"
}
S3cr3t
wrote ./old (mode 0600)

Le message wrote … est émis sur la sortie d'erreur. Un secret sans valeur renvoie null.

Erreurs : key "x" not found in secret ; secret not found (404).

sng secret set​

sng secret set NAME [--value V | --from-file PATH | --data K=V ...]
[--length N] [--contains CLASSES] [--exclude-chars CHARS]
[--no-lowercase] [--no-uppercase] [--no-numbers] [--no-symbols]
[--require-each-type[=false]]
[--rotation N] [--rotation-key KEY]

Crée ou met à jour un secret (nouvelle version). Sans --value, --from-file ni --data, une valeur aléatoire est générée (16 caractères : lettres, chiffres, ponctuation) et stockée sous la clé value.

ArgumentDescription
NAMEnom du secret
FlagTypeDéfautDescription
--valuestringvaleur en clair (déconseillé : visible dans l'historique du shell)
--from-filestringlire la valeur dans un fichier, tel quel (recommandé)
--datak=v, répétablepaires clé=valeur ; le secret a alors plusieurs clés
--lengthint16longueur de la valeur générée (1–4096)
--containsliste(toutes)classes à utiliser : letter, number, symbol, lower, upper (alias : letters, alpha, numbers, digit, digits, symbols, punctuation, lowercase, uppercase) ; exclusif avec les --no-*
--exclude-charsstringcaractères jamais utilisés
--no-lowercaseboolfalsepas de minuscules
--no-uppercaseboolfalsepas de majuscules
--no-numbersboolfalsepas de chiffres
--no-symbolsboolfalsepas de ponctuation
--require-each-typebooltrueau moins un caractère de chaque classe retenue
--rotationintoffle serveur renouvelle la valeur tous les N jours (1–3650) ; 0 désarme ; absent = planification inchangée
--rotation-keystringclé à renouveler pour un secret multi-clés (défaut : son unique clé) ; exige --rotation

Règles :

  • Les flags de génération (--length, --contains, --exclude-chars, --no-*, --require-each-type) ne s'appliquent qu'à une valeur générée. Avec une valeur fournie ils sont refusés : --length only applies to a generated value (without --from-file, --data or --value) — sauf --length, --contains, --exclude-chars, --require-each-type quand --rotation est présent : ils décrivent alors la valeur que le serveur générera à l'échéance.
  • --contains et les --no-* sont exclusifs : --contains and the --no-* flags are mutually exclusive.
  • --data exige la forme k=v : --data format expected key=value.
sng secret set db-password
sng secret set db-password --from-file ./pw --rotation 30 --length 24
sng secret set shop-api --data DATABASE_URL=postgres://… --data SMTP_PASSWORD=xyz
secret "db-password" saved with a generated 16-character value (sng secret get db-password)
secret "db-password" saved
secret "shop-api" saved

Sortie --json : les métadonnées du secret (même forme que describe, sans bindings).

Erreurs typiques : --length 3 is too short to include each of the 4 character types ; no characters left to generate a value: relax the --no-* or --exclude-chars options ; --rotation-key requires --rotation ; value or data required (400, corps vide côté API) ; forbidden (403).

sng secret create​

sng secret create NAME [--length N] [--rotation N] [--contains CLASSES]
[--description TEXT] [--dry-run]

Déclare un secret par manifeste : produit un manifeste SSMSecret et l'applique comme sng apply (tenant de la configuration locale requis). La plateforme crée ensuite le secret, génère sa valeur si --length > 0, et le supprimera avec le manifeste. La valeur n'apparaît jamais dans le manifeste. Voir Déclarer un secret dans un manifeste.

ArgumentDescription
NAMEnom du secret et du manifeste
FlagTypeDéfautDescription
--lengthint16longueur de la valeur générée (0–4096) ; 0 = déclaré vide, valeur posée ensuite avec set
--rotationint0renouvellement tous les N jours (0–3650) ; exige --length > 0
--containsliste(toutes)classes : letters, numbers, symbols (alias letter, alpha, number, digit, digits, numbers, symbol, punctuation) ; exige --length > 0
--descriptionstringdescription visible dans describe
--dry-runboolfalseimprime le manifeste sans l'appliquer
sng secret create db-password --length 20 --rotation 30
sng secret create smtp-password --length 0
sng secret create api-key --contains letters,numbers --dry-run
secret "db-password" declared in tenant acme: …
secret "smtp-password" declared in tenant acme: …
set its value with: sng secret set smtp-password

Sortie de --dry-run :

apiVersion: ssm.stackngo.io/v1alpha1
kind: SSMSecret
metadata:
name: api-key
spec:
length: 16
contains:
- letters
- numbers

Sortie --json : {"uploads": [...]}.

Erreurs typiques : --rotation needs a generated value: --length must be > 0 ; --contains needs a generated value: --length must be > 0 ; --contains "x" unknown: expected letters, numbers or symbols ; --length must be between 0 and 4096 ; --rotation must be between 0 and 3650 days ; tenant session required: run sng tenant use NAME.

sng secret versions​

sng secret versions NAME [--json]

Liste les versions d'un secret (numéro, date). Pas de valeur.

ArgumentDescription
NAMEnom du secret
sng secret versions db-password
VERSION STAGES CREATED
1 2026-10-07T09:10:03Z
2 2026-10-07T09:31:48Z

STAGES est toujours vide dans cette version. Secret sans valeur : no versions.

Sortie --json : {"versions": [{"version_id": "1", "stages": [], "created_at": "…"}]}.

sng secret rotate​

sng secret rotate NAME [--key KEY]
[--length N] [--contains CLASSES] [--exclude-chars CHARS]
[--no-lowercase] [--no-uppercase] [--no-numbers] [--no-symbols]
[--require-each-type[=false]]
[--rotation N] [--rotation-key KEY]

Remplace la valeur par une nouvelle valeur aléatoire, stockée comme nouvelle version. La génération se fait dans la CLI, avec les mêmes flags que set. Pour un secret multi-clés, --key désigne la clé renouvelée ; les autres sont conservées.

ArgumentDescription
NAMEnom du secret
FlagTypeDéfautDescription
--keystring(unique clé)clé à renouveler dans un secret multi-clés
flags de générationidentiques à set : --length, --contains, --exclude-chars, --no-*, --require-each-type
--rotation, --rotation-keyidentiques à set : armer ou modifier la rotation planifiée en même temps
sng secret rotate db-password
sng secret rotate shop-api --key SMTP_PASSWORD --length 32
sng secret rotate db-password --rotation 30
secret "db-password" rotated: new 16-character value (sng secret get db-password)
secret "shop-api" rotated: new 32-character value for key "SMTP_PASSWORD"

Erreurs typiques : the secret holds several keys (DATABASE_URL, SMTP_PASSWORD): choose one with --key ; key "x" not found in the secret ; secret not found (404) ; forbidden (403, il faut ssm:read et ssm:write).

sng secret restore​

sng secret restore NAME

Annule la suppression d'un secret : il revient avec sa valeur, toutes ses versions et sa planification de rotation. Action ssm:write.

ArgumentDescription
NAMEnom du secret
sng secret restore db-password
secret "db-password" restored

Restaurer un secret qui n'est pas supprimé réussit sans rien changer. Dans cette version, aucun délai de récupération n'est appliqué : un secret supprimé reste restaurable. Voir Versions et restauration.

Erreurs typiques : secret not found (404, aucun secret de ce nom dans le tenant) ; forbidden (403, il faut ssm:write).

sng secret delete​

sng secret delete NAME [--yes] [--force] [--recovery-days N]

Supprime un secret. Demande confirmation (tapez oui) sauf avec --yes.

ArgumentDescription
NAMEnom du secret
FlagTypeDéfautDescription
--yes, -yboolfalseconfirmer sans invite interactive
--forceboolfalsesuppression immédiate sans récupération (ignoré par le serveur dans cette version)
--recovery-daysint0fenêtre de récupération en jours (7–30 ; ignoré par le serveur dans cette version)
sng secret delete db-password
sng secret delete db-password --yes
⚠ Suppression définitive du secret "db-password".
Tapez « oui » pour confirmer : oui
secret "db-password" scheduled for deletion (recovery 30 d)

Avec --force : secret "db-password" permanently deleted.

Quel que soit le flag, la suppression est logique côté serveur : le secret disparaît de list, describe et get, ses versions chiffrées ne sont pas purgées. sng secret restore NAME le remet en service avec toutes ses versions ; un sng secret set NAME le recrée sous le même nom en poursuivant les versions.

Erreurs typiques : confirmation requise : relancez avec --yes ou depuis un terminal interactif (entrée non interactive sans --yes) ; secret not found (404) ; forbidden (403).

Voir aussi​