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_USER
et DB_PASS
dans 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-key
pour faciliter le provisioning de la clé KMS. Consultez notre documentation détaillée avec des exemples d'utilisation chamber
de 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-backend
module pour provisionner un compartiment et une table de verrouillage DynamoDB conformément aux meilleures pratiques.