當通過aws cli工具在AWS上創建新的RDS實例時,是否可以使用使用AWS KMS密鑰加密的主密碼? 例如使用這個命令:http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.htmlAWS:使用KMS加密的主密碼創建RDS實例
我問,因爲我不想存儲明文密碼在我的開發環境(使用terraform或雲的形成)做的,而不是加密的被透明地根據AWS組件解密值。
當通過aws cli工具在AWS上創建新的RDS實例時,是否可以使用使用AWS KMS密鑰加密的主密碼? 例如使用這個命令:http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.htmlAWS:使用KMS加密的主密碼創建RDS實例
我問,因爲我不想存儲明文密碼在我的開發環境(使用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或使用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_kms_secret'已經但這並不按預期工作,我問開發者澄清文檔在這裏:https://github.com/hashicorp/terraform/issues/12800。這在使用Terraform時確實是我的首選方式。我仍在研究它。 – derFunk
如果這不起作用,那麼如前所述,您可以運行一個shell腳本,從加密文件抓取解密後的明文,並將其作爲環境變量導出,以供Terraform在運行時使用。 – ydaetskcoR
然而,這裏的有趣的一點是:你不能簡單地通過一個加密的口令與密鑰ID以及RDS和期望RDS透明地解密了根據使用情況,是否正確? – derFunk