Cloud SQL 프록시 소개

이 페이지에서는 Cloud SQL 프록시에 대한 기본적인 정보를 소개하고 프록시 옵션에 대해 설명합니다.

프록시의 기능

Cloud SQL 프록시승인된 네트워크 또는 SSL 구성 없이 인스턴스에 대한 안전한 액세스를 제공합니다.

Cloud SQL 프록시를 사용하여 Cloud SQL 인스턴스에 액세스하면 다음과 같은 이점이 있습니다.

  • 보안 연결: 프록시는 128비트 AES 암호화를 지원하는 TLS 1.2를 사용하여 데이터베이스와 주고받는 트래픽을 자동으로 암호화합니다. SSL 인증서는 클라이언트 및 서버 ID를 확인하는 데 사용됩니다.
  • 연결 관리 간소화: 프록시가 Cloud SQL 인증을 처리하므로 고정 IP 주소를 제공할 필요가 없습니다.

프록시는 새로운 연결 경로를 제공하지 않고 기존 IP 연결을 사용합니다. 비공개 IP를 사용하여 Cloud SQL 인스턴스에 연결하려면 프록시가 인스턴스와 동일한 VPC 네트워크에 액세스할 수 있는 리소스에 있어야 합니다.

Cloud SQL 프록시 작동 방식

Cloud SQL 프록시는 로컬 환경에서 실행되는 프록시라고 하는 로컬 클라이언트를 사용하여 작동합니다. 애플리케이션은 데이터베이스에서 사용하는 표준 데이터베이스 프로토콜을 사용하여 프록시와 통신합니다. 프록시는 보안 터널을 사용하여 서버에서 실행 중인 컴패니언 프로세스와 통신합니다.

프록시는 모든 포트에서 리슨할 수 있지만 포트 3307 Cloud SQL 인스턴스로 나가는 연결만 만듭니다. 아웃바운드 방화벽 정책이 있는 경우 Cloud SQL 인스턴스의 IP에서 포트 3307에 연결할 수 있는지 확인합니다.

다음 다이어그램은 프록시가 Cloud SQL에 연결되는 방식을 보여줍니다.

클라이언트 소프트웨어에서 SQL 인스턴스로 연결하는 프록시 다이어그램

Cloud SQL 프록시 요구사항

프록시를 사용하려면 다음 요구사항을 충족해야 합니다.

  • Cloud SQL Admin API를 사용 설정해야 합니다.
  • 프록시에 Google Cloud 인증 사용자 인증 정보를 제공해야 합니다.
  • 프록시에 유효한 데이터베이스 사용자 계정과 비밀번호를 지정해야 합니다.
  • 인스턴스는 공개 IPv4 주소가 있거나 비공개 IP를 사용하도록 설정되어야 합니다.

    공개 IP 주소는 외부 주소에서 액세스 가능하지 않아도 됩니다. 따라서 공개 IP 주소를 승인된 네트워크 주소로 추가할 필요가 없습니다.

Cloud SQL 프록시 설치

Linux 64비트

  1. 프록시를 다운로드합니다.
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. 프록시를 실행 가능하도록 합니다.
    chmod +x cloud_sql_proxy
    

Linux 32비트

  1. 프록시를 다운로드합니다.
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. 프록시를 실행 가능하도록 합니다.
    chmod +x cloud_sql_proxy
    

macOS 64비트

  1. 프록시를 다운로드합니다.
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. 프록시를 실행 가능하도록 합니다.
    chmod +x cloud_sql_proxy
    

macOS 32비트

  1. 프록시를 다운로드합니다.
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. 프록시를 실행 가능하도록 합니다.
    chmod +x cloud_sql_proxy
    

Windows 64비트

https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe를 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 링크 저장을 선택하여 프록시를 다운로드합니다. 파일 이름을 cloud_sql_proxy.exe로 바꿉니다.

Windows 32비트

https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe를 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 링크 저장을 선택하여 프록시를 다운로드합니다. 파일 이름을 cloud_sql_proxy.exe로 바꿉니다.
사용 중인 운영체제가 여기에 포함되어 있지 않으면 소스에서 프록시를 컴파일할 수도 있습니다.

