Terraform으로 RDS를 만들 때의 비밀번호는 도대체 어떻게 처리해야 합니까?

Terraform으로 RDS 인스턴스를 만들 기회가 있습니다.
이때 DB의 비밀번호를 어떻게 안전하게 설정해야 할지 고민이 많았기 때문에 결과를 정리해 보겠습니다.🙌

결론

  • tfstate 파일 자체를 confidential로 간주한다
  • 템플릿에서 끈적끈적한 비밀번호를 사용하지 않고 변수로 외부에서 입력
  • 해설


    RDS 인스턴스의 템플릿을 준비합니다.
    https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance
    rds.tf
    variable "rds_password" {}
    
    resource "aws_db_instance" "default" {
      allocated_storage        = 20
      storage_type             = "gp2"
      engine                   = "postgres"
      engine_version           = "12.3"
      instance_class           = "db.t2.micro"
      name                     = "rails_db_instance"
      username                 = "admin"
      password                 = var.rds_password
      port                     = 5432
      availability_zone        = "ap-northeast-1a"
      db_subnet_group_name     = aws_db_subnet_group.default.id
      publicly_accessible      = true
      vpc_security_group_ids   = [aws_security_group.rds.id]
    }
    
    간단하게 외부에서 비밀번호var.rds_password를 입력하세요.auto.tfvars 파일에 기술하는 것을 추천합니다.
    credential.auto.tfvars
    rds_password  = "k3jehufeio2938eurfjkd2ujefgy2"
    
    .gitignore에 추가하는 것을 잊지 마세요!!
    주의해야 할 것은 이렇게 하면 암호가 템플릿에서 사라지고 tfstate 파일에는 명문 형식으로 암호가 저장된다는 것이다.
    이것은 Terraform 정부도 인식한 것으로 최선의 실천으로 추천한다. "tfstate 파일 자체를 confidential로 처리하는 것을 추천한다."🧐
    CI에서 시작할 때는 환경 변수를 사용합니다.
    https://www.terraform.io/docs/configuration/variables.html#environment-variables
    Terraform은 TF_VAR_의 prefix에서 시작하는 환경 변수를 자동으로 읽을 수 있습니다.상기의 예를 참조하다TF_VAR_rds_password의 값을 CI 도구로 설정하면 문제 없이 읽을 수 있습니다🏄‍♂️

    잡담

  • 팀의 상황 등으로 인해state 파일에 비밀번호를 명문으로 저장하고 싶지 않은 경우 적절한 비밀번호(예를 들어 "password")를 적어 실례를 만들어 DB에 연결하고 지령에서 진짜 비밀번호
  • 로 변경하는 것이 좋다.
  • ECS에서 사용할 때는 이 암호를 System Manager의 매개변수 저장 장치 등에 안전하게 저장하고 컨테이너에서 참조하는 것이 좋습니다.
  • 참고 자료

  • https://techlife.cookpad.com/entry/2020/02/28/120000
  • 좋은 웹페이지 즐겨찾기