EC2-Classic DB 보안 그룹에서 모든 IPv4 주소 허용

모든 IPv4 출처를 허용하는 DB 보안 그룹은 불필요한 연결 시도를 허용할 수 있습니다. 현재 환경에서는 지원되는 VPC 보안 그룹으로 필요한 출처와 데이터베이스 포트만 허용하세요.

설명

DB 보안 그룹의 0.0.0.0/0 허용 범위에는 모든 IPv4 출처가 포함됩니다. 이 규칙이 데이터베이스의 실제 연결 경로에 적용되면, 승인되지 않은 출처에서도 연결을 시도할 수 있습니다. 주소 허용만으로 데이터베이스 인증이나 데이터 접근 권한이 부여되지는 않습니다.

aws_db_security_group은 종료된 EC2-Classic용 리소스이며 Terraform AWS 공급자 5.0에서 제거되었습니다. 현재 VPC의 RDS 접근 제어에는 VPC 보안 그룹과 aws_db_instance.vpc_security_group_ids를 사용하세요.

잠재적 영향

  • 광범위한 출처에서 데이터베이스 포트로 접근할 수 있으면 불필요한 로그인 시도나 취약점 악용 시도에 노출될 수 있습니다.
  • 약한 자격 증명이나 과도한 데이터베이스 권한이 함께 존재하면 무단 데이터 접근이나 변경의 위험이 커집니다.

해결 방법

  • 지원되는 VPC 보안 그룹을 RDS 인스턴스에 연결하고, 필요한 데이터베이스 포트에 대해 승인된 애플리케이션 보안 그룹이나 관리 경로만 허용하세요. 제거된 리소스를 새로 배포하지 마세요.
  • CIDR을 사용할 경우 실제 클라이언트 주소에 필요한 최소 범위를 지정하세요. 사설 주소라는 이유만으로 신뢰하지 말고 해당 범위에서 연결할 수 있는 시스템을 확인하세요.
  • 라우팅, 보안 그룹 연결과 데이터베이스 인증을 함께 검토하세요. 리소스 종류를 바꾸는 작업은 단순한 규칙 수정과 다르므로 terraform plan에서 생성·삭제와 의존 관계를 확인하고, 변경 후 필요한 접속을 시험하세요.

예시

변경 전은 현재 공급자에서 지원하지 않는 과거 리소스입니다. 변경 후는 VPC용 구성 일부로, vpc_id와 실제 데이터베이스 포트인 db_port를 별도로 정의해야 합니다. 10.0.0.0/25는 필요한 클라이언트 범위로 바꾸고, 생성한 그룹을 RDS 인스턴스의 vpc_security_group_ids에 연결하세요.

변경 전

hcl
resource "aws_db_security_group" "public_db_sg" {
  name = "rds_sg"

  ingress {
    cidr = "0.0.0.0/0"
  }
}

변경 후

hcl
resource "aws_security_group" "db" {
  name   = "rds_sg"
  vpc_id = var.vpc_id
}

resource "aws_vpc_security_group_ingress_rule" "db_client" {
  security_group_id = aws_security_group.db.id
  cidr_ipv4         = "10.0.0.0/25"
  ip_protocol       = "tcp"
  from_port         = var.db_port
  to_port           = var.db_port
}

설명: 새 구성은 특정 IPv4 범위에서 필요한 TCP 포트로의 연결만 허용합니다. 실제 마이그레이션에서는 리소스 상태와 연결 경로를 확인하고, 다른 보안 그룹이나 규칙이 더 넓은 접근을 허용하지 않는지도 검토하세요.

참조