프록시 시작 옵션

프록시를 시작할 때 프록시에 다음 정보를 제공합니다.

  • 연결을 설정할 Cloud SQL 인스턴스
  • Cloud SQL로 전송될 애플리케이션의 데이터를 리슨할 위치
  • Cloud SQL에 애플리케이션을 인증하는 데 사용할 사용자 인증 정보가 있는 위치
  • 필요한 경우 사용할 IP 주소 유형

프록시 시작 옵션을 사용해 수신 대기 위치를 TCP 포트 또는 Unix 소켓으로 결정합니다. Unix 소켓에서 수신 대기하는 경우 선택한 위치(일반적으로 /cloudsql/ 디렉터리)에 소켓이 생성됩니다. TCP의 경우 프록시는 기본적으로 localhost에서 리슨합니다.

시작 옵션의 전체 목록을 보려면 인수 --helpcloud_sql_proxy 실행 파일을 실행합니다.

로컬 환경에서는 모든 위치에 프록시를 설치할 수 있습니다. 프록시 바이너리의 위치는 애플리케이션의 데이터 리슨 위치에 영향을 미치지 않습니다.

인증에 서비스 계정 사용

프록시에 연결하려면 인증이 필요합니다. 서비스 계정을 이 용도로 활용하면 프록시 전용 사용자 인증 정보 파일을 만들 수 있고, 파일이 실행 중인 한 명시적이고 영구적으로 프록시에 연결됩니다. 따라서 Compute Engine 인스턴스에서 실행되지 않는 프로덕션 인스턴스에는 서비스 계정을 사용하는 것이 좋습니다.

여러 컴퓨터에서 Cloud SQL 프록시를 호출해야 하는 경우 사용자 인증 정보 파일을 시스템 이미지에 복제할 수 있습니다.

이 방법을 사용하려면 사용자 인증 정보 파일을 만들고 관리해야 합니다. resourcemanager.projects.setIamPolicy 권한이 있는 사용자(예: 프로젝트 소유자)만 서비스 계정을 만들 수 있습니다. Google Cloud 사용자에게 이 권한이 없으면 다른 사람에게 서비스 계정을 대신 만들어 달라고 하거나 다른 프록시 인증 방법을 사용해야 합니다.

사용자 인증 정보 파일을 만드는 데 도움이 필요한 경우 서비스 계정 만들기를 참조하세요.

Cloud SQL 프록시 인증 옵션

Cloud SQL 프록시는 환경에 따라 다양한 인증 방법 대안을 제공합니다. 프록시는 다음의 각 항목을 순서대로 확인하여 첫 번째로 발견된 항목으로 인증을 시도합니다.

  1. credential_file 플래그로 제공된 사용자 인증 정보

    서비스 계정을 사용하여 연결된 JSON 파일을 만들어 다운로드하고 Cloud SQL 프록시를 시작할 때 -credential_file 플래그를 해당 파일 경로로 설정합니다. 서비스 계정에는 Cloud SQL 인스턴스를 사용하는 데 필요한 권한이 있어야 합니다.
  2. 액세스 토큰으로 제공된 사용자 인증 정보

    액세스 토큰을 만들고 Cloud SQL 프록시를 시작할 때 명령줄에서 -token 플래그를 사용하여 이 액세스 토큰을 제공합니다.
  3. 환경 변수로 제공된 사용자 인증 정보

    GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정용으로 생성된 json 키 파일의 경로로 설정할 수 있습니다.
  4. 인증된 Cloud SDK 클라이언트의 사용자 인증 정보

    Cloud SDK를 설치했고 이를 사용하여 Google Cloud에 인증한 경우 Cloud SQL 프록시에서 동일한 사용자 인증 정보를 사용할 수 있습니다. 이 방법은 특히 개발 환경을 준비하고 실행하는 데 유용합니다. 프로덕션 환경의 경우 다른 방법 중 하나를 사용하여 인증합니다.
  5. Compute Engine 인스턴스와 관련된 사용자 인증 정보

    Compute Engine 인스턴스에서 Cloud SQL에 연결하는 경우 프록시는 Compute Engine 인스턴스와 관련된 서비스 계정을 사용할 수 있습니다. 서비스 계정에 Cloud SQL 인스턴스를 사용하는 데 필요한 권한이 있는 경우 프록시가 성공적으로 인증됩니다.

    Compute Engine 인스턴스가 Cloud SQL 인스턴스와 동일한 프로젝트에 있는 경우 Compute Engine 인스턴스의 기본 서비스 계정에는 프록시를 인증하는 데 필요한 권한이 있습니다. 두 인스턴스가 서로 다른 프로젝트에 있는 경우 Compute Engine 인스턴스의 서비스 계정을 Cloud SQL 인스턴스가 포함된 프로젝트에 추가해야 합니다.

