2

AWSでaws cliツールを使用して新しいRDSインスタンスを作成する場合、AWS KMSキーで暗号化されたマスターパスワードを使用できますか? など。 http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.htmlAWS:KMSで暗号化されたマスターパスワードを使用してRDSインスタンスを作成する

私の開発環境(テラフォームまたはクラウドフォーメーションを使用)にクリアテキストのパスワードを保存するのではなく、AWSコンポーネントによって透過的に暗号化された値を暗号化する必要があるので、私は尋ねています。

答えて

3

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

    # ... 
} 
+0

感謝を!私はすでに 'aws_kms_secret'を試しましたが、これは期待通りに動作しません。私は開発者にhttps://github.com/hashicorp/terraform/issues/12800のドキュメントを明確にするように頼んだのです。 Terraformを使用している場合、これは本当に私の好みの方法です。私はまだそれを研究しています。 – derFunk

+0

上記のように動作しない場合は、解読された平文を暗号化されたファイルから取得し、実行時にTerraformが使用する環境変数としてエクスポートするシェルスクリプトを実行できます。 – ydaetskcoR

+0

ここで興味深い点は、暗号化されたパスワードをKey IDとともにRDSに渡すだけではなく、RDSが適切なユースケースに対して透過的にそれを復号化することを期待することはできないでしょうか? – derFunk

関連する問題