Cloud SQL 인증 프록시를 사용하여 연결

이 페이지에서는 Cloud SQL 인증 프록시를 사용하여 Cloud SQL 인스턴스에 연결하는 방법을 설명합니다.

공개 IP를 사용하여 mysql 클라이언트를 Cloud SQL 인스턴스에 연결하는 방법은 데이터베이스 클라이언트를 사용하여 연결을 참조하세요.

Cloud SQL 인증 프록시의 작동 방식에 대한 자세한 내용은 Cloud SQL 인증 프록시 정보를 참조하세요.

시작하기 전에

Cloud SQL 인스턴스에 연결하려면 먼저 다음이 필요합니다.

Cloud SQL 인증 프록시 인증 옵션

이러한 모든 옵션은 INSTANCE_CONNECTION_NAME을 연결 문자열로 사용하여 Cloud SQL 인스턴스를 식별합니다. Google Cloud Console의 인스턴스 개요 페이지에서 또는 다음 명령어를 실행하여 INSTANCE_CONNECTION_NAME을 확인할 수 있습니다.

gcloud sql instances describe INSTANCE_NAME --project PROJECT_ID.

gcloud sql instances describe myinstance --project myproject).

이러한 옵션 중 일부는 계정의 RSA 비공개 키가 포함된 JSON 사용자 인증 정보 파일을 사용합니다. 서비스 계정의 JSON 사용자 인증 정보 파일을 만드는 방법은 서비스 계정 만들기를 참조하세요.

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

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

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

    명령줄에서 이 옵션을 사용하려면 -credential_file 플래그가 JSON 사용자 인증 정보 파일의 경로와 파일 이름으로 설정된 cloud_sql_proxy 명령어를 호출합니다. 경로는 절대적이거나 현재 작업 디렉터리를 기준으로 할 수 있습니다. 예를 들면 다음과 같습니다.

    ./cloud_sql_proxy -credential_file=PATH_TO_KEY_FILE -instances=INSTANCE_CONNECTION_NAME
      

    IAM 역할을 서비스 계정에 추가하는 자세한 방법은 서비스 계정에 역할 부여를 참조하세요.

    Cloud SQL이 지원하는 역할에 대한 자세한 내용은 Cloud SQL의 프로젝트 액세스 제어를 참조하세요.

  2. 액세스 토큰으로 제공된 사용자 인증 정보

    액세스 토큰을 만들고 -token 플래그와 함께 cloud_sql_proxy 명령어를 호출하여 OAuth 2.0 액세스 토큰으로 설정합니다. 예를 들면 다음과 같습니다.
    ./cloud_sql_proxy -token=ACCESS_TOKEN -instances=INSTANCE_CONNECTION_NAME
      
  3. 환경 변수로 제공된 사용자 인증 정보

    이 옵션은 -credential_file 명령줄 인수를 사용하는 대신 GOOGLE_APPLICATION_CREDENTIALS 환경 변수에 설정한 JSON 사용자 인증 정보 파일을 지정한다는 점을 제외하면 -credential_file 플래그를 사용하는 것과 유사합니다.
  4. 인증된 Cloud SDK 클라이언트의 사용자 인증 정보

    cloud 명령줄 도구를 설치하고 개인 계정으로 인증한 경우 Cloud SQL 인증 프록시는 동일한 계정 사용자 인증 정보를 사용할 수 있습니다. 이 방법은 특히 개발 환경을 준비하고 실행하는 데 유용합니다.

    gcloud auth login에 선택된 계정이 없으면 Cloud SQL 인증 프록시는 gcloud auth application-default login에 선택된 계정을 확인합니다.

  5. Compute Engine 인스턴스와 관련된 사용자 인증 정보

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

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

  6. 환경의 기본 서비스 계정

    Cloud SQL 인증 프록시가 앞에서 설명한 위치에서 사용자 인증 정보를 찾을 수 없는 경우 서버 간 프로덕션 애플리케이션 인증 설정에 설명된 로직을 따릅니다. 일부 환경(예: Compute Engine, App Engine 등)은 애플리케이션이 기본적으로 인증하는 데 사용할 수 있는 기본 서비스 계정을 제공합니다. 기본 서비스 계정을 사용하는 경우 이 계정에는 역할 및 권한에 설명된 권한이 있어야 합니다. Google Cloud의 인증 방법에 대한 자세한 내용은 인증 개요를 참조하세요.

