네트워크 접근 설정을 확인해야 하는 Google Cloud SQL 인스턴스

Cloud SQL의 연결 경로와 허용된 클라이언트 주소를 확인하고 불필요한 공개 접근을 제한하세요.

설명

Cloud SQL에 공개 IP로 직접 연결할 수 있는 주소 범위가 지나치게 넓으면 데이터베이스에 접속할 필요가 없는 클라이언트의 연결 시도를 허용할 수 있습니다. authorized_networks의 0.0.0.0/0은 모든 IPv4 주소를 포함합니다. 네트워크 연결이 허용되어도 데이터베이스 인증과 권한은 별도로 필요합니다.

공개 IP에 허용 네트워크가 없다고 모든 인터넷 주소의 직접 연결이 허용되는 것은 아닙니다. Cloud SQL Auth Proxy와 커넥터는 적절한 인증을 거쳐 허용 네트워크 등록 없이도 연결할 수 있으며, 공개 IP와 비공개 IP 경로 모두에서 사용할 수 있습니다.

잠재적 영향

  • 불필요하게 넓은 연결 범위는 자격 증명 공격이나 취약점 악용을 시도할 수 있는 대상을 늘릴 수 있습니다.
  • 허용된 클라이언트가 유효한 인증 정보와 데이터베이스 권한을 가진 경우 의도하지 않은 데이터 조회나 변경으로 이어질 수 있습니다.

해결 방법

  • 직접 공개 연결이 필요하다면 authorized_networks에 필요한 실제 클라이언트 주소만 허용하고 불필요한 전체 주소 범위를 제거하세요.
  • 비공개 접근만 필요하다면 비공개 IP 또는 Private Service Connect 경로를 먼저 준비하고 시험한 뒤 공개 IP를 비활성화하세요. IP 연결 경로와 Proxy·커넥터 사용 여부는 구분해서 결정하세요.
  • IAM과 데이터베이스 인증·권한을 점검하고 필요한 연결은 성공하며 허용하지 않은 직접 연결은 차단되는지 확인하세요. ipv4_enabled를 생략해도 공개 IP가 꺼지는 것은 아닙니다.

예시

사용할 공급자와 데이터베이스 버전의 지원 여부를 확인하세요. 변경 후 예시는 별도로 정의한 google_compute_network.private와 사설 서비스 액세스 연결이 필요합니다. 기존 인스턴스에 적용할 때는 이름 변경을 포함한 Terraform 계획과 연결 전환을 검토하세요.

변경 전

hcl
resource "google_sql_database_instance" "public_sql_instance" {
  name             = "postgres-instance-2"
  database_version = "POSTGRES_11"

  settings {
    tier = "db-f1-micro"

    ip_configuration {
      authorized_networks {
        name  = "pub-network"
        value = "0.0.0.0/0"
      }
    }
  }
}

모든 IPv4 주소를 공개 IP 직접 연결의 허용 범위에 포함합니다. 데이터베이스 인증을 생략하는 설정은 아닙니다.

변경 후

hcl
resource "google_sql_database_instance" "private_sql_instance" {
  name             = "private-instance-1"
  database_version = "POSTGRES_11"

  settings {
    tier = "db-f1-micro"

    ip_configuration {
      ipv4_enabled    = false
      private_network = google_compute_network.private.id
    }
  }
}

공개 IPv4를 비활성화하고 VPC 네트워크를 지정합니다. 이 설정과 함께 필요한 사설 연결을 구성하고 클라이언트의 연결을 검증해야 합니다.

참조