비공개 IP 사용 알아보기

이 페이지에서는 Cloud SQL에서 비공개 IP를 사용하는 방법을 설명합니다. Cloud SQL 인스턴스에서 비공개 IP를 사용하도록 구성하는 방법에 대한 단계별 안내는 비공개 IP 구성을 참조하세요.

Cloud SQL 네트워킹을 위한 Terraform 솔루션은 간소화된 네트워킹 솔루션을 참조하세요.

개요

Cloud SQL 인스턴스에서 비공개 IP를 사용하도록 구성하려면 비공개 서비스 액세스가 필요합니다. 비공개 서비스 액세스를 사용하면 VPC 네트워크기본 Google 서비스 제작자의 VPC 네트워크 간에 비공개 연결을 만들 수 있습니다. Cloud SQL과 같이 서비스를 제공하는 Google 항목을 서비스 제작자라고 합니다. 각 Google 서비스는 리소스를 프로비저닝할 서브넷을 생성합니다. 서브넷의 IP 주소 범위는 일반적으로 서비스가 선택하는 /24 CIDR 블록이며 할당된 IP 주소 범위에 속합니다.

비공개 연결을 사용하면 인터넷을 통하지 않거나 외부 IP 주소를 사용하지 않고도 서비스에 연결할 수 있습니다. 따라서 비공개 IP의 네트워크 지연 시간은 공개 IP의 네트워크 지연 시간보다 짧습니다.

비공개 서비스 액세스를 사용하여 Cloud SQL 인스턴스에 연결합니다.

리전 간 비공개 IP에 연결할 수 있습니다. 프로젝트 간에 공유 VPC를 사용하여 연결할 수도 있습니다.

할당된 IP 주소 범위

비공개 IP가 있는 VPC 네트워크에서 Cloud SQL 인스턴스를 사용하려면 이 VPC의 비공개 서비스 액세스를 설정할 IP 주소 범위를 할당해야 합니다. Cloud SQL 인스턴스를 구성하기 위해 비공개 연결에 IP 주소 범위를 여러 개 할당할 수 있습니다. 비공개 IP용 Cloud SQL 인스턴스를 구성하면 VPC 네트워크와 할당된 IP 주소 범위를 모두 선택할 수 있습니다.

할당된 범위 크기

사용하려는 Cloud SQL 및 기타 Google 관리형 서비스에 대해 충분히 큰 IP 범위를 할당합니다. 각 항목에는 할당된 범위의 전용 IP 블록이 필요합니다. 최소 크기는 단일 /24 블록(주소 256개)이지만 권장 크기는 /16 블록(주소 65,536개)입니다.

IP 주소 범위를 할당할 때는 생성하려는 인스턴스 수를 고려해야 합니다.

서브넷 마스크 주소 사용 가능한 Cloud SQL 인스턴스
/2425650
/23512100
/221024200
/212048400
/204096800

Cloud SQL은 /24 CIDR 범위를 범위 단위로 사용하고 각 단위는 단일 리전의 Cloud SQL 인스턴스에만 사용될 수 있습니다. 예를 들어 서로 다른 리전 2개에 대해 Cloud SQL 인스턴스 2개를 만드는 경우에는 /24 CIDR 범위가 2개 이상 있어야 합니다.

또한 2021년 4월 1일 이전에 프로젝트에서 Cloud SQL을 사용하기 시작한 경우 Postgres 인스턴스는 MySQL 및 SQL Server 인스턴스와 동일한 범위 단위를 공유할 수 없으며 모든 리전에서 고유한 단위가 필요합니다. 최신 프로젝트에는 이 제한이 적용되지 않습니다.

네트워크의 비공개 서비스 액세스 설정

특정 VPC 네트워크에서 비공개 IP 연결을 처음 구성할 경우에는 일회성 절차를 수행하여 Cloud SQL의 비공개 서비스 액세스를 설정해야 합니다.

비공개 서비스 액세스를 설정한 후에는 비공개 IP를 사용하도록 구성된 Cloud SQL 인스턴스를 만들거나 기존 Cloud SQL 인스턴스에서 비공개 IP를 사용하도록 구성할 수 있습니다. 단계별 안내는 비공개 IP 구성을 참조하세요.

설정된 연결을 변경할 때마다 vpc-peerings도 업데이트해야 합니다.

비공개 IP 요구사항