서비스 계정 만들기

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

    서비스 계정 페이지로 이동

  2. Cloud SQL 인스턴스가 포함된 프로젝트를 선택합니다.
  3. 서비스 계정 만들기를 클릭합니다.
  4. 서비스 계정 만들기 대화상자에 서비스 계정을 설명하는 이름을 입력합니다.
  5. 서비스 계정 ID를 고유하고 쉽게 알아볼 수 있는 값으로 변경한 후 만들기를 클릭합니다.
  6. 역할에서 다음 역할 중 하나를 선택하고 계속을 클릭한 후 완료를 클릭합니다.
    • Cloud SQL > Cloud SQL 클라이언트
    • Cloud SQL > Cloud SQL 편집자
    • Cloud SQL > Cloud SQL 관리자
  7. 새 서비스 계정의 작업 메뉴를 클릭한 후 키 관리를 선택합니다.
  8. 키 추가 드롭다운 메뉴를 클릭한 후 새 키 만들기를 클릭합니다.
  9. 키 유형이 JSON인지 확인한 후 만들기를 클릭합니다.

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

Cloud SQL 인증 프록시 다운로드 및 설치

Linux 64비트

  1. Cloud SQL 인증 프록시를 다운로드합니다.
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Cloud SQL 인증 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

Linux 32비트

  1. Cloud SQL 인증 프록시를 다운로드합니다.
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Cloud SQL 인증 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

macOS 64비트

  1. Cloud SQL 인증 프록시를 다운로드합니다.
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Cloud SQL 인증 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

macOS 32비트

  1. Cloud SQL 인증 프록시를 다운로드합니다.
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Cloud SQL 인증 프록시 실행 파일을 만듭니다.
    chmod +x cloud_sql_proxy
    

Windows 64비트

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

Windows 32비트

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

Cloud SQL 인증 프록시 Docker 이미지

편의를 위해 Cloud SQL팀은 고객이 사용할 Cloud SQL 인증 프록시가 포함된 컨테이너 이미지 여러 개를 유지보수합니다. 이러한 이미지에 대한 자세한 내용은 GitHub의 Cloud SQL 인증 프록시 저장소를 참조하세요. 다음 명령어로 Docker를 사용하여 최신 이미지를 로컬 머신으로 가져올 수 있습니다.
docker pull gcr.io/cloudsql-docker/gce-proxy:1.21.0

기타 OS

여기에 포함되지 않은 다른 운영체제의 경우 소스에서 Cloud SQL 인증 프록시를 컴파일하면 됩니다.

Cloud SQL 인증 프록시 시작

언어 및 환경에 따라 TCP 소켓, Unix 소켓 또는 Cloud SQL 인증 프록시 Docker 이미지를 사용하여 Cloud SQL 인증 프록시를 시작할 수 있습니다. Cloud SQL 인증 프록시 바이너리는 명령줄에 지정된 Cloud SQL 인스턴스 하나 이상에 연결하고 로컬 연결을 TCP 또는 Unix 소켓으로 엽니다. 애플리케이션 코드 또는 데이터베이스 관리 클라이언트 도구와 같은 다른 애플리케이션 및 서비스는 이러한 TCP 또는 Unix 소켓 연결을 통해 Cloud SQL 인스턴스에 연결할 수 있습니다.

TCP 소켓

TCP 연결의 경우 Cloud SQL 인증 프록시는 기본적으로 localhost(127.0.0.1)에서 리슨합니다. 따라서 인스턴스에 tcp:PORT_NUMBER를 지정하면 로컬 연결은 127.0.0.1:PORT_NUMBER에서 이루어집니다.

