Si vous êtes sur AWS, consultez «Le bon moyen de gérer les secrets» par Segment.io sur le blog AWS. Nous recommandons chamberà tous nos clients de gérer leurs secrets. Il fonctionne en exploitant le SSM (AWS Systems Manager Parameter Store) avec les clés KMS. Cela garantit que les secrets sont cryptés au repos (et en transit), sécurisés avec IAM, contrôlables avec CloudTrails et exposés uniquement en tant que variables d'environnement au moment de l'exécution.
Après avoir configuré la chambre et la clé KMS, nous écrivons les secrets dans le magasin de paramètres.
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret
Ensuite, utilisez ces secrets lorsque vous appelez terraform.
chamber exec db -- terraform plan
Cela suppose que vous avez défini une variable appelée DB_USERet DB_PASSdans votre code HCL.
Par exemple, vous pouvez ajouter ceci à variables.tf
variable "DB_USER" { }
variable "DB_PASS" { }
REMARQUE: chamber exportera toujours les variables d’environnement en majuscules
Nous fournissons un module terraform appelé terraform-aws-kms-keypour faciliter le provisioning de la clé KMS. Consultez notre documentation détaillée avec des exemples d'utilisation chamberde plusieurs espaces de noms ainsi que de l'utilisation de chamber avec terraform pour gérer les secrets. Voir notre exemple de référence complet pour les dépendances de la chambre d'approvisionnement.
En ce qui concerne .tfstate, vous soulevez un très bon point sur l'existence de secrets en texte brut dans le fichier d'état. Il n'y a vraiment aucun moyen de contourner cela. Pour que terraform calcule les modifications nécessaires à la création d'un plan, il doit connaître l'état "avant" et "après". Pour cette raison, nous vous recommandons d'utiliser un compartiment S3 crypté avec la gestion des versions obligatoire. Utilisez le terraform-aws-tfstate-backendmodule pour provisionner un compartiment et une table de verrouillage DynamoDB conformément aux meilleures pratiques.