Se você estiver na AWS, consulte "O caminho certo para gerenciar segredos", de Segment.io no Blog da AWS. Defendemos o uso chamber
de todos os nossos clientes para gerenciar segredos. Ele funciona aproveitando o AWS Systems Manager Parameter Store (SSM) junto com as chaves KMS. Isso garante que os segredos sejam criptografados em repouso (e em trânsito), protegidos com o IAM, auditáveis com CloudTrails e expostos apenas como variáveis de ambiente em tempo de execução.
Depois de configurar a câmara e configurar a chave KMS, escrevemos os segredos no armazenamento de parâmetros.
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret
Em seguida, use esses segredos ao chamar terraform.
chamber exec db -- terraform plan
Isso pressupõe que você definiu uma variável chamada DB_USER
e DB_PASS
no seu código HCL.
Por exemplo, você pode adicionar isso a variables.tf
variable "DB_USER" { }
variable "DB_PASS" { }
NOTA: chamber
sempre exportará variáveis de ambiente em maiúsculas
Fornecemos um módulo de terraform chamado terraform-aws-kms-key
para facilitar o provisionamento da chave KMS. Confira nossa documentação detalhada com exemplos de como usar chamber
com vários espaços para nome, bem como como usar câmara com terraform para gerenciar segredos. Veja nosso exemplo de referência completo para provisionar dependências da câmara.
Quanto a .tfstate
, você traz um ponto realmente bom sobre a existência de segredos de texto sem formatação no arquivo de estado. Realmente não há maneira de contornar isso. Para que o terraform calcule as mudanças para criar um plano, ele precisa conhecer o estado "antes" e "depois". Por esse motivo, recomendamos o uso de um bucket S3 criptografado com controle de versão obrigatório. Use o terraform-aws-tfstate-backend
módulo para provisionar um balde e a tabela de bloqueio do DynamoDB de acordo com as melhores práticas.