AWS:使用 KMS 加密的主密码创建 RDS 实例
AWS: Using a KMS-encrypted master password to create a RDS instance
通过 aws cli 工具在 AWS 上创建新的 RDS 实例时,是否可以使用使用 AWS KMS 密钥加密的主密码?
例如。使用此命令:http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html
我问是因为我不想在我的开发环境中存储明文密码(使用 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 or using an 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 cli 工具在 AWS 上创建新的 RDS 实例时,是否可以使用使用 AWS KMS 密钥加密的主密码? 例如。使用此命令:http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html
我问是因为我不想在我的开发环境中存储明文密码(使用 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 or using an 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}"
# ...
}