Comment décoder un Secret Kubernetes
- Lancez
kubectl get secret app-db -n shop -o yamlet collez la sortie dans la zone. Le JSON de-o jsonfonctionne aussi. - Le tableau liste chaque clé avec sa valeur décodée et sa taille, ainsi que les boutons Copier et Copier le Base64.
- Le panneau de sortie contient le même Secret réécrit avec
stringData, valeurs en clair. Les valeurs binaires restent dansdata. - Passez à Créer le Secret pour l’opération inverse : des lignes
KEY=valueen entrée, un Secret avecdataen Base64 en sortie.
L’entrée peut aussi être une List issue de kubectl get secrets -o yaml, plusieurs documents séparés par ---, un manifeste rendu par Helm, un .dockerconfigjson seul ou une simple valeur Base64.
Exemple : ce que donne kubectl et ce que cela signifie
apiVersion: v1
data:
DATABASE_URL: cG9zdGdyZXM6Ly9hcHA6czNjcjN0LVBhNTVAZGI6NTQzMi9zaG9w
DB_PASSWORD: czNjcjN0LVBhNTUK
DB_USER: YXBw
kind: Secret
metadata:
name: app-db
namespace: shop
type: Opaque
| Clé | Décodé | Taille |
|---|---|---|
DATABASE_URL | postgres://app:s3cr3t-Pa55@db:5432/shop | 39 B |
DB_PASSWORD | s3cr3t-Pa55 plus un saut de ligne | 12 B |
DB_USER | app | 3 B |
Le mot de passe fait 11 caractères, mais la valeur fait 12 octets. Quelqu’un l’a créée avec echo 's3cr3t-Pa55' | base64, et le saut de ligne final fera échouer la connexion à la base de données. Sans le saut de ligne, le Base64 serait czNjcjN0LVBhNTU=.
Ce que reconnaît le décodeur
- Les certificats et clés PEM comme
tls.crtettls.keydans un Secretkubernetes.io/tlssont signalés. Les certificats reçoivent un lien vers le décodeur de certificats pour vérifier l’expiration et les SAN. - Les valeurs JSON sont formatées.
- Les valeurs binaires comme un keystore Java reçoivent leur type de fichier, un aperçu hex et un bouton Télécharger.
- Les valeurs
.dockerconfigjsonet.dockercfgsont découpées en registre, nom d’utilisateur et mot de passe, avecauthdécodé. Le décodeur .dockerconfigjson les met au premier plan.
Commandes kubectl d’une ligne
Une seule valeur. Échappez les points des noms de clés dans jsonpath :
kubectl get secret app-db -o jsonpath='{.data.DB_PASSWORD}' | base64 --decode
kubectl get secret app-tls -o jsonpath='{.data.tls\.crt}' | base64 --decode
Toutes les valeurs, avec la fonction de template base64decode intégrée à kubectl ou avec jq :
kubectl get secret app-db -o go-template='{{range $k, $v := .data}}{{$k}}={{$v | base64decode}}{{"\n"}}{{end}}'
kubectl get secret app-db -o json | jq '.data | map_values(@base64d)'
Créer un Secret sans tomber dans le piège du saut de ligne :
kubectl create secret generic app-db --from-literal=DB_PASSWORD='s3cr3t-Pa55' --dry-run=client -o yaml
D’autres recettes shell se trouvent sur la page Base64 en Bash.
Limites et problèmes courants
- « Aucun Secret avec data ou stringData trouvé » : le texte collé est probablement un Deployment ou une ConfigMap. Les valeurs d’une ConfigMap sont en texte brut et n’ont pas besoin d’être décodées.
- Taille : un Secret est limité à 1 Mio au total. Créer le Secret vérifie la limite, les noms de clés et le nom de type DNS avant que vous n’appliquiez quoi que ce soit.
- Fonctions YAML : le lecteur couvre ce que produisent kubectl, Helm et Kustomize, y compris les scalaires en bloc et les documents multiples. Les ancres, alias et clés de fusion ne sont pas pris en charge.
- Les Secrets de release Helm (
sh.helm.release.v1.*) contiennent du Base64 de données gzip à l’intérieur de la valeurdataen Base64. Décodez ici la couche externe, puis utilisez le décodeur Base64 gzip.
FAQ
Comment décoder un Secret Kubernetes avec kubectl ?
Pour une clé : kubectl get secret app-db -o jsonpath='{.data.DB_PASSWORD}' | base64 --decode. Pour toutes les clés à la fois, collez ici la sortie de -o yaml, ou utilisez les commandes go-template ou jq d’une ligne données sur cette page.
Les Secrets Kubernetes sont-ils chiffrés ?
Le champ data n’est que du Base64, que toute personne ayant un accès en lecture peut inverser. Le chiffrement au repos dans etcd est un réglage séparé du cluster, et c’est RBAC qui décide qui peut lire les Secrets. Voir encodage ou chiffrement.
Pourquoi mon secret décodé se termine-t-il par un saut de ligne ?
La valeur a été créée avec echo au lieu de echo -n : le saut de ligne a donc été encodé aussi. Son Base64 se termine alors souvent par K, o= ou Cg==. Recréez-la avec printf '%s' value | base64 ou avec kubectl create secret --from-literal.
Quelle est la différence entre data et stringData ?
data contient des valeurs en Base64, stringData accepte du texte brut que le serveur d’API encode pour vous à l’écriture. Les lectures renvoient toujours data. Le panneau de sortie réécrit ici le Secret avec stringData pour que vous puissiez le modifier et le réappliquer.