1

如何将加密数据从 SSMParameter Store 拉入 terraform var 文件并保持端到端加密?

我的要求是:我想在 AWS SSM/AWS Secrets Manager 中保留我的密码和其他一些环境变量,现在将该值以加密形式本身放入环境变量中,最后在 terraform 代码中对其进行解密。有什么最好的方法吗?

4

1 回答 1

0

您可以拥有一个非常简单的脚本,该脚本使用 AWS cli 从秘密管理器中提取秘密并将其设置为 env var(该脚本的本地),然后调用 terraform plan 然后 terraform apply。此代码段将获取从 aws secrets-manager 命名secret-name的秘密,然后将其放入环境变量中TF_VAR_secret(前缀TF_VAR_会将 var 作为 terraform 变量的值传递secret

#!/bin/bash -e
set -o pipefail
set +x
export TF_VAR_secret=$(aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-2:<AWS ACCT #>:secret:secret-name | jq -r .SecretString)
set -x
terraform plan

请记住,使用此模式不会加密terraform 状态中的值。您需要确保提供者将您设置的任何内容标记为敏感,以及远程状态文件所在的任何位置都经过静态加密,并且读取状态的访问权限适合您的数据有。见https://www.terraform.io/docs/state/sensitive-data.html

如果您使用的是 AWS codebuild,则使用environment_variableof 类型会变得更简单SECRET_MANAGER

总结一下:你的状态应该被加密,而不是状态的 值。您可以通过加密整个静止状态并控制对状态的访问来解决这个问题。如果提供者确实加密了 state 中的值,它将从官方注册表中提取

于 2020-09-29T21:24:43.380 回答