또는 로컬 연결에 다른 주소를 지정할 수 있습니다. 예를 들어 Cloud SQL 인증 프록시가 0.0.0.0:1234에서 로컬 연결을 리슨하도록 하는 방법은 다음과 같습니다.

  ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:1234
  1. INSTANCE_CONNECTION_NAME을 복사합니다. Google Cloud Console의 인스턴스에 대한 개요 페이지에서 확인하거나 다음 명령어를 실행하여 확인할 수 있습니다.

    gcloud sql instances describe INSTANCE_NAME
    .

    예를 들면 myproject:myregion:myinstance입니다.

  2. 인스턴스에 공개 및 비공개 IP가 모두 구성되어 있고 Cloud SQL 인증 프록시에서 비공개 IP 주소를 사용하도록 하려는 경우 Cloud SQL 인증 프록시를 시작할 때 다음 옵션을 제공해야 합니다.
    -ip_address_types=PRIVATE
  3. 서비스 계정을 사용하여 Cloud SQL 인증 프록시를 인증하는 경우 서비스 계정을 만들 때 생성된 비공개 키 파일의 클라이언트 머신 내 위치를 기록해 둡니다.
  4. Cloud SQL 인증 프록시를 시작합니다.

    가능한 Cloud SQL 인증 프록시 호출 문자열은 다음과 같습니다.

    • Cloud SDK 인증 사용:
      ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:3306
      
      지정된 포트는 로컬 데이터베이스 서버 등에서 이미 사용하지 않는 포트여야 합니다.
    • 서비스 계정 사용 및 명시적으로 인스턴스 연결 이름 포함(프로덕션 환경에 권장):
      ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAM=tcp:3306 \
                        -credential_file=PATH_TO_KEY_FILE &
      

    Cloud SQL 인증 프록시 옵션에 대한 자세한 내용은 Cloud SQL 인증 프록시 인증 옵션인스턴스 지정 옵션을 참조하세요.

Unix 소켓

Cloud SQL 인증 프록시는 폴더를 사용하여 동일한 호스트에서 실행되는 두 프로세스 간의 통신을 관리하는 Posix 표준 메커니즘인 Unix 소켓에서 리슨할 수 있습니다. Unix 소켓을 사용할 때의 장점은 보안이 향상되고 지연 시간이 짧다는 것입니다. 하지만 외부 머신에서는 Unix 소켓에 액세스할 수 없습니다.

Unix 소켓을 만들고 사용하려면 대상 디렉터리가 있어야 하며 Cloud SQL 인증 프록시와 애플리케이션 모두 디렉터리에 대한 읽기 및 쓰기 액세스 권한이 있어야 합니다.

  1. 명시적 인스턴스 지정을 사용하는 경우 INSTANCE_CONNECTION_NAME을 복사합니다. Google Cloud Console의 인스턴스에 대한 개요 페이지에서 확인하거나 명령어를 실행하여 확인할 수 있습니다.

    gcloud sql instances describe INSTANCE_NAME
    .

    예를 들면 myproject:myregion:myinstance입니다.

  2. Cloud SQL 인증 프록시 소켓이 위치할 디렉터리를 만듭니다.
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. 서비스 계정을 사용하여 Cloud SQL 인증 프록시를 인증하는 경우 서비스 계정을 만들 때 생성된 비공개 키 파일의 클라이언트 머신 내 위치를 기록해 둡니다.
  4. 새 터미널 창을 열고 Cloud SQL 인증 프록시를 시작합니다.

    가능한 Cloud SQL 인증 프록시 호출 문자열은 다음과 같습니다.

    • 서비스 계정 사용 및 명시적으로 인스턴스 연결 이름 포함(프로덕션 환경에 권장):
      ./cloud_sql_proxy -dir=/cloudsql -instances=INSTANCE_CONNECTION_NAME
      -credential_file=PATH_TO_KEY_FILE &
    • Cloud SDK 인증과 자동 인스턴스 검색 사용:
      ./cloud_sql_proxy -dir=/cloudsql &

    Cloud SQL 인증 프록시 출력을 다른 프로그램의 출력과 별도로 모니터링할 수 있도록 자체 터미널 내에서 Cloud SQL 인증 프록시를 시작하는 것이 가장 좋습니다.

    Cloud SQL 인증 프록시 옵션에 대한 자세한 내용은 Cloud SQL 인증 프록시 인증 옵션인스턴스 지정 옵션을 참조하세요.