서비스 계정에 필요한 권한

서비스 계정을 사용하여 프록시 사용자 인증 정보를 제공하는 경우 충분한 권한을 부여해야 합니다. 세분화된 Identity Access and Management(IAM) 역할을 사용하여 Cloud SQL 권한을 관리하는 경우 서비스 계정에 cloudsql.instances.connect 권한이 있는 역할을 부여해야 합니다. 이 권한이 포함된 사전 정의된 Cloud SQL의 역할은 다음과 같습니다.

  • Cloud SQL 클라이언트
  • Cloud SQL 편집자
  • Cloud SQL 관리자

기존 프로젝트 역할(뷰어, 편집자, 소유자)을 사용하는 경우 서비스 계정에 최소한 편집자 역할이 있어야 합니다.

Cloud SQL 인스턴스 지정 옵션

연결하려는 인스턴스를 프록시에 알리는 방법은 다양합니다. 명시적인 방법도 있고, 암시적인 방법도 있습니다. 일부 구성에서는 프록시가 연결 요청을 기반으로 연결하기 때문에 연결하려는 인스턴스를 프록시에 미리 알릴 필요가 없습니다.

인스턴스 지정 옵션은 운영체제 및 환경에 따라 달라집니다.

옵션 장점 주의사항 및 요구사항 Linux/macOS
(Unix 소켓)
자바 Windows 참고
자동 인스턴스 검색 인스턴스를 지정할 필요가 없습니다. 기본 프로젝트의 모든 인스턴스에 소켓이 생성됩니다. 프록시 API 사용량이 증가합니다. Cloud SDK를 설치하여 인증받아야 하며 기본 프로젝트가 설정되어 있어야 합니다. 새 인스턴스를 추가하려면 프록시를 다시 시작해야 합니다. 지원됨 아니요 아니요 프로덕션 인스턴스에는 권장되지 않습니다.
프로젝트 검색 인스턴스를 지정할 필요가 없습니다. 지정된 프로젝트의 모든 인스턴스에 소켓이 생성됩니다. 프록시 API 사용량이 증가합니다. Cloud SDK를 설치하여 인증받아야 합니다. 새 인스턴스를 추가하려면 프록시를 다시 시작해야 합니다. 지원됨 아니요 아니요 -projects 매개변수를 사용합니다. 프로덕션 인스턴스에는 권장되지 않습니다.
프록시 호출 시 지정된 인스턴스 인스턴스 목록이 알려져 있고 정적입니다. 새 인스턴스를 추가하려면 프록시를 다시 시작해야 합니다. 지원됨 TCP 소켓에서 지원됨 TCP 소켓에서 지원됨 -instances 매개변수를 사용합니다. 여러 인스턴스의 경우 공백 없이 쉼표로 구분된 목록을 사용합니다. 자세히 알아보기
Compute Engine 메타데이터를 사용하여 지정된 인스턴스 프록시를 다시 시작하지 않고 메타데이터 값을 변경하여 인스턴스 목록을 업데이트할 수 있습니다. Compute Engine에서만 사용할 수 있습니다. 지원됨 TCP 소켓에서 지원됨 TCP 소켓에서 지원됨 -instances_metadata 플래그를 사용합니다. 자세히 알아보기

샘플 호출 및 연결 문자열을 참조하세요.

비공개 IP로 프록시 사용

