2017-03-16 179 views

回答

3

如果你想用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}" 

    # ... 
} 
+0

谢谢您的回答慢拍摇滚乐!我试过'aws_kms_secret'已经但这并不按预期工作,我问开发者澄清文档在这里:https://github.com/hashicorp/terraform/issues/12800。这在使用Terraform时确实是我的首选方式。我仍在研究它。 – derFunk

+0

如果这不起作用,那么如前所述,您可以运行一个shell脚本,从加密文件抓取解密后的明文,并将其作为环境变量导出,以供Terraform在运行时使用。 – ydaetskcoR

+0

然而,这里的有趣的一点是:你不能简单地通过一个加密的口令与密钥ID以及RDS和期望RDS透明地解密了根据使用情况,是否正确? – derFunk

相关问题