Cloud SQL 인증 프록시 Docker 이미지

Docker 컨테이너에서 Cloud SQL 인증 프록시를 실행하려면 Google Container Registry에서 제공하는 Cloud SQL 인증 프록시 Docker 이미지를 사용합니다.

다음 명령어로 TCP 소켓이나 Unix 소켓을 사용하여 Cloud SQL 인증 프록시를 시작할 수 있습니다. 이 옵션은 INSTANCE_CONNECTION_NAME을 연결 문자열로 사용하여 Cloud SQL 인스턴스를 식별합니다. Google Cloud Console의 인스턴스 개요 페이지에서 또는 다음 명령어를 실행하여 INSTANCE_CONNECTION_NAME을 확인할 수 있습니다.

gcloud sql instances describe INSTANCE_NAME
.

예를 들면 myproject:myregion:myinstance입니다.

언어와 환경에 따라 TCP 소켓이나 Unix 소켓을 사용하여 Cloud SQL 인증 프록시를 시작할 수 있습니다. 자바 프로그래밍 언어로 작성된 애플리케이션이나 Windows 환경에서는 Unix 소켓이 지원되지 않습니다.

TCP 소켓 사용

docker run -d \\
  -v PATH_TO_KEY_FILE:/config \\
  -p 127.0.0.1:3306:3306 \\
  gcr.io/cloudsql-docker/gce-proxy:1.21.0 /cloud_sql_proxy \\
  -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:3306 -credential_file=/config

Compute Engine 인스턴스에서 제공되는 사용자 인증 정보를 사용하는 경우에는 credential_file 매개변수와 -v PATH_TO_KEY_FILE:/config 행을 포함하지 마세요.

Cloud SQL 인증 프록시가 로컬 호스트 외부에 노출되지 않도록 항상 -p에 127.0.0.1 프리픽스를 지정합니다. 인스턴스 매개변수의 '0.0.0.0'은 Docker 컨테이너 외부에서 포트에 액세스할 수 있도록 하는 데 필요합니다.

Unix 소켓 사용

docker run -d -v /cloudsql:/cloudsql \\
  -v PATH_TO_KEY_FILE:/config \\
  gcr.io/cloudsql-docker/gce-proxy:1.21.0 /cloud_sql_proxy -dir=/cloudsql \\
  -instances=INSTANCE_CONNECTION_NAME -credential_file=/config

Compute Engine 인스턴스에서 제공되는 사용자 인증 정보를 사용하는 경우에는 credential_file 매개변수와 -v PATH_TO_KEY_FILE:/config 행을 포함하지 마세요.

컨테이너 최적화 이미지를 사용하는 경우 /cloudsql 대신 쓰기 가능한 디렉터리를 사용합니다. 예를 들면 다음과 같습니다.

-v /mnt/stateful_partition/cloudsql:/cloudsql

여러 개의 인스턴스를 쉼표로 구분하여 지정할 수 있습니다. 또한 Compute Engine 메타데이터를 사용하여 연결할 인스턴스를 동적으로 결정할 수 있습니다. Cloud SQL 인증 프록시 매개변수 자세히 알아보기

기타 명령줄 인수

위의 예시는 가장 일반적인 사용 사례를 다루지만 Cloud SQL 인증 프록시에는 명령줄 인수로 설정할 수 있는 다른 구성 옵션도 있습니다. 명령줄 인수에 대한 도움말은 -help 플래그를 사용하여 최신 문서를 참조하세요.