비공개 IP를 사용하여 Cloud SQL 인스턴스에 연결하려면 프록시가 인스턴스와 동일한 VPC 네트워크에 액세스할 수 있는 리소스에 있어야 합니다.

프록시는 IP를 사용하여 Cloud SQL 인스턴스와의 연결을 설정합니다. 기본적으로 프록시는 공개 IPv4 주소를 사용하여 연결을 시도합니다. Cloud SQL 인스턴스에 비공개 IP만 있는 경우 프록시는 비공개 IP 주소를 사용하여 연결합니다.

인스턴스에 공개 및 비공개 IP가 모두 구성되어 있고 프록시에서 비공개 IP 주소를 사용하도록 하려는 경우 프록시를 시작할 때 다음 옵션을 제공해야 합니다.

-ip_address_types=PRIVATE

Cloud SQL 프록시 작업에 대한 팁

Cloud SQL 프록시 호출

모든 프록시 호출 예시는 백그라운드에서 프록시를 시작하므로 프롬프트가 반환됩니다. 출력이 다른 프로그램의 출력과 섞이지 않도록 프록시용 터미널을 확보하는 것이 좋습니다. 또한 프록시의 출력을 사용해 연결 문제를 진단할 수 있으므로 로그 파일로 캡처하는 것이 유용합니다. 백그라운드에서 프록시를 시작하지 않으면 출력이 리디렉션되지 않는 한 stdout으로 이동합니다.

/cloudsql을 프록시 소켓의 디렉터리로 사용할 필요는 없습니다. (이 디렉터리 이름은 App Engine 연결 문자열과의 차이를 최소화하기 위해 선택되었습니다.) 그러나 디렉터리 이름을 변경하는 경우에는 전체 길이를 최소로 유지해야 하는데, 이는 운영체제의 길이 제한이 적용되는 더 긴 문자열에 통합되기 때문입니다.

프록시를 사용하여 여러 인스턴스에 연결

하나의 로컬 프록시 클라이언트를 사용하여 여러 Cloud SQL 인스턴스에 연결할 수 있습니다. Unix 소켓과 TCP 중에 무엇을 사용하는지에 따라 연결 방법이 달라집니다.

Unix 소켓

프록시를 여러 인스턴스에 연결하려면 -instances 매개변수를 사용하여 인스턴스 연결 이름을 쉼표로 구분된 목록(공백 없음)으로 제공합니다. 프록시가 시작되면 각 인스턴스에 연결됩니다.

지정된 디렉터리에서 소켓을 사용하여 각 인스턴스에 연결합니다.

TCP

TCP를 사용하여 연결하는 경우 인스턴스로 연결하는 데 사용할 포트를 머신에 지정해야 하며 모든 인스턴스에는 고유한 포트가 있어야 합니다. sqlcmd 도구는 기본적으로 1433을 사용하지만 다른 포트를 지정하여 사용할 수 있습니다.

예를 들면 다음과 같습니다.

  # Start the proxy for two instances, each with its own port:

  ./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:1433,myProject:us-central1:myInstance2=tcp:1234

  # Connect to "myInstance" on port 1433, and "myInstance2" on port 1234

  sqlcmd -U myUser -S "127.0.0.1,1433"
  sqlcmd -U myUser -S "127.0.0.1,1234"

Cloud SQL 프록시를 최신 상태로 유지하기

Google에서는 종종 새 버전의 프록시를 출시합니다. Cloud SQL 프록시 GitHub 출시 페이지에서 현재 버전을 확인할 수 있습니다. Google 그룹스 Cloud SQL 공지 포럼에서 향후 출시될 프록시 정보를 확인할 수 있습니다.

API 사용량

Cloud SQL 프록시는 Cloud SQL Admin API에 요청을 보냅니다. 이러한 요청은 프로젝트의 API 할당량을 기준으로 합니다.

API 사용량은 프록시를 시작할 때 가장 높습니다. 특히 자동 인스턴스 검색 또는 -projects 매개변수를 사용하는 경우에도 마찬가지입니다. 실행 중인 프록시는 연결된 인스턴스별로 시간당 2개의 API 호출을 실행합니다.

