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`
아직도 그때 previously answered a question along similar lines를했습니다 데이터베이스 인스턴스를 생성 Terraform을 사용하고자합니다. 이 질문은 데이터베이스가 원격 상태 파일에 저장되는 것에 더 관심이 있지만.
코드에 암호를 똑같이 두어야한다면 암호에 변수를 사용하고 passing that in on the CLI을 사용하거나 environment variable을 사용하는 것이 좋습니다.
동일하게 암호를 해독하는 데 aws_kms_secret
data source을 사용할 수 있습니다. Terraform에서 다음
$ 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
그러나 재미있는 점은 다음과 같습니다. 키 ID와 함께 암호화 된 암호를 RDS에 전달하고 RDS가 해당 유스 케이스에 대해 투명하게 암호 해독 할 수 없으 리라고 기대합니까? – derFunk