./cloud_sql_proxy -help

Cloud SQL 인증 프록시 명령줄 옵션을 사용 방법에 대한 추가 예시는 Cloud SQL 인증 프록시 GitHub 저장소의 README를 참조하세요.

Cloud SQL 인증 프록시에 연결

사용하는 연결 문자열은 TCP 소켓, UNIX 소켓, Docker 중에 무엇을 사용하여 Cloud SQL 인증 프록시를 시작했는지에 따라 다릅니다.

TCP 소켓

  1. mysql 클라이언트를 시작합니다.
    mysql -u USERNAME -p --host 127.0.0.1
    

    TCP 소켓을 사용하여 연결하면 127.0.0.1을 통해 Cloud SQL 인증 프록시에 액세스합니다.

  2. 메시지가 표시되면 비밀번호를 입력합니다.
  3. mysql 프롬프트가 표시됩니다.

Unix 소켓 사용

  1. mysql 클라이언트를 시작합니다.
    mysql -u USERNAME -p -S /cloudsql/INSTANCE_CONNECTION_NAME
    
  2. 비밀번호를 입력합니다.
  3. mysql 프롬프트가 표시됩니다.

도움말 프록시 문제를 해결하는 데 도움이 필요하면 Cloud SQL 인증 프록시 연결 문제 해결를 참조하세요. 또는 Cloud SQL 지원 페이지를 참조하세요.

언어별 코드 샘플

Unix 또는 TCP 소켓에 연결할 수 있게 해주는 모든 언어에서 Cloud SQL 인증 프록시에 연결할 수 있습니다. 다음은 애플리케이션에서 어떻게 함께 작동하는지 이해하는 데 도움이 되는 GitHub 전체 예시의 몇 가지 코드 스니펫입니다.

추가 주제

비공개 IP로 Cloud SQL 인증 프록시 사용

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

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

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

-ip_address_types=PRIVATE

데이터베이스 사용자 계정에 Cloud SQL 인증 프록시 필요

Cloud SQL 인증 프록시를 사용하여 인스턴스에 연결할 때 인스턴스에 로그인할 사용자 계정을 제공합니다. 이 경우에는 모든 데이터베이스 사용자 계정을 사용할 수 있습니다. 하지만 Cloud SQL 인증 프록시는 Cloud SQL 인증 프록시가 아니면 액세스할 수 없는 호스트 이름으로 항상 연결되기 때문에 Cloud SQL 인증 프록시만 사용할 수 있는 사용자 계정을 만들 수도 있습니다. 이렇게 하면 인스턴스 또는 데이터의 보안을 손상시키지 않고 비밀번호 없이 해당 계정을 지정할 수 있습니다.

Cloud SQL 인증 프록시에서만 사용할 수 있는 사용자 계정을 만들려면 호스트 이름을 'cloudsqlproxy~[IP_ADDRESS]'로 지정합니다. IP 주소 와일드 카드를 사용할 수도 있습니다(이 경우 결과는 'cloudsqlproxy~%'가 됨). 전체 사용자 계정 이름은 다음과 같습니다.

'[USER_NAME]'@'cloudsqlproxy~%'

또는

'[USER_NAME]'@'cloudsqlproxy~[IP_ADDRESS]'

사용자 계정을 만드는 데 도움이 필요한 경우 사용자 만들기 및 관리를 참조하세요. 사용자 계정을 사용한 Cloud SQL 작동 방법에 대한 자세한 내용은 사용자를 참조하세요.

별도의 프로세스에서 Cloud SQL 인증 프록시 실행

별도의 터미널 프로세스에서 Cloud SQL 인증 프록시를 실행하면 콘솔 출력이 다른 프로그램의 출력과 혼합되지 않습니다. 아래 구문을 사용하여 별도의 프로세스에서 Cloud SQL 인증 프록시를 호출합니다.

