当通过aws cli工具在AWS上创建新的RDS实例时,是否可以使用使用AWS KMS密钥加密的主密码? 例如使用这个命令:http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.htmlAWS:使用KMS加密的主密码创建RDS实例
我问,因为我不想存储明文密码在我的开发环境(使用terraform或云的形成)做的,而不是加密的被透明地根据AWS组件解密值。
当通过aws cli工具在AWS上创建新的RDS实例时,是否可以使用使用AWS KMS密钥加密的主密码? 例如使用这个命令:http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.htmlAWS:使用KMS加密的主密码创建RDS实例
我问,因为我不想存储明文密码在我的开发环境(使用terraform或云的形成)做的,而不是加密的被透明地根据AWS组件解密值。
如果你想用CLI你总是可以用一个KMS密钥加密的密码,然后运行两个命令来解密密码和创建数据库来做到这一点。
所以这样的事情可能工作:
aws rds create-instance ... \
--master-username admin-user \
--master-user-password `aws kms decrypt --ciphertext-blob fileb://path/to/kms/encrypted/file/with/password --output text --query Plaintext | base64 --decode`
如果你想仍然使用Terraform用于创建数据库实例,我已经previously answered a question along similar lines。虽然该问题更关心数据库存储在远程状态文件中。
如果你也同样关心你的代码保持密码,然后我会简单地使用您的密码变量,然后passing that in on the CLI或使用environment variable考虑。
同样,你可以使用aws_kms_secret
data source在飞行中解密密码。这将泄漏了密码,以日志和状态文件,但:
$ echo -n 'master-password' > plaintext-password
$ aws kms encrypt \
> --key-id ab123456-c012-4567-890a-deadbeef123 \
> --plaintext fileb://plaintext-example \
> --encryption-context foo=bar \
> --output text --query CiphertextBlob
AQECAHgaPa0J8WadplGCqqVAr4HNvDaFSQ+NaiwIBhmm6qDSFwAAAGIwYAYJKoZIhvcNAQcGoFMwUQIBADBMBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDI+LoLdvYv8l41OhAAIBEIAfx49FFJCLeYrkfMfAw6XlnxP23MmDBdqP8dPp28OoAQ==
然后在Terraform:
data "aws_kms_secret" "db" {
secret {
name = "master_password"
payload = "AQECAHgaPa0J8WadplGCqqVAr4HNvDaFSQ+NaiwIBhmm6qDSFwAAAGIwYAYJKoZIhvcNAQcGoFMwUQIBADBMBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDI+LoLdvYv8l41OhAAIBEIAfx49FFJCLeYrkfMfAw6XlnxP23MmDBdqP8dPp28OoAQ=="
context {
foo = "bar"
}
}
}
resource "aws_rds_cluster" "rds" {
master_username = "root"
master_password = "${data.aws_kms_secret.db.master_password}"
# ...
}
谢谢您的回答慢拍摇滚乐!我试过'aws_kms_secret'已经但这并不按预期工作,我问开发者澄清文档在这里:https://github.com/hashicorp/terraform/issues/12800。这在使用Terraform时确实是我的首选方式。我仍在研究它。 – derFunk
如果这不起作用,那么如前所述,您可以运行一个shell脚本,从加密文件抓取解密后的明文,并将其作为环境变量导出,以供Terraform在运行时使用。 – ydaetskcoR
然而,这里的有趣的一点是:你不能简单地通过一个加密的口令与密钥ID以及RDS和期望RDS透明地解密了根据使用情况,是否正确? – derFunk