공개 접근 설정을 확인해야 하는 RDS 구성

RDS의 공개 주소가 필요한지 확인하고 불필요한 공개 접근을 끄기 전에 필요한 프라이빗 연결을 준비하세요.

설명

RDS의 publicly_accessible은 인스턴스의 공개 주소 사용을 제어합니다. 공개 접근이 활성화되어 있고 서브넷 라우팅과 보안 그룹도 외부 연결을 허용하면 인터넷에서 데이터베이스 연결을 시도할 수 있습니다. 실제 데이터 접근에는 데이터베이스 인증과 권한도 필요합니다.

내부 연결만 필요한 데이터베이스는 공개 주소를 사용하지 않도록 구성하고, 필요한 애플리케이션과 관리 경로만 허용해야 합니다.

잠재적 영향

  • 데이터베이스 접근이 필요 없는 외부 클라이언트도 데이터베이스 연결을 시도할 수 있는 경로가 생깁니다.
  • 유출된 자격 증명이나 과도한 권한 등이 함께 있으면 무단 데이터 조회·변경 위험이 커질 수 있습니다. 공개 주소만으로 인증 없이 데이터에 접근할 수 있는 것은 아닙니다.

해결 방법

  • 내부용 인스턴스에는 publicly_accessible = false를 명시하세요. 모듈을 사용한다면 입력값이 실제 인스턴스 설정에 반영되는지 확인하세요.
  • 직접적인 인터넷 경로가 없는 서브넷을 사용하고 보안 그룹과 네트워크 ACL로 필요한 클라이언트만 허용하세요. 외부 사설망에는 VPN이나 Direct Connect 등 필요한 프라이빗 연결을 준비하고 DNS와 인증을 시험하세요.
  • 공개 접근 변경은 apply_immediately와 관계없이 즉시 적용되며 DB 자체의 중단은 발생하지 않지만, 공개 경로를 쓰던 클라이언트는 연결을 잃을 수 있습니다. 대체 경로를 먼저 확인하고 terraform plan에서 함께 적용되는 다른 변경의 영향도 검토하세요.

예시

아래 부분 예제는 같은 리소스의 공개 접근 설정을 바꿉니다. 지원되는 db_instance_class, 같은 VPC의 DB 서브넷 그룹과 필요한 보안 그룹 ID 변수를 정의하세요. 라우팅과 접근 규칙을 구성하고 RDS가 관리하는 비밀번호와 Terraform 상태에 대한 접근도 보호해야 합니다.

변경 전

hcl
resource "aws_db_instance" "public_instance" {
  allocated_storage    = 20
  storage_type         = "gp2"
  engine               = "mysql"
  instance_class       = var.db_instance_class
  db_name              = "mydb"
  username             = "foo"
  manage_master_user_password = true
  db_subnet_group_name  = var.db_subnet_group_name
  vpc_security_group_ids = var.db_security_group_ids
  publicly_accessible  = true
}

변경 후

hcl
resource "aws_db_instance" "public_instance" {
  allocated_storage    = 20
  storage_type         = "gp2"
  engine               = "mysql"
  instance_class       = var.db_instance_class
  db_name              = "mydb"
  username             = "foo"
  manage_master_user_password = true
  db_subnet_group_name  = var.db_subnet_group_name
  vpc_security_group_ids = var.db_security_group_ids
  publicly_accessible  = false
}

설명:

  • 변경 전: 공개 주소를 사용하도록 설정합니다. 실제 외부 연결에는 라우팅과 보안 그룹의 허용도 필요합니다.
  • 변경 후: 공개 주소 사용을 비활성화합니다. 필요한 클라이언트가 프라이빗 경로로 연결되고 올바른 인증과 권한을 사용하는지 확인하세요.

참조