비공개 IP를 사용하려면 네트워크 및 애플리케이션 환경이 다음 요구사항을 충족해야 합니다. 또한 비공개 IP를 처음 설정할 경우에는 추가 IAM 권한이 필요합니다.

애플리케이션 환경 요구사항

  • GKE에서 연결하는 경우 VPC 기반 클러스터에서 GKE 1.8 이상을 실행해야 합니다.

API 및 IAM 요구사항

  • 프로젝트에 Service Networking API를 사용 설정해야 합니다.
  • 공유 VPC 네트워크를 사용할 경우 호스트 프로젝트에도 Service Networking API를 사용 설정해야 합니다.

  • 비공개 서비스 액세스 연결을 관리하려면 사용자에게 다음 IAM 권한이 있어야 합니다. 사용자에게 필요한 권한이 없으면 권한 부족 오류가 발생할 수 있습니다.
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    또한 공유 VPC 네트워크를 사용하는 경우 동일한 사용자를 호스트 프로젝트에 추가하고 동일한 권한을 할당해야 합니다.

예시

다음 예시에서 고객 VPC 네트워크는 Google 서비스에 10.240.0.0/16 IP 주소 범위를 할당하고 이 할당 범위를 사용하는 비공개 연결을 설정했습니다. 각 Google 서비스(예: Cloud SQL)는 할당된 블록에서 서브넷을 만들어 Cloud SQL 인스턴스와 같은 지정된 리전에서 새 리소스를 프로비저닝합니다.

비공개 IP 구성의 다이어그램 개요.

  • 비공개 연결에 10.240.0.0/16 할당 범위가 지정되었습니다. Google 서비스는 이 할당 범위에서 새 리소스를 프로비저닝할 서브넷을 만들 수 있습니다.
  • 비공개 연결의 Google 서비스 측에서 Google은 고객을 위한 프로젝트를 생성합니다. 이 프로젝트는 격리되어 있으므로 다른 고객이 이를 공유할 수 없으며 해당 고객에게는 고객이 프로비저닝한 리소스 요금만 청구됩니다.
  • 각 Google 서비스는 리소스를 프로비저닝할 서브넷을 생성합니다. 서브넷의 IP 주소 범위는 일반적으로 서비스가 선택하는 /24 CIDR 블록이며 할당된 IP 주소 범위에 속합니다. 서비스 제작자의 서브넷을 수정할 수 없습니다. 서비스는 해당 서비스가 이전에 만든 기존의 리전 서브넷에 새 리소스를 프로비저닝하고 서브넷이 가득 차면 같은 리전에 새 서브넷을 만듭니다.
  • 고객 네트워크의 VM 인스턴스는 서비스가 지원되는 모든 리전의 서비스 리소스에 액세스할 수 있습니다. 일부 서비스는 리전 간 통신을 지원하지 않을 수도 있습니다. 자세한 내용은 관련 서비스의 문서를 참조하세요.
  • VM 인스턴스가 다른 리전의 리소스와 통신하는 리전 간 트래픽에는 여전히 아웃바운드 데이터 전송 비용이 적용됩니다.
  • Cloud SQL 인스턴스에는 IP 주소 10.240.0.2가 할당됩니다. 고객 VPC 네트워크에서 대상이 10.240.0.2인 요청은 서비스 제작자의 네트워크를 통해 비공개 연결에 라우팅됩니다. 서비스 네트워크에 연결되면 서비스 네트워크에는 올바른 리소스에 요청을 전송하는 경로가 포함됩니다.
  • VPC 네트워크 간 트래픽은 공개 인터넷을 통하지 않고 Google 네트워크 내부에서 이동합니다.

네트워크 문제

Cloud SQL은 각 리전에 대해 비공개 서비스 액세스 IP 범위에서 /24 서브넷을 할당합니다. 예를 들어 MySQL 인스턴스를 리전 2개에 배치하려면 할당된 IP 주소 범위에 /24 크기의 사용 가능한 서브넷이 최소 2개 이상 포함되어야 합니다.

비공개 IP 주소를 사용하는 Cloud SQL 인스턴스에 대한 연결은 RFC 1918 주소 범위에서 자동으로 승인됩니다. 이에 따라 모든 비공개 클라이언트가 Cloud SQL 인증 프록시를 통하지 않고 데이터베이스에 액세스할 수 있습니다.