Cloud SQL 프록시 매개변수 및 플래그

Cloud SQL 프록시는 시작될 때 여러 플래그와 매개변수를 받습니다. 이러한 옵션에 따라 Cloud SQL 프록시가 Cloud SQL과 통신하는 데 사용하는 소켓을 만드는 위치와 방법, 인증 방법이 결정됩니다.

프록시 옵션에 대해 도움이 필요한 경우 다음 정보를 참조하세요.

프록시 호출 및 sqlcmd 클라이언트 연결 문자열

예를 들어 myProject 프로젝트의 us-central1에 위치한 myInstance 인스턴스, SQL Server 사용자 myUser에 대한 명령어에 프록시 호출과 연결 문자열을 사용할 수 있습니다.

Cloud SQL 프록시 옵션 및 연결 문자열에 대한 자세한 내용은 Cloud SQL 프록시 GitHub 페이지를 참조하세요.

서비스 계정 만들기 및 키 파일 생성

서비스 계정을 만들려면 다음 안내를 따르세요.

서비스 계정을 사용하여 프록시 사용자 인증 정보를 제공하는 경우 충분한 권한을 부여해야 합니다. 세분화된 Identity Access and Management(IAM) 역할을 사용하여 Cloud SQL 권한을 관리하는 경우 서비스 계정에 cloudsql.instances.connect 권한이 있는 역할을 부여해야 합니다. 이 권한이 포함된 사전 정의된 Cloud SQL의 역할은 다음과 같습니다.

  • Cloud SQL 클라이언트
  • Cloud SQL 편집자
  • Cloud SQL 관리자

기존 프로젝트 역할(뷰어, 편집자, 소유자)을 사용하는 경우 서비스 계정에 최소한 편집자 역할이 있어야 합니다.

  1. Google Cloud Console의 서비스 계정 페이지로 이동합니다.

    서비스 계정 페이지로 이동

  2. Cloud SQL 인스턴스가 포함된 프로젝트를 선택합니다.
  3. 서비스 계정 만들기를 클릭합니다.
  4. 서비스 계정 만들기 대화상자에 서비스 계정을 설명하는 이름을 입력합니다.
  5. 역할에서 다음 중 하나를 선택합니다.
    • Cloud SQL > Cloud SQL 클라이언트
    • Cloud SQL > Cloud SQL 편집자
    • Cloud SQL > Cloud SQL 관리자

    또는 프로젝트 > 편집자를 선택하여 기본 편집자 역할을 사용할 수 있습니다. 하지만 편집자 역할에는 Google Cloud 전반에 대한 권한이 있습니다.

    이러한 역할이 표시되지 않으면 Google Cloud 사용자에게 resourcemanager.projects.setIamPolicy 권한이 없는 것일 수 있습니다. Google Cloud Console의 IAM 페이지로 이동하고 사용자 ID를 검색하여 권한을 확인할 수 있습니다.

  6. 서비스 계정 ID를 고유하고 알아볼 수 있는 값으로 변경합니다.
  7. 새 비공개 키 제공을 클릭하고 키 유형이 JSON인지 확인합니다.
  8. 만들기를 클릭합니다.

    비공개 키 파일이 머신에 다운로드됩니다. 파일을 다른 위치로 이동할 수 있습니다. 키 파일을 안전하게 보관하세요.

서비스 계정에 대한 자세한 내용은 인증 문서를 참조하세요.

프로덕션 환경에서 Cloud SQL 프록시 사용

프로덕션 환경에서 Cloud SQL 프록시를 사용하는 경우 프록시가 애플리케이션에 필요한 가용성을 제공하도록 몇 가지 단계를 수행할 수 있습니다.

Cloud SQL 프록시가 영구 서비스로 실행되는지 확인

