2017-03-16 180 views

回答

3

如果你想用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}" 

    # ... 
} 
+0

謝謝您的回答慢拍搖滾樂!我試過'aws_kms_secret'已經但這並不按預期工作,我問開發者澄清文檔在這裏:https://github.com/hashicorp/terraform/issues/12800。這在使用Terraform時確實是我的首選方式。我仍在研究它。 – derFunk

+0

如果這不起作用,那麼如前所述,您可以運行一個shell腳本,從加密文件抓取解密後的明文,並將其作爲環境變量導出,以供Terraform在運行時使用。 – ydaetskcoR

+0

然而,這裏的有趣的一點是:你不能簡單地通過一個加密的口令與密鑰ID以及RDS和期望RDS透明地解密了根據使用情況,是否正確? – derFunk

相關問題