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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Secret | une valeur que personne d’autre ne doit voir, comme une clé | |
| Sensible | marqué pour que l’outil le cache à l’écran | sensitive = true |
| Variable d’environnement | une valeur que le shell passe à une commande | TF_VAR_jeton |
| État | le fichier où OpenTofu note ce qu’il a créé | |
| Fichier d’exclusion | une 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
mkdir -p ~/atelier-iac/coffre && cd ~/atelier-iac/coffreAffiché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
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.tfAffiché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
tofu init -no-color | grep successfullyAffiché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
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
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
tofu outputAffiché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
grep -c lune42 terraform.tfstateAffiché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
tofu output -raw affiche; echoAffiché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
printf '%s\n' 'terraform.tfstate' 'terraform.tfstate.backup' '*.tfvars' '.terraform/' > .gitignoreAffiché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
printf '%s\n' 'locals {' ' jeton_api = "lune42"' '}' > fuite.tf; grep -nE '(jeton|secret|mdp|cle)[a-z_]* *= *"' *.tf; rm fuite.tfAffiché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
# 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 ?