프록시 프로세스가 중지되면 이를 통한 기존의 연결이 모두 끊어지고, 애플리케이션은 해당 프록시를 사용해 Cloud SQL 인스턴스로의 연결을 더 이상 만들 수 없게 됩니다. 이를 방지하려면 프록시를 영구 서비스로 실행하여 어떤 이유로 프록시가 종료되어도 자동으로 다시 시작되도록 해야 합니다. 이 작업은 systemd, upstart 또는 supervisor와 같은 서비스를 사용하여 수행할 수 있습니다. Windows 운영체제의 경우 프록시를 Windows 서비스로 실행합니다. 일반적으로 프록시에서 애플리케이션 프로세스와 업타임 요구사항이 동일한지 확인합니다.

애플리케이션에 필요한 Cloud SQL 프록시 사본 수

모든 애플리케이션 프로세스에 프록시 프로세스를 만들 필요는 없습니다. 여러 애플리케이션 프로세스가 하나의 프록시 프로세스를 공유할 수 있기 때문입니다. 워크스테이션 또는 가상 머신 1개당 하나의 프록시 클라이언트 프로세스를 실행합니다.

가상 머신에 자동 확장을 사용하는 경우 프록시가 가상 머신 구성에 포함되어 있는지 확인하여 새 가상 머신을 시작할 때마다 자체 프록시 프로세스를 보유하도록 합니다.

연결을 제한하거나 풀링하여 애플리케이션에 필요한 연결 수를 관리할 수 있습니다. 프록시는 새 연결 속도 또는 영구 연결 수에 제한을 두지 않습니다.

Cloud SQL 프록시 출력 축소

프록시 로그의 크기를 줄여야 하는 경우 프록시를 시작할 때 -verbose=false를 설정하면 됩니다. 하지만 이렇게 하면 연결 문제를 진단할 때 프록시 출력의 적합성이 떨어집니다.

장애 조치가 Cloud SQL 프록시에 미치는 영향

고가용성으로 구성된 인스턴스에서 프록시를 실행할 때 장애 조치가 발생하는 경우 프록시를 통한 연결은 IP를 통한 연결과 동일한 방식으로 영향을 받습니다. 즉, 기존 연결이 모두 손실되기 때문에 애플리케이션은 새 연결을 설정해야 합니다. 하지만 수동으로 설정할 필요는 없습니다. 애플리케이션은 이전과 동일한 연결 문자열을 계속 사용할 수 있습니다.

Cloud SQL 프록시 연결 문제 해결

Cloud SQL 프록시를 사용하여 Cloud SQL 인스턴스에 연결하는 데 문제가 있는 경우 다음과 같이 문제의 원인을 찾을 수 있습니다.

  • 프록시 출력을 확인합니다.

    대개 프록시 출력은 문제의 원인 및 해결 방법을 파악하는 데 도움이 됩니다. 출력을 파일로 보내거나 프록시를 시작한 터미널을 확인합니다.

  • 403 notAuthorized 오류가 발생하고 서비스 계정으로 프록시를 인증하는 경우 서비스 계정에 올바른 권한이 있는지 확인하세요.

    IAM 페이지에서 해당 ID를 검색하여 서비스 계정을 확인할 수 있습니다. cloudsql.instances.connect 권한이 있어야 합니다. 사전 정의된 모든 Cloud SQL 역할에 해당 권한이 있습니다(Cloud SQL Viewer 제외). 또한 기존 프로젝트 역할 EditorOwner에 필요한 권한이 있습니다.

  • Cloud SQL Admin API를 사용 설정해야 합니다.

    사용 설정되어 있지 않으면 프록시 로그에 Error 403: Access Not Configured와 같은 출력이 표시됩니다.

  • 인스턴스 목록에 여러 인스턴스를 포함하는 경우 공백 없이 쉼표로 구분해야 합니다. TCP를 사용하는 경우 인스턴스마다 다른 포트를 지정해야 합니다.

  • 애플리케이션에서 연결을 시도하는 경우 먼저 관리 클라이언트를 사용하여 연결하여 애플리케이션 문제를 제거합니다.

  • UNIX 소켓을 사용하여 연결하는 경우 프록시를 시작할 때 지정한 디렉터리를 나열하여 소켓이 생성되었는지 확인합니다.

  • 아웃바운드 방화벽 정책이 있는 경우 대상 머신에서 포트 3307에 연결할 수 있는지 확인합니다.

다음 단계