CLIでこれを実行する場合は、KMSキーを使用してパスワードを暗号化し、次に2つのコマンドを実行してパスワードの復号化とデータベースの作成を行うことができます。
したがって、このような何かがうまくいくかもしれない:
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`
あなたはまだあなたのデータベースインスタンスを作成するためのテラフォームを使用したい場合は、私は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==
そしてを:あなたの答えロックステディため
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
上記のように動作しない場合は、解読された平文を暗号化されたファイルから取得し、実行時にTerraformが使用する環境変数としてエクスポートするシェルスクリプトを実行できます。 – ydaetskcoR
ここで興味深い点は、暗号化されたパスワードをKey IDとともにRDSに渡すだけではなく、RDSが適切なユースケースに対して透過的にそれを復号化することを期待することはできないでしょうか? – derFunk