Linux

Linux 또는 macOS에서는 명령줄에서 후행 &를 사용하여 별도의 프로세스에서 Cloud SQL 인증 프록시를 실행합니다.

./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:PORT_NUMBER
  -credential_file=PATH_TO_KEY_FILE &

Windows

Windows PowerShell에서 Start-Process 명령어를 사용하여 Cloud SQL 인증 프록시를 별도의 프로세스에서 실행합니다.

Start-Process -filepath "cloud_sql_proxy.exe"
  -ArgumentList "-instances=INSTANCE_CONNECTION_NAME=tcp:PORT_NUMBER
  -credential_file=PATH_TO_KEY_FILE"

Docker 컨테이너에서 Cloud SQL 인증 프록시 실행

Docker 컨테이너에서 Cloud SQL 인증 프록시를 실행하려면 Google Container Registry에서 제공하는 Cloud SQL 인증 프록시 Docker 이미지를 사용합니다. 다음 gcloud 명령어를 사용하여 Cloud SQL 인증 프록시 Docker 이미지를 설치할 수 있습니다.

docker pull gcr.io/cloudsql-docker/gce-proxy:1.21.0

다음 명령어로 TCP 소켓이나 Unix 소켓을 사용하여 Cloud SQL 인증 프록시를 시작할 수 있습니다.

TCP 소켓

    docker run -d \
      -v PATH_TO_KEY_FILE:/config \
      -p 127.0.0.1:3306:3306 \
      gcr.io/cloudsql-docker/gce-proxy:1.21.0 /cloud_sql_proxy \
      -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:3306 \
      -credential_file=/config

Unix 소켓

    docker run -d \
      -v /PATH_TO_HOST_TARGET:/PATH_TO_GUEST_TARGET \
      -v PATH_TO_KEY_FILE:/config \
      gcr.io/cloudsql-docker/gce-proxy:1.21.0 /cloud_sql_proxy -dir=/cloudsql \
      -instances=INSTANCE_CONNECTION_NAME
      -credential_file=/config/PATH_TO_KEY_FILE

컨테이너 최적화 이미지를 사용하는 경우 /cloudsql 대신 쓰기 가능한 디렉터리를 사용합니다. 예를 들면 다음과 같습니다.

-v /mnt/stateful_partition/cloudsql:/cloudsql

Compute Engine 인스턴스에서 제공되는 사용자 인증 정보를 사용하는 경우에는 credential_file 매개변수와 -v PATH_TO_KEY_FILE:/config 행을 포함하지 마세요.

서비스로 Cloud SQL 인증 프록시 실행

Cloud SQL 인증 프록시를 백그라운드 서비스로 실행하면 로컬 개발 및 테스트에 편리합니다. Cloud SQL 인스턴스에 액세스해야 하는 경우 백그라운드에서 서비스를 시작하고, 완료되면 중지할 수 있습니다.

  • Cloud SQL 인증 프록시는 현재 Windows 서비스로 실행하기 위한 기본 지원을 제공하지 않지만 타사 서비스 관리자를 사용하면 서비스로 실행할 수 있습니다. 예를 들어 NSSM을 사용하여 Cloud SQL 인증 프록시를 Windows 서비스로 구성하면 NSSM은 Cloud SQL 인증 프록시를 모니터링하고 응답이 중지되면 자동으로 다시 시작합니다. 자세한 내용은 NSSM 문서를 참조하세요.

Cloud SQL 인증 프록시 작업에 대한 팁

Cloud SQL 인증 프록시 호출

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

/cloudsql을 Cloud SQL 인증 프록시 소켓의 디렉터리로 사용할 필요는 없습니다. (이 디렉토리 이름은 App Engine 연결 문자열과의 차이를 최소화하기 위해 선택되었습니다.) 그러나 디렉터리 이름을 변경하는 경우에는 전체 길이를 최소로 유지해야 하는데, 이는 운영체제의 길이 제한이 적용되는 더 긴 문자열에 통합되기 때문입니다. 시스템에 따라 다르지만 이는 일반적으로 91~108자입니다. Linux에서 길이는 일반적으로 108자로 정의되며 다음 명령어를 사용하여 확인할 수 있습니다.

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

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

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

