AWS:使用KMS加密的主密码创建RDS实例

der*_*unk 3 mysql amazon-web-services amazon-rds terraform amazon-kms

通过aws cli工具在AWS上创建新的RDS实例时,是否可以使用通过AWS KMS密钥加密的主密码?例如,使用以下命令:http : //docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html

我之所以问是因为我不想在我的开发环境(使用terraform或云形成)中存储明文密码,而是将加密的值(由相应的AWS组件透明解密)存储在我的开发环境中。

yda*_*coR 5

如果要使用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`
Run Code Online (Sandbox Code Playgroud)

如果您仍然想使用Terraform创建数据库实例,那么我以前已经按照类似的方式回答了一个问题。尽管该问题更关心的是数据库存储在远程状态文件中。

如果您同样关心将密码保留在代码中,那么我会考虑简单地为密码使用变量,然后在CLI上传递密码或使用环境变量

同样,您可以使用aws_kms_secret数据源即时解密密码。但是,这会将密码泄漏到日志和状态文件中:

$ 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==
Run Code Online (Sandbox Code Playgroud)

然后在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}"

  # ...
}
Run Code Online (Sandbox Code Playgroud)