Module 7 — Les données sensibles
Durée indicative du cours : 1 h 15
Durée indicative de l’atelier : atelier du jour 4, partagé avec le module 8
Durée totale (cours + atelier) : le jour 4 réunit les modules 7 à 9 et l’atelier du jour
Ce module couvre l’objectif 4h. Une fiche d’environnement finit par côtoyer un secret. Le secret ne se traite pas comme le nom lab-equipe.
Masquer l’affichage
sensitive = true sur une variable ou un output masque la valeur dans le plan, dans l’apply et dans terraform output.
variable "jeton" {
type = string
sensitive = true
}
output "jeton" {
value = var.jeton
sensitive = true
}
La valeur peut quand même être écrite dans le state et dans le plan enregistré. sensitive change l’affichage. Il ne retire pas la valeur du carnet. Un state qui contient un secret se protège par le backend, les droits d’accès, et le fait de ne pas le commiter.
Un fichier terraform.tfvars qui porte ce jeton ne se commite pas non plus. Vous le fournissez au moment du run, ou par TF_VAR_jeton.
Une valeur qui ne reste pas
Une valeur éphémère est lue pour l’apply en cours. Terraform ne la garde pas dans le state ni dans le plan comme une valeur ordinaire.
Une variable se déclare éphémère avec ephemeral = true. Vous ne pouvez pas l’affecter à un argument qui serait enregistré, comme le content d’un local_file. Terraform refuse ce passage, parce qu’il stockerait le secret.
Le provider random sait produire un mot de passe éphémère.
ephemeral.random_password.secret.result existe pendant l’opération. Vous le transmettez à un argument capable de le recevoir sans le stocker, ou à un output lui-même éphémère.
Un output éphémère n’est pas relu plus tard avec terraform output. Il sert à transmettre la valeur à un autre consommateur pendant le run.
L’argument write-only
Certains arguments de ressources sont write-only. Leur nom se termine par _wo. Ils acceptent une valeur, souvent éphémère, et le provider ne la renvoie pas dans le state. Un second argument, en général ..._wo_version, est un numéro que vous augmentez quand vous voulez remplacer le secret.
resource "exemple" "coffre" {
secret_wo = ephemeral.random_password.secret.result
secret_wo_version = 1
}
Le nom exact dépend du provider. La forme, elle, est stable : un argument _wo, un numéro de version, et une valeur que le state ne doit pas conserver. Vous augmentez le numéro pour demander un nouveau dépôt du secret.
Vault
Vault est un coffre à secrets, distinct de Terraform. Terraform peut le lire au moment du run grâce au provider Vault. Il ne devient pas le coffre.
Une ressource éphémère du provider Vault lit un secret pour l’apply et ne l’écrit pas dans le state. C’est le bon branchement quand le secret vit déjà dans Vault. Le cours n’en fait pas une troisième série d’ateliers. Vous devez pouvoir expliquer le rôle de chacun.
sensitivemasque l’affichage.- Une valeur éphémère et un argument write-only évitent de garder le secret dans le state.
- Vault conserve le secret et le délivre au moment voulu.
- Le state et les tfvars restent hors du dépôt quand ils ont pu contenir un secret.
Ce que vous faites sur le fil
- Ajouter
ephemeral "random_password"à côté de la fiche. - Vérifier qu’un output ordinaire qui citerait
resultest refusé. - Publier la valeur seulement par un output
ephemeral = true, ou la passer à un argument_wosi la cible de votre série en a un. - Ouvrir le state après l’apply et constater que le mot de passe n’y figure pas comme le suffixe de
random_id.
Ce que l’examen veut pour ce module
| Objectif | Vous devez pouvoir l’expliquer |
|---|---|
| 4h | sensitive masque l’affichage. L’éphémère et le write-only limitent ce qui est stocké. Vault est le coffre, lu au moment du run |
Points à retenir
- Un plan qui cache une valeur peut quand même l’avoir mise dans le state.
- Une valeur éphémère ne s’écrit pas dans un argument ordinaire.
- On augmente la version write-only pour renouveler un secret.
- Le fichier de log du module 4 peut lui aussi contenir un secret. Il ne se commite pas.
Suite
Poursuivre avec le module 8 — HCP Terraform.