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

Cloud SQL의 IP 설정과 허용 네트워크를 점검하고 필요한 클라이언트만 연결할 수 있도록 구성합니다.

설명

Cloud SQL의 IP 설정은 공인 IP 사용 여부와 직접 연결을 허용할 네트워크를 결정합니다. 허용 네트워크가 지나치게 넓으면 연결할 필요가 없는 클라이언트도 데이터베이스에 접근을 시도할 수 있습니다. 특히 0.0.0.0/0은 전체 IPv4 주소 범위를 포함하므로 필요한 클라이언트만 허용하는 데 적합하지 않습니다.

공인 IP 사용, 네트워크 연결 허용 및 데이터베이스 인증은 별개의 제어입니다. 허용 네트워크는 직접 IP 연결에 적용되며, Cloud SQL Auth Proxy는 허용 네트워크 목록 없이도 IAM 권한을 확인한 연결을 제공할 수 있습니다. IP 설정이나 허용 네트워크가 생략되어 있다면 연결 방식과 운영 인스턴스의 설정을 함께 확인해야 합니다.

잠재적 영향

  • 실제 네트워크 설정이 불필요한 외부 연결을 허용하면 원치 않는 클라이언트가 데이터베이스 인증을 시도할 수 있습니다.
  • 인증이나 데이터베이스 권한도 부적절하면 데이터 유출이나 변경으로 이어질 수 있습니다. 공인 IP가 있다는 사실만으로 데이터 접근 권한까지 부여되지는 않습니다.
  • 잘못된 주소 범위나 연결 방식에 맞지 않는 설정은 정상적인 애플리케이션의 연결을 막거나 의도한 접근 범위를 벗어나게 할 수 있습니다.

해결 방법

  • 필요한 사설 또는 공개 네트워크 경로를 정하고, 그 경로에서 인증된 커넥터를 사용할지 직접 연결할지 선택하세요. 커넥터도 사설 IP를 사용할 수 있습니다. 공인 IP가 필요하지 않다면 사설 연결 경로를 먼저 마련한 후 비활성화하세요.
  • 직접 연결에는 실제로 필요한 클라이언트 주소만 등록하세요. 선택한 연결 방식에 적용되는 허용 네트워크 규칙을 확인하고 데이터베이스 인증, 권한 및 TLS를 함께 점검하세요.
  • settings.ip_configuration을 명시하고 0.0.0.0/0과 같은 과도한 허용 범위를 제거하세요. 배포 후 실제 설정을 검증하고 애플리케이션의 정상 연결을 시험하세요.

IP 설정 예시

다음은 IP 설정을 검토하기 위한 불완전한 예시입니다. resource_name, 프로젝트 및 서비스 계정 파일 경로는 환경에 맞게 준비해야 합니다. 문자열 0.0.0.0은 전체 IPv4 대역을 나타내는 CIDR 0.0.0.0/0과 다릅니다. 예시의 주소나 네트워크 이름을 그대로 신뢰할 수 있는 클라이언트 정보로 사용해서는 안 됩니다.

연결 설정 검토

yaml
- name: sql_instance
  google.cloud.gcp_sql_instance:
    auth_kind: serviceaccount
    name: "{{ resource_name }}-2"
    project: test_project
    region: us-central1
    service_account_file: /tmp/auth.pem
    settings:
      ip_configuration:
        authorized_networks:
          - name: "google dns server"
            value: "0.0.0.0"
      tier: db-n1-standard-1
    state: present

- name: sql_instance2
  google.cloud.gcp_sql_instance:
    auth_kind: serviceaccount
    name: "{{ resource_name }}-2"
    project: test_project
    region: us-central1
    service_account_file: /tmp/auth.pem
    settings:
      ip_configuration:
        ipv4_enabled: yes
      tier: db-n1-standard-1
    state: present

단일 주소 지정

yaml
- name: sql_instance
  google.cloud.gcp_sql_instance:
    auth_kind: serviceaccount
    name: "{{ resource_name }}-2"
    project: test_project
    region: us-central1
    service_account_file: /tmp/auth.pem
    settings:
      ip_configuration:
        authorized_networks:
          - name: app-admin-host
            value: 8.8.8.8/32
      tier: db-n1-standard-1
    state: present

설명:

  • 연결 설정 검토: 첫 작업의 value: "0.0.0.0"은 실제 클라이언트 주소에 맞게 수정해야 합니다. 두 번째 작업은 허용 네트워크 없이 ipv4_enabled: yes를 지정합니다. 필요한 연결 방식과 인증 구성을 확인해야 하며, 이 설정만으로 누구나 직접 연결할 수 있다는 뜻은 아닙니다.
  • 단일 주소 지정: 8.8.8.8/32는 Google Public DNS 주소 한 개를 가리킵니다. app-admin-host라는 이름을 붙여도 조직의 관리 호스트가 되지는 않습니다. 실제 클라이언트의 주소를 확인하여 구성하세요.

참조