Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Mettre les secrets hors du code d'infrastructure

Après cette leçon: Je peux garder un secret hors des fichiers OpenTofu et dire où il se retrouve quand même.

Leçon de 60 min10 commandesLab OpenTofu : l’infrastructure en code, avec plan, apply et état, dans une VM

La clé en première page

Un étudiant pousse un projet vers un dépôt public. Un fichier contient une clé d’accès, parce qu’elle a fait marcher le premier test.

Des programmes qui lisent les dépôts publics toute la journée la trouvent en quelques minutes. Une clé dans un fichier est une clé que n’importe qui peut utiliser, et elle reste dans l’historique après la modification du fichier.

À la fin de cette leçon

Remarque

Je peux garder un secret hors des fichiers OpenTofu et dire où il se retrouve quand même.

Mots-clés

MotCe que ça veut direExemple
Secretune valeur que personne d’autre ne doit voir, comme une clé
Sensiblemarqué pour que l’outil le cache à l’écransensitive = true
Variable d’environnementune valeur que le shell passe à une commandeTF_VAR_jeton
Étatle fichier où OpenTofu note ce qu’il a créé
Fichier d’exclusionune liste de fichiers que le suivi de versions ignore.gitignore

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un secret reste hors des fichiers versionnés

Une valeur écrite dans un fichier .tf est enregistrée avec le projet, copiée dans chaque clone et gardée dans l’historique. Un secret est donc donné à OpenTofu de l’extérieur.

Le moyen courant est une variable d’environnement. Une variable nommée jeton se règle avec TF_VAR_jeton. La marquer sensitive la cache ensuite à l’écran.

Créer un dossier et y entrer

Commande
mkdir -p ~/atelier-iac/coffre && cd ~/atelier-iac/coffre

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire un projet qui reçoit un secret

Commande
printf '%s\n' 'variable "jeton" {' '  type      = string' '  sensitive = true' '}' '' 'resource "terraform_data" "connexion" {' '  input = var.jeton' '}' '' 'output "affiche" {' '  value     = terraform_data.connexion.output' '  sensitive = true' '}' > main.tf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Préparer le dossier

Commande
tofu init -no-color | grep successfully

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Planifier avec le secret dans l’environnement

Commande
TF_VAR_jeton=lune42 tofu plan -no-color | grep -E "input|^Plan"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

L’appliquer

Commande
TF_VAR_jeton=lune42 tofu apply -auto-approve -no-color | grep -E "Apply complete|affiche"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister les sorties

Commande
tofu output

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Sensible cache une valeur, rien de plus

sensitive ne change que ce qui est affiché. L’état enregistre toujours chaque valeur en clair, car OpenTofu en a besoin pour comparer la fois suivante.

Le fichier d’état est donc aussi secret que le secret. Gardez-le hors du suivi de versions, et en vrai travail dans un stockage chiffré à l’accès limité.

Compter les endroits où l’état garde la valeur

Commande
grep -c lune42 terraform.tfstate

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Demander la sortie brute

Commande
tofu output -raw affiche; echo

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup pensent que sensitive chiffre une valeur. Ce n’est pas le cas. Elle cache la valeur dans le plan et la sortie, et quiconque lit l’état ou lance tofu output -raw la voit encore. Protégez aussi l’état.

Un fichier d’exclusion garde l’état dehors

Un .gitignore liste les fichiers que le suivi de versions n’ajoute jamais. Quatre lignes couvrent un projet OpenTofu : l’état, sa copie de sauvegarde, tout fichier .tfvars et le dossier .terraform.

Oublier une ligne, c’est ainsi qu’un état contenant un secret est poussé.

Écrire un fichier d’exclusion

Commande
printf '%s\n' 'terraform.tfstate' 'terraform.tfstate.backup' '*.tfvars' '.terraform/' > .gitignore

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Planter un secret et le chercher

Commande
printf '%s\n' 'locals {' '  jeton_api = "lune42"' '}' > fuite.tf; grep -nE '(jeton|secret|mdp|cle)[a-z_]* *= *"' *.tf; rm fuite.tf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une recherche de secrets en Python

Code: python
# Trouver les lignes qui donnent une valeur à un secret dans le fichier lui-même.
lignes = [
    'region = "eu-west-2"',
    'jeton_api = "lune42"',
    'jeton_api = var.jeton_api',
]
mots = ["jeton", "secret", "mdp", "cle"]
for numero, ligne in enumerate(lignes, 1):
    nom = ligne.split("=")[0].strip().lower()
    valeur = ligne.split("=")[1].strip()
    if any(mot in nom for mot in mots) and valeur.startswith('"'):
        print("ligne", numero, "donne une valeur à", nom)
# Mettez une valeur entre guillemets à la troisième ligne et regardez de nouveau.

Pour aller plus loin : un fichier de variables

Écrivez la ligne jeton = "soleil7" dans un fichier nommé secret.tfvars. Lancez tofu plan -no-color -var-file=secret.tfvars | grep -E "input|^Plan", puis supprimez le fichier.

Pourquoi *.tfvars est-il dans le fichier d’exclusion, et le plan montre-t-il la nouvelle valeur ?

À propos de ce labo et de sa source: Lab OpenTofu : l’infrastructure en code, avec plan, apply et état, dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.