Cloud SQL은 기본적으로 VPC에서 RFC 1918 이외의 서브넷 경로를 학습하지 않습니다. RFC 1918 이외의 경로를 내보내려면 네트워크 피어링을 Cloud SQL로 업데이트해야 합니다.

보안

비공개 서비스 액세스를 통한 트래픽에는 특정 수준의 암호화가 제공됩니다. 자세한 내용은 Google Cloud의 가상 네트워크 암호화 및 인증을 참조하세요.

비공개 IP를 사용하여 연결하도록 Cloud SQL 인증 프록시를 구성할 수 있습니다. 이 프록시는 IAM 사용자 인증 정보를 사용한 인증과 순환식 SSL/TLS 인증서를 사용한 엔드 투 엔드 암호화를 제공합니다.

보안 요구사항에 따라 개발자가 관리하는 자체 관리형 SSL/TLS 인증서가 필요한 경우 SSL/TLS 구성의 안내를 참조하세요.

비공개 IP 주소를 사용하여 각 인스턴스에 하나의 VPC 네트워크를 만들면 '기본' VPC 네트워크에 모든 인스턴스를 넣는 것보다 네트워크 격리가 향상됩니다.

여러 VPC 연결

Cloud SQL은 비공개 서비스 액세스를 통해 비공개 IP 주소를 지원합니다. Cloud SQL 인스턴스를 만들 때 Cloud SQL은 Cloud SQL VPC라고 하는 자체 virtual private cloud(VPC) 내에 인스턴스를 만듭니다. 비공개 IP를 사용 설정하려면 Cloud SQL VPC와 VPC 네트워크 간에 피어링 연결을 설정해야 합니다. 이렇게 하면 VPC 네트워크의 리소스가 Cloud SQL VPC 네트워크에 있는 Cloud SQL 리소스의 내부 IP 주소에 액세스할 수 있습니다.

Cloud SQL은 VPC 네트워크 피어링을 사용하여 비공개 서비스 액세스를 내부적으로 구현하므로 같은 프로젝트나 조직에 속하는지 여부에 관계없이 내부 IP 주소를 VPC 네트워크 두 개에 연결할 수 있습니다. 하지만 VPC 네트워크 피어링은 전환되지 않으므로 직접 피어링된 두 VPC 간의 경로만 브로드캐스트합니다. 추가 VPC가 있으면 원래 VPC로 설정된 연결을 사용하여 Cloud SQL 리소스에 액세스할 수 없습니다.

이 제한을 완화하고 비공개 IP 주소를 사용하여 Cloud SQL 인스턴스를 여러 VPC에 연결하려면 다음 연결 옵션을 사용하면 됩니다.

  • 커스텀 경로 공지를 사용하여 연결
  • 중간 프록시(SOCKS5)를 사용하여 연결
  • Cloud SQL 인증 프록시를 서비스로 사용하여 연결

여러 VPC를 연결하는 방법에 대한 자세한 내용은 여러 VPC에 인스턴스 연결을 참조하세요.

비공개 IP 주제 빠른 참조

비공개 IP를 사용하여 Cloud SQL 인스턴스를 관리하는 경우는 다음 주제가 중요할 수 있습니다.