Unix 소켓

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

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

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

      ./cloud_sql_proxy -dir=/cloudsql -instances=myProject:us-central1:myInstance,myProject:us-central1:myInstance2 &
      mysql -u myUser -S /cloudsql/myProject:us-central1:myInstance2
  

TCP 소켓

TCP를 사용하여 연결하는 경우 Cloud SQL 인증 프록시가 각 Cloud SQL 인스턴스를 리슨할 수 있도록 머신에 포트를 지정합니다. 여러 Cloud SQL 인스턴스에 연결할 때 지정된 각 포트는 고유해야 하며 머신에서 사용할 수 있어야 합니다.

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

    # Start the Cloud SQL Auth proxy to connect to two different Cloud SQL instances.
    # Give the Cloud SQL Auth proxy a unique port on your machine to use for each Cloud SQL instance.

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

    # Connect to "myInstance" using port 3306 on your machine:
    mysql -u myInstanceUser --host 127.0.0.1  --port 3306

    # Connect to "myInstance2" using port 1234 on your machine:
    mysql -u myInstance2User --host 127.0.0.1  --port 1234
  

Cloud SQL 인증 프록시 호출 및 mysql 클라이언트 연결 문자열

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

gcloud 인증 정보 및 자동 인스턴스 검색 사용
    ./cloud_sql_proxy -dir=/cloudsql &
    mysql -u myUser -S /cloudsql/myProject:us-central1:myInstance
gcloud 사용자 인증 정보로 프로젝트 검색 사용:
    ./cloud_sql_proxy -dir=/cloudsql -projects=myProject &
    mysql -u myUser -S /cloudsql/myProject:us-central1:

인스턴스가 명시적으로 지정된 Compute Engine 인스턴스의 경우:
    ./cloud_sql_proxy -dir=/cloudsql -instances=myProject:us-central1:myInstance &
    mysql -u myUser -S /cloudsql/myProject:us-central1:myInstance
Unix에서 TCP를 사용하는 경우:
    ./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:3306 &
    mysql -u myUser --host 127.0.0.1
Windows의 경우(명령줄 프롬프트):
    cloud_sql_proxy.exe -instances=myProject:us-central1:myInstance=tcp:3306
    mysql -u myUser --host 127.0.0.1

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

Cloud SQL 인증 프록시 연결 문제 해결

Cloud SQL 인증 프록시 Docker 이미지는 특정 버전의 Cloud SQL 인증 프록시를 기반으로 합니다. Cloud SQL 인증 프록시의 새 버전이 출시되면 새 버전의 Cloud SQL 인증 프록시 Docker 이미지를 가져와서 환경을 최신 상태로 유지합니다. Cloud SQL 인증 프록시 GitHub 출시 페이지를 확인하여 현재 버전의 Cloud SQL 인증 프록시를 볼 수 있습니다.

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

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

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

  • 403 notAuthorized 오류가 발생한 경우 서비스 계정을 사용하여 Cloud SQL 인증 프록시를 인증하려면 서비스 계정에 올바른 권한이 있는지 확인합니다.

    IAM 페이지에서 ID를 검색하여 서비스 계정을 확인할 수 있습니다. 이렇게 하려면 cloudsql.instances.connect 권한이 있어야 합니다. Cloud SQL Admin, Client, Editor 사전 정의된 역할에는 이 권한이 있습니다.

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

    그렇지 않은 경우 Cloud SQL 인증 프록시 로그에 Error 403: Access Not Configured와 같은 출력이 표시됩니다.

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

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

  • 아웃바운드 방화벽 정책이 있으면 대상 Cloud SQL 인스턴스에서 포트 3307에 연결할 수 있는지 확인합니다.

다음 단계