Mysql AWS:使用KMS加密主密码创建RDS实例
通过AWS cli工具在AWS上创建新的RDS实例时,是否可以使用使用AWS KMS密钥加密的主密码? 例如,使用此命令:Mysql AWS:使用KMS加密主密码创建RDS实例,mysql,amazon-web-services,amazon-rds,terraform,amazon-kms,Mysql,Amazon Web Services,Amazon Rds,Terraform,Amazon Kms,通过AWS cli工具在AWS上创建新的RDS实例时,是否可以使用使用AWS KMS密钥加密的主密码? 例如,使用此命令: 我这样问是因为我不想在我的开发环境中存储明文密码(使用terraform或cloud formation),取而代之的是由相应AWS组件透明解密的加密值。如果要使用CLI执行此操作,您可以始终使用KMS密钥加密密码,然后运行两个命令解密密码并创建数据库 所以类似的方法可能会奏效: aws rds创建实例\ --主用户名管理用户\ --主用户密码'aws kms decryp
我这样问是因为我不想在我的开发环境中存储明文密码(使用terraform或cloud formation),取而代之的是由相应AWS组件透明解密的加密值。如果要使用CLI执行此操作,您可以始终使用KMS密钥加密密码,然后运行两个命令解密密码并创建数据库 所以类似的方法可能会奏效: aws rds创建实例\ --主用户名管理用户\ --主用户密码'aws kms decrypt--密文blobfileb://path/to/kms/encrypted/file/with/password --输出文本--查询明文| base64--解码` 如果您仍然想使用Terraform创建数据库实例,那么我已经完成了。尽管这个问题更关心的是存储在远程状态文件中的数据库
如果你同样关注密码在密码中的存在,那么我会考虑简单地使用一个变量作为密码,然后使用.< /P> 同样,您也可以使用来动态解密您的密码。这会将密码泄漏到日志和状态文件,但:
$ 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==
然后在地形中:
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,但这并没有像预期的那样起作用,我要求开发人员在这里澄清文档:。这确实是我在使用Terraform时的首选方式。我还在研究如果这对你不起作用的话,您可以运行一个shell脚本,从加密文件中获取解密后的明文,并将其导出为环境变量,供Terraform在运行时使用。但有趣的是:您不能简单地将加密密码和密钥ID一起传递给RDS,并期望RDS对相应用例透明地解密,正确?正确,但那是因为AWS的API还不支持这一点。