주제 토론
공유 VPC 네트워크 공유 VPC 네트워크에서 비공개 IP 주소로 Cloud SQL 인스턴스를 만들 수 있습니다. 하지만 공유 VPC 네트워크의 비공개 IP 주소를 기존 Cloud SQL 인스턴스에 할당할 수 없습니다.
리전 리전 간 비공개 IP를 통해 연결할 수 있습니다.
이전 네트워크 기존 네트워크에서는 Cloud SQL 인스턴스의 비공개 IP에 연결할 수 없습니다. 기존 네트워크는 VPC 네트워크 피어링이나 비공개 서비스 액세스를 지원하지 않습니다.
비공개 IP 삭제 Cloud SQL 인스턴스에서 비공개 IP를 사용하도록 구성한 후에는 이 인스턴스에서 비공개 IP 기능을 삭제할 수 없습니다.
공개 IP와 비공개 IP 공개 IP와 비공개 IP를 모두 사용하여 동일한 Cloud SQL 인스턴스에 연결할 수 없습니다. 한 연결 방법은 다른 연결 방법에 영향을 주지 않습니다.
기존 Cloud SQL 인스턴스 인스턴스를 만들 때 인스턴스에서 비공개 IP를 사용하도록 구성할 수 있습니다. 또한 기존 인스턴스에서 비공개 IP를 사용하도록 구성할 수 있습니다. 기존 인스턴스에서 비공개 IP를 사용하도록 구성하거나 인스턴스가 연결된 네트워크를 변경하면 인스턴스가 다시 시작되어 다운타임이 몇 분 동안 발생합니다.
고정 IP 주소 공개 및 비공개 IP 주소의 경우 Cloud SQL 인스턴스의 수신 주소는 고정입니다. 변경되지 않습니다. 항상 고정인 외부 서버 복제본의 발신 공개 IP 주소를 제외하고 발신 주소가 항상 고정인 것은 아닙니다.
복제본 복제본은 기본 인스턴스로부터 비공개 IP 상태를 상속받습니다. 복제본에서 직접 비공개 IP를 구성할 수는 없습니다. 비공개 IP 주소를 사용하여 복제본에 연결하는 경우 복제본의 추가 VPC 비공개 연결을 만들 필요가 없습니다. 기본 인스턴스에서 상속되기 때문입니다.
Cloud SQL 인증 프록시 비공개 IP를 사용하여 Cloud SQL 인스턴스에 연결하려면 Cloud SQL 인증 프록시가 인스턴스와 동일한 VPC 네트워크에 액세스할 수 있는 리소스에 있어야 합니다. 인스턴스에 두 가지 IP 유형이 모두 사용 설정되면 Cloud SQL 인증 프록시는 기본적으로 공개 IP를 사용합니다. 비공개 IP가 사용되도록 하려면 -ip_address_types=PRIVATE 플래그를 Cloud SQL 인증 프록시에 전달해야 합니다. 자세히 알아보기
서버리스 VPC 액세스 App Engine 표준 환경, Cloud Run, Cloud Functions와 같은 서버리스 소스에서 연결하기 위해 애플리케이션 또는 함수가 Cloud SQL 인증 프록시 없이 서버리스 VPC 액세스를 통해 인스턴스에 직접 연결합니다.
VPC 네트워크 피어링 비공개 서비스 액세스를 사용하는 연결에는 VPC 네트워크 피어링이 필요합니다. 하지만 VPC 네트워크 피어링은 Google Cloud 내부 피어링이므로 개발자가 이를 명시적으로 만들지 않습니다. 비공개 서비스 액세스 연결을 만든 후에는 Google Cloud 콘솔의 VPC 네트워크 피어링 페이지에서 기본 VPC 네트워크 피어링을 확인할 수 있으나 비공개 연결을 삭제하려는 경우가 아니라면 이를 삭제하지 마세요.

VPC 네트워크 피어링 자세히 알아보기

VPC 서비스 제어 VPC 서비스 제어는 데이터 무단 반출 위험을 줄일 수 있습니다. VPC 서비스 제어를 사용하면 Cloud SQL 인스턴스 주위에 경계를 만듭니다. VPC 서비스 제어는 경계 내부의 리소스에 대한 외부 액세스를 제한합니다. 경계 내의 클라이언트와 리소스만 서로 상호작용할 수 있습니다. 자세한 내용은 VPC 서비스 제어 개요를 참조하세요. VPC 서비스 제어 사용 시 Cloud SQL 제한사항도 참조하세요. Cloud SQL에서 VPC 서비스 제어를 사용하려면 VPC 서비스 제어 구성을 참조하세요.
임시 피어링 직접 피어링된 네트워크만 통신할 수 있습니다. 전환 피어링은 지원되지 않습니다. 즉, VPC 네트워크 N1이 N2 및 N3과 피어링되었지만 N2와 N3이 직접 연결되지 않은 경우 VPC 네트워크 N2는 VPC 네트워크 피어링을 통해 VPC 네트워크 N3과 통신할 수 없습니다.

공유 VPC 네트워크를 사용하여 한 프로젝트의 클라이언트를 여러 프로젝트의 Cloud SQL 인스턴스에 연결할 수 있습니다.

Cloud SQL 인스턴스 이동 Cloud SQL 인스턴스는 자신이 있는 프로젝트에서 소유한 네트워크 사이에서만 이동할 수 있습니다. 또한 Cloud SQL 인스턴스는 프로젝트 사이에서 이동할 수 없을 뿐더러 여러 프로젝트에서 호스팅된 네트워크 사이에서도 이동할 수 없습니다.

다음 단계