mysql - AWS : Using a KMS-encrypted master password to create a RDS instance

标签 mysql amazon-web-services amazon-rds terraform amazon-kms

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

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

最佳答案

如果您想使用 CLI 执行此操作,您始终可以使用 KMS key 加密密码,然后运行两个命令来解密密码并创建数据库。

所以这样的事情可能会起作用:

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}"

  # ...
}

关于mysql - AWS : Using a KMS-encrypted master password to create a RDS instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841759/

相关文章:

mysql - 如何用mysql命令行执行(通过ant)一组sql文件

c++ - 使用 libpqxx 批量存储数据或如何在 libpqxx 中使用 COPY 语句

php - 根据日期创建主键

PHP ~ 列数与第 1 行的值数不匹配

linux - 定时任务 : No space left on device

azure - S3 上的 Azure 存储的 SAS(共享访问签名)功能相当于什么?

python - Apache2 错误日志。调用 'site.addsitedir()' 失败 '(null)' ,停止

mysql - AWS RDS (MySQL) 安全连接

amazon-rds - RDS 集群和数据库实例概念

mysql - 从 MySQL 中的正则表达式错误中获取 'invalid character class'