Se sei su AWS, dai un'occhiata a "The Right Way to Manage Secrets" di Segment.io sul blog AWS. Sosteniamo l'utilizzo chamber
di tutti i nostri clienti per la gestione dei segreti. Funziona sfruttando il Parameter Store (SSM) di AWS Systems Manager insieme alle chiavi KMS. Ciò garantisce che i segreti siano crittografati a riposo (e in transito), protetti con IAM, verificabili con CloudTrails ed esposti solo come variabili di ambiente in fase di esecuzione.
Dopo aver configurato la camera e impostato la chiave KMS, scriviamo i segreti nell'archivio parametri.
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret
Quindi usa quei segreti quando chiami terraform.
chamber exec db -- terraform plan
Ciò presuppone che tu abbia definito una variabile chiamata DB_USER
e DB_PASS
nel tuo codice HCL.
Ad esempio, è possibile aggiungere questo a variables.tf
variable "DB_USER" { }
variable "DB_PASS" { }
NOTA: chamber
verranno sempre esportate le variabili di ambiente in maiuscolo
Forniamo un modulo terraform chiamato terraform-aws-kms-key
per semplificare il provisioning della chiave KMS. Consulta la nostra documentazione dettagliata con esempi di come utilizzare chamber
con più spazi dei nomi e come utilizzare Chamber con Terraform per gestire i segreti. Consulta il nostro esempio di riferimento completo per le dipendenze della camera di provisioning.
Per quanto riguarda .tfstate
, fai apparire un ottimo punto sull'esistenza di segreti in chiaro nel file di stato. Non c'è davvero modo di aggirare questo. Affinché terraform calcoli le modifiche per costruire un piano, deve conoscere lo stato "prima" e "dopo". Per questo motivo, si consiglia di utilizzare un bucket S3 crittografato con versioning obbligatorio. Utilizzare il terraform-aws-tfstate-backend
modulo per eseguire il provisioning di un bucket e di una tabella di blocco DynamoDB in base alle best practice.