使用 Cloud SQL 驗證 Proxy 連線

本頁面說明如何使用 Cloud SQL 驗證 Proxy 連線至 Cloud SQL 執行個體。

如要進一步瞭解 Cloud SQL 驗證 Proxy 的運作方式,請參閱「關於 Cloud SQL 驗證 Proxy」。

總覽

建議您使用 Cloud SQL Auth Proxy 連線至 Cloud SQL 執行個體。Cloud SQL 驗證 Proxy:

  • 可搭配公開和私人 IP 端點使用
  • 使用使用者或服務帳戶的憑證驗證連線
  • 在 Cloud SQL 執行個體授權的 SSL/TLS 層中包裝連線

部分 Google Cloud 服務和應用程式會使用 Cloud SQL Auth Proxy,為公開 IP 路徑提供加密和授權連線,包括:

Google Kubernetes Engine 中執行的應用程式可以使用 Cloud SQL 驗證 Proxy 連線。

請參閱使用 Cloud SQL 驗證 Proxy 的快速入門導覽課程,瞭解基本用法。

您也可以使用 psql 用戶端,從本機機器或 Compute Engine連線,不論是否使用 Cloud SQL 驗證 Proxy 皆可。

事前準備

請先完成下列步驟,才能連線至 Cloud SQL 執行個體:

    • 如果是使用者或服務帳戶,請確認帳戶具備 Cloud SQL 用戶端角色。這個角色包含 cloudsql.instances.connect 權限,可授權管理主體連線至專案中的所有 Cloud SQL 執行個體。

      前往「身分與存取權管理」頁面

    • 您可以選擇在 IAM 政策繫結中加入 IAM 條件,授予帳戶僅連線至一個特定 Cloud SQL 執行個體的權限。
  1. Enable the Cloud SQL Admin API.

    Enable the API

  2. 安裝並初始化 gcloud CLI
  3. (非必要) 安裝 Cloud SQL 驗證 Proxy Docker 用戶端

下載 Cloud SQL 驗證 Proxy

Linux 64 位元

  1. 下載 Cloud SQL 驗證 Proxy:
    curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.linux.amd64
  2. 將 Cloud SQL 驗證 Proxy 設為可執行:
    chmod +x cloud-sql-proxy

Linux 32 位元

  1. 下載 Cloud SQL 驗證 Proxy:
    curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.linux.386
  2. 如果找不到 curl 指令,請執行 sudo apt install curl 並重複下載指令。
  3. 將 Cloud SQL 驗證 Proxy 設為可執行:
    chmod +x cloud-sql-proxy

macOS 64 位元

  1. 下載 Cloud SQL 驗證 Proxy:
    curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.darwin.amd64
  2. 將 Cloud SQL 驗證 Proxy 設為可執行:
    chmod +x cloud-sql-proxy

Mac M1

  1. 下載 Cloud SQL 驗證 Proxy:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.darwin.arm64
      
  2. 將 Cloud SQL 驗證 Proxy 設為可執行:
      chmod +x cloud-sql-proxy
      

Windows 64 位元

https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.x64.exe 上按一下滑鼠右鍵,然後選取「Save Link As」(另存連結為),即可下載 Cloud SQL 驗證 Proxy。將檔案重新命名為 cloud-sql-proxy.exe

Windows 32 位元

https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.x86.exe 上按一下滑鼠右鍵,然後選取「Save Link As」(另存連結為),即可下載 Cloud SQL 驗證 Proxy。將檔案重新命名為 cloud-sql-proxy.exe

Cloud SQL 驗證 Proxy Docker 映像檔

Cloud SQL 驗證 Proxy 有不同的容器映像檔,例如 distrolessalpinebuster。預設的 Cloud SQL 驗證 Proxy 容器映像檔會使用 distroless,其中不含任何殼層。如果您需要殼層或相關工具,請下載以 alpinebuster 為基礎的映像檔。詳情請參閱「Cloud SQL 驗證 Proxy 容器映像檔」。

您可以使用下列指令,透過 Docker 將最新映像檔提取至本機電腦:

docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0

其他作業系統

如果是未列於上述說明的其他作業系統,您可以從原始碼編譯 Cloud SQL 驗證 Proxy

啟動 Cloud SQL 驗證 Proxy

根據您的語言與環境,您可以使用 TCP 通訊端、Unix 通訊端或 Cloud SQL 驗證 Proxy Docker 映像檔啟動 Cloud SQL 驗證 Proxy。Cloud SQL 驗證 Proxy 二進位檔會連線至指派在命令列上指定的一或多個 Cloud SQL 執行個體,並以 TCP 或 Unix 套接字開啟本機連線。其他應用程式和服務 (例如應用程式程式碼或資料庫管理用戶端工具) 可以透過這些 TCP 或 Unix 套接字連線,連線至 Cloud SQL 執行個體。

TCP 通訊端

針對 TCP 連線,Cloud SQL 驗證 Proxy 預設會監聽 localhost(127.0.0.1)。因此,當您為執行個體指定 --port PORT_NUMBER 時,本機連線會位於 127.0.0.1:PORT_NUMBER

或者,您也可以為本機連線指定其他位址。舉例來說,以下說明如何讓 Cloud SQL 驗證 Proxy 在 0.0.0.0:1234 上監聽本機連線:

./cloud-sql-proxy --address 0.0.0.0 --port 1234 INSTANCE_CONNECTION_NAME
  1. 複製 INSTANCE_CONNECTION_NAME。您可以在 Google Cloud 主控台的「總覽」頁面中找到此值,也可以執行下列指令來取得:

        gcloud sql instances describe INSTANCE_NAME --format='value(connectionName)'

    例如 myproject:myregion:myinstance

  2. 如果執行個體已設定公開和私人 IP,而您想讓 Cloud SQL Auth Proxy 使用私人 IP位址,則必須在啟動 Cloud SQL Auth Proxy 時提供下列選項:
    --private-ip
  3. 如果您使用服務帳戶驗證 Cloud SQL 驗證 Proxy,請記下您建立服務帳戶時,私密金鑰檔案在用戶端機器上的建立位置。
  4. 啟動 Cloud SQL 驗證 Proxy。

    以下是幾個可能的 Cloud SQL 驗證 Proxy 叫用字串:

    • 使用 Cloud SDK 驗證:
      ./cloud-sql-proxy --port 5432 INSTANCE_CONNECTION_NAME
      請勿指定使用中的通訊埠,例如本機資料庫伺服器正在使用的通訊埠。
    • 使用服務帳戶並明確加入執行個體連線的名稱 (建議用於實際工作環境):
      ./cloud-sql-proxy \
      --credentials-file PATH_TO_KEY_FILE INSTANCE_CONNECTION_NAME &

    如要進一步瞭解 Cloud SQL 驗證 Proxy 選項,請參閱「驗證 Cloud SQL 驗證 Proxy 的選項」。

Unix 通訊端

Cloud SQL 驗證 Proxy 可監聽 Unix 通訊端,這是一種 Posix 標準機制,可使用資料夾來管理在同一個主機上執行的兩個程序之間的通訊。使用 Unix 通訊端的優點是可提升安全性和降低延遲時間,但您無法從外部機器存取 Unix 通訊端。

如要建立及使用 Unix 通訊端,目標目錄必須存在,且 Cloud SQL Auth Proxy 和應用程式都必須擁有讀取和寫入權限。

  1. 複製 INSTANCE_CONNECTION_NAME。您可以在 Google Cloud 主控台的「總覽」頁面中找到此值,也可以執行下列指令來取得:

        gcloud sql instances describe INSTANCE_NAME --format='value(connectionName)'

    例如 myproject:myregion:myinstance

  2. 建立 Cloud SQL 驗證 Proxy 通訊端運作的目錄:
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. 如果您使用服務帳戶驗證 Cloud SQL 驗證 Proxy,請記下您建立服務帳戶時,私密金鑰檔案在用戶端機器上的建立位置。
  4. 開啟新的 Cloud Shell 終端機視窗,然後啟動 Cloud SQL 驗證 Proxy。

    以下是幾個可能的 Cloud SQL 驗證 Proxy 叫用字串:

    • 使用 Google Cloud SDK 驗證:
      ./cloud-sql-proxy --unix-socket /cloudsql INSTANCE_CONNECTION_NAME &
    • 使用服務帳戶:
        ./cloud-sql-proxy --unix-socket /cloudsql
        --credentials-file PATH_TO_KEY_FILE INSTANCE_CONNECTION_NAME &

    建議您在 Cloud Shell 終端機本身啟動 Cloud SQL 驗證 Proxy,這樣即可避免 Proxy 的輸出內容與其他程式的輸出內容相互混雜,以便您監控 Proxy 的輸出內容。

    如要進一步瞭解 Cloud SQL 驗證 Proxy 選項,請參閱「驗證 Cloud SQL 驗證 Proxy 的選項」。

Docker

如要在 Docker 容器中執行 Cloud SQL 驗證 Proxy,請使用可從 Google Container Registry 取得的 Cloud SQL 驗證 Proxy Docker 映像檔。

您可以使用 TCP 通訊端或 Unix 通訊端啟動 Cloud SQL Auth Proxy,並使用下列指令。這些選項會使用 INSTANCE_CONNECTION_NAME 做為連線字串,用於識別 Cloud SQL 執行個體。您可以在 Google Cloud 主控台的「總覽」頁面中,找到執行個體的 INSTANCE_CONNECTION_NAME,也可以執行下列指令:

gcloud sql instances describe INSTANCE_NAME

例如 myproject:myregion:myinstance

根據您的語言與環境,您可以使用 TCP 通訊端或 Unix 通訊端啟動 Cloud SQL 驗證 Proxy。以 Java 程式設計語言編寫的應用程式或 Windows 環境都不支援 Unix 通訊端。

使用 TCP 通訊端

docker run -d \\
  -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \\
  -p 127.0.0.1:5432:5432 \\
  gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 \\
  --address 0.0.0.0 --port 5432 \\
  --credentials-file /path/to/service-account-key.json INSTANCE_CONNECTION_NAME

如果您要使用 Compute Engine 執行個體提供的憑證,請勿加入 --credentials-file 參數與 -v PATH_TO_KEY_FILE:/path/to/service-account-key.json 這一行指令列。

請一律在 -p 中指定 127.0.0.1 前置字串,以防 Cloud SQL 驗證 Proxy 暴露到本機主機之外。執行個體參數中必須要有「0.0.0.0」,才能讓 Docker 容器以外的環境存取連接埠。

使用 Unix 通訊端

docker run -d -v /cloudsql:/cloudsql \\
  -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \\
  gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 --unix-socket=/cloudsql \\
  --credentials-file /path/to/service-account-key.json INSTANCE_CONNECTION_NAME

如果您要使用 Compute Engine 執行個體提供的憑證,請勿加入 --credentials-file 參數與 -v PATH_TO_KEY_FILE:/path/to/service-account-key.json 這一行指令列。

如果您要使用將容器最佳化的映像檔,請使用可寫入的目錄來取代 /cloudsql,例如:

-v /mnt/stateful_partition/cloudsql:/cloudsql

您可以指定多個執行個體,並以半形逗號分隔。您也可以使用 Compute Engine 中繼資料,以動態方式決定要連線的目標執行個體。進一步瞭解 Cloud SQL 驗證 Proxy 參數

連線至 psql 用戶端

Debian/Ubuntu

從套件管理員安裝 psql 用戶端:

sudo apt-get update
sudo apt-get install postgresql-client

CentOS/RHEL

從套件管理員安裝 psql 用戶端:

sudo yum install postgresql

openSUSE

從套件管理員安裝 psql 用戶端:

sudo zypper install postgresql

其他平台

  1. PostgreSQL 下載頁面下載您平台適用的 PostgreSQL Core Distribution。
    Core Distribution 內含 psql 用戶端。
  2. 按照下載頁面上的指示安裝 PostgreSQL 資料庫。

使用的連線字串取決於您是使用 TCP 通訊端還是 UNIX 通訊端或 Docker 啟動 Cloud SQL 驗證 Proxy。

TCP 通訊端

  1. 啟動 psql 用戶端:
    psql "host=127.0.0.1 sslmode=disable dbname=DB_NAME user=USERNAME"

    即使 sslmode 參數設為 disable,Cloud SQL 驗證 Proxy 仍會提供加密連線。

    使用 TCP 通訊端連線時,您會透過 127.0.0.1 存取 Cloud SQL 驗證 Proxy。

  2. 系統顯示提示時,請輸入密碼。
  3. 畫面上會顯示 psql 提示。

使用 Unix 通訊端

  1. 啟動 psql 用戶端:
    psql "sslmode=disable host=/cloudsql/INSTANCE_CONNECTION_NAME dbname=DB_NAME user=USERNAME"

    即使 sslmode 參數設為 disable,Cloud SQL 驗證 Proxy 仍會提供加密連線。

  2. 輸入密碼。
  3. 畫面上會顯示 psql 提示。

需要協助嗎?如需針對 Proxy 進行疑難排解,請參閱「Cloud SQL 驗證 Proxy 連線疑難排解」一文,或造訪 Cloud SQL 支援頁面。

連結至應用程式

任何可讓您連線至 Unix 或 TCP 通訊端的程式語言,都能用來連線至 Cloud SQL 驗證 Proxy。以下是 GitHub 完整範例中的程式碼片段,可協助您瞭解這些程式碼片段如何在應用程式中搭配運作。

其他主題

Cloud SQL 驗證 Proxy 指令列引數

上述範例涵蓋最常見的用途,但 Cloud SQL Auth Proxy 也有其他設定選項,可透過指令列引數設定。如需指令列引數的說明,請使用 --help 旗標查看最新說明文件:

./cloud-sql-proxy --help

如需其他使用 Cloud SQL 驗證 Proxy 指令列選項的範例,請參閱 Cloud SQL 驗證 Proxy GitHub 存放區的 README 檔案

驗證 Cloud SQL 驗證 Proxy 的選項

所有這些選項都會使用 INSTANCE_CONNECTION_NAME 做為連線字串,用於識別 Cloud SQL 執行個體。您可以在 Google Cloud 主控台的「總覽」頁面中,找到執行個體的 INSTANCE_CONNECTION_NAME,也可以執行下列指令:

gcloud sql instances describe --project PROJECT_ID INSTANCE_CONNECTION_NAME

例如:gcloud sql instances describe --project myproject myinstance

其中部分選項會使用 JSON 憑證檔案,其中包含帳戶的 RSA 私密金鑰。如要瞭解如何為服務帳戶建立 JSON 憑證檔案,請參閱「建立服務帳戶」一文。

Cloud SQL Auth Proxy 提供多種驗證方法,具體取決於您的環境。Cloud SQL 驗證 Proxy 會依下列順序檢查下列各項項目,並使用找到的第一個項目嘗試驗證:

  1. 憑證檔案旗標提供的憑證。

    使用服務帳戶建立及下載相關聯的 JSON 檔案,並在啟動 Cloud SQL 授權 Proxy 時,將 --credentials-file 旗標設為檔案路徑。服務帳戶必須具備 Cloud SQL 執行個體的必要權限

    如要在指令列上使用這個選項,請將 --credentials-file 旗標設為 JSON 憑證檔案的路徑和檔案名稱,然後叫用 cloud-sql-proxy 指令。路徑可以是絕對路徑,也可以相對於目前工作目錄。例如:

    ./cloud-sql-proxy --credentials-file PATH_TO_KEY_FILE \
    INSTANCE_CONNECTION_NAME
      

    如需將身分與存取權管理角色新增至服務帳戶的詳細操作說明,請參閱「為服務帳戶授予角色」一文。

    如要進一步瞭解 Cloud SQL 支援的角色,請參閱 Cloud SQL 的 IAM 角色

  2. 存取權杖提供的憑證。

    建立存取權杖,並在 --token 標記設為 OAuth 2.0 存取權杖的情況下,叫用 cloud-sql-proxy 指令。例如:
    ./cloud-sql-proxy --token ACCESS_TOKEN \
    INSTANCE_CONNECTION_NAME
      
  3. 環境變數提供的憑證。

    這個選項與使用 --credentials-file 標記類似,只是您需要指定在 GOOGLE_APPLICATION_CREDENTIALS 環境變數中設定的 JSON 憑證檔案,而非使用 --credentials-file 指令列引數。
  4. 已驗證的 gcloud CLI 用戶端憑證。

    如果您已安裝 gcloud CLI,並使用個人帳戶進行驗證,Cloud SQL 驗證 Proxy 就能使用相同的帳戶憑證。這個方法對於啟動開發環境特別有用。

    如要讓 Cloud SQL 驗證 Proxy 使用 gcloud CLI 憑證,請使用下列指令驗證 gcloud CLI:

    gcloud auth application-default login
  5. 與 Compute Engine 執行個體相關聯的憑證。

    如果您是從 Compute Engine 執行個體連線至 Cloud SQL,Cloud SQL 驗證 Proxy 可以使用與 Compute Engine 執行個體相關聯的服務帳戶。如果服務帳戶具備 Cloud SQL 執行個體的必要權限,Cloud SQL 驗證 Proxy 就會成功驗證。

    如果 Compute Engine 執行個體與 Cloud SQL 執行個體位於相同專案,Compute Engine 執行個體的預設服務帳戶就會具備驗證 Cloud SQL 驗證 Proxy 所需的權限。如果兩個執行個體位於不同專案,您必須將 Compute Engine 執行個體的服務帳戶新增至 Cloud SQL 執行個體所屬專案。

  6. 環境的預設服務帳戶

    如果 Cloud SQL Auth Proxy 無法在先前提及的任何位置找到憑證,就會依循「設定伺服器對伺服器正式版應用程式的驗證作業」一文所述的邏輯。有些環境 (例如 Compute Engine、App Engine 等) 會提供預設服務帳戶,讓應用程式可用來進行預設驗證。如果您使用預設服務帳戶,該帳戶必須具備角色和權限中所述的權限。 如要進一步瞭解 Google Cloud 的驗證方法,請參閱驗證總覽

建立服務帳戶

  1. 前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。

    前往「Service accounts」(服務帳戶)

  2. 選取含有 Cloud SQL 執行個體的專案。
  3. 按一下「建立服務帳戶」
  4. 在「Service account name」欄位中,輸入服務帳戶的描述性名稱。
  5. 將「服務帳戶 ID」變更為專屬且可辨識的值,然後點選「建立並繼續」
  6. 按一下「請選取角色」欄位,然後選取下列其中一個角色:
    • Cloud SQL > Cloud SQL 用戶端
    • Cloud SQL > Cloud SQL 編輯器
    • Cloud SQL > Cloud SQL 管理員
  7. 按一下「Done」(完成),即完成建立服務帳戶。
  8. 按一下新服務帳戶的動作選單,然後選取「管理金鑰」
  9. 依序點選「Add key」下拉式選單和「Create new key」
  10. 確認金鑰類型為 JSON,然後按一下「建立」

    私密金鑰檔案會下載到您的機器中,您可以將它移到其他位置。請妥善保護這個金鑰檔案。

使用私人 IP 的 Cloud SQL 驗證 Proxy

如要使用私人 IP 連線至 Cloud SQL 執行個體,Cloud SQL 驗證 Proxy 必須位於可存取與執行個體相同虛擬私人雲端網路的資源中。

Cloud SQL Auth Proxy 會使用 IP 連線至您的 Cloud SQL 執行個體。根據預設,Cloud SQL 驗證 Proxy 會嘗試使用公開的 IPv4 位址進行連線。

如果您的 Cloud SQL 執行個體只有私人 IP,或是已設定公開和私人 IP,而您想讓 Cloud SQL Auth Proxy 使用私人 IP 位址,則必須在啟動 Cloud SQL Auth Proxy 時提供下列選項:

--private-ip

在已啟用 Private Service Connect 的執行個體中使用 Cloud SQL 驗證 Proxy

您可以使用 Cloud SQL 驗證 Proxy 連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體。

Cloud SQL Auth Proxy 是連接器,可提供安全的存取方式存取這個執行個體,而不需要授權網路或設定 SSL。

如要允許 Cloud SQL 驗證 Proxy 用戶端連線,您必須設定 DNS 記錄,與為執行個體提供的建議 DNS 名稱 相符。DNS 記錄是 DNS 資源與網域名稱之間的對應。

如要進一步瞭解如何使用 Cloud SQL Auth Proxy 連線至已啟用 Private Service Connect 的執行個體,請參閱「使用 Cloud SQL Auth Proxy 連線」一文。

在個別程序中執行 Cloud SQL 驗證 Proxy

在單獨的 Cloud Shell 終端機程序中執行 Cloud SQL 驗證 Proxy 可能很有用,可避免其控制台輸出內容與其他程式的輸出內容混淆。請使用下方顯示的語法,在個別程序中叫用 Cloud SQL 驗證 Proxy。

Linux

在 Linux 或 macOS 上,請在指令列上使用尾隨 &,在個別程序中啟動 Cloud SQL 驗證 Proxy:

./cloud-sql-proxy INSTANCE_CONNECTION_NAME
  --credentials-file PATH_TO_KEY_FILE &

Windows

在 Windows PowerShell 中,使用 Start-Process 指令在個別程序中啟動 Cloud SQL 驗證 Proxy:

Start-Process --filepath "cloud-sql-proxy.exe"
  --ArgumentList "
  --credentials-file PATH_TO_KEY_FILEINSTANCE_CONNECTION_NAME"

在 Docker 容器中執行 Cloud SQL 驗證 Proxy

如要在 Docker 容器中執行 Cloud SQL 驗證 Proxy,請使用可從 Google Container Registry 取得的 Cloud SQL 驗證 Proxy Docker 映像檔。您可以使用下列指令安裝 Cloud SQL 驗證 Proxy Docker 映像檔:

docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0

您可以使用 TCP 通訊端或 Unix 通訊端啟動 Cloud SQL Auth Proxy,並使用下列指令。

TCP 通訊端

    docker run -d \
      -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \
      -p 127.0.0.1:5432:5432 \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 \
      --address 0.0.0.0 \
      --credentials-file /path/to/service-account-key.json \
      INSTANCE_CONNECTION_NAME

Unix 通訊端

    docker run -d \
      -v /PATH_TO_HOST_TARGET:/PATH_TO_GUEST_TARGET \
      -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 --unix-socket /cloudsql \
      --credentials-file /path/to/service-account-key.json/PATH_TO_KEY_FILE \
      INSTANCE_CONNECTION_NAME

如果您要使用將容器最佳化的映像檔,請使用可寫入的目錄來取代 /cloudsql,例如:

v /mnt/stateful_partition/cloudsql:/cloudsql

如果您要使用 Compute Engine 執行個體提供的憑證,請勿加入 credential_file 參數和 -v PATH_TO_KEY_FILE:/path/to/service-account-key.json 這一行指令列。

以服務形式執行 Cloud SQL 驗證 Proxy

您可以將 Cloud SQL 驗證 Proxy 設為背景服務,用於本機開發和實際工作負載。在開發期間,如果需要存取 Cloud SQL 執行個體,您可以在背景啟動服務,並在完成後停止服務。

對於實際工作負載,Cloud SQL 驗證 Proxy 目前不提供內建的支援,無法以 Windows 服務的形式執行,但可使用第三方服務管理員以服務形式執行。舉例來說,您可以使用 NSSM 將 Cloud SQL 驗證 Proxy 設定為 Windows 服務,NSSM 會監控 Cloud SQL 驗證 Proxy,並在該 Proxy 停止回應時自動重新啟動。詳情請參閱 NSSM 說明文件

強制使用 Cloud SQL 驗證 Proxy

使用 ConnectorEnforcement 在 Cloud SQL 中啟用 Cloud SQL 驗證 Proxy。

如果您使用的是啟用 Private Service Connect 的執行個體,則有以下限制。如果執行個體已啟用連接器強制執行,您就無法為該執行個體建立唯讀備用資源。同樣地,如果執行個體有唯讀備用資源,就無法為該執行個體啟用連接器強制執行。

gcloud

下列指令會強制使用 Cloud SQL 連接器。

    gcloud sql instances patch INSTANCE_NAME \
    --connector-enforcement REQUIRED
  

如要停用強制執行,請使用下列程式碼行: --connector-enforcement NOT_REQUIRED 更新不會觸發重新啟動。

REST v1

下列指令會強制使用 Cloud SQL 連接器

使用任何要求資料之前,請先替換以下項目:

  • project-id:專案 ID。
  • instance-id:執行個體 ID。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings": {                     
    "connectorEnforcement": "REQUIRED"    
  }                                             
}   

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

如要停用強制執行功能,請改用 "connectorEnforcement": "NOT_REQUIRED"。更新不會觸發重新啟動。

REST v1beta4

下列指令會強制使用 Cloud SQL 連接器。

使用任何要求資料之前,請先替換以下項目:

  • project-id:專案 ID。
  • instance-id:執行個體 ID。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings": {
    "connectorEnforcement": "REQUIRED"
  }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

如要停用強制執行功能,請改用 "connectorEnforcement": "NOT_REQUIRED"。更新不會觸發重新啟動。

使用 Cloud SQL 驗證 Proxy 的提示

叫用 Cloud SQL 驗證 Proxy

所有 Proxy 叫用範例都會在背景啟動 Cloud SQL 驗證 Proxy,因此會傳回提示。請將該 Cloud Shell 終端機保留給 Cloud SQL 驗證 Proxy,以免其輸出內容與其他程式的輸出內容混淆。此外,Cloud SQL 驗證 Proxy 的輸出內容可協助您診斷連線問題,因此記錄檔中記錄這些內容可能會很有幫助。如果您未在背景中啟動 Cloud SQL 驗證 Proxy,除非重新導向,否則輸出內容會傳送至標準輸出。

您不必使用 /cloudsql 做為 Cloud SQL 驗證 Proxy 通訊端的目錄。(之所以選擇這個目錄名稱,是為了將名稱與 App Engine 連線字串的差異減到最低程度)。不過,如果您變更目錄名稱,請盡量縮短整體長度,因為目錄名稱會整合至較長的字串中,而該字串的長度受限於作業系統的限制。這取決於系統,但通常介於 91 到 108 個字元之間。在 Linux 上,長度通常會定義為 108,您可以使用下列指令進行檢查:

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

使用 Cloud SQL 驗證 Proxy 連線至多個執行個體

您可以使用一個本機 Cloud SQL 驗證 Proxy 用戶端連線至多個 Cloud SQL 執行個體。執行此動作的方式視您使用的是 Unix 通訊端還是 TCP 而定。

Unix 通訊端

如要將 Cloud SQL 驗證 Proxy 連線至多個執行個體,請將每個執行個體的連線名稱做為引數,以空格分隔的清單形式提供給 Cloud SQL 驗證 Proxy。Cloud SQL 驗證 Proxy 會在啟動時連線至每個執行個體。

您可以使用指定目錄中的套接字連線至各個執行個體。

例如:

      ./cloud-sql-proxy --unix-socket /cloudsql \
      myProject:us-central1:myInstance myProject:us-central1:myInstance2 &
      psql -U myUser -h /cloudsql/myProject:us-central1:myInstance2
  

TCP 通訊端

使用 TCP 連線時,您會在電腦上指定一個通訊埠,讓 Cloud SQL 驗證 Proxy 監聽每個 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 "myProject:us-central1:myInstance?port=5432" \
    "myProject:us-central1:myInstance2?port=1234"

    # Connect to "myInstance" using port 5432 on your machine:
    psql -U myUser -h 127.0.0.1  --port 5432

    # Connect to "myInstance2" using port 1234 on your machine:
    psql -U myUser -h 127.0.0.1  --port 1234
  

排解 Cloud SQL 驗證 Proxy 連線問題

Cloud SQL 驗證 Proxy Docker 映像檔是以特定版本的 Cloud SQL 驗證 Proxy 為基礎。當 Cloud SQL 驗證 Proxy 推出新版本時,請拉取新版本的 Cloud SQL 驗證 Proxy Docker 映像檔,以便保持環境的最新狀態。您可以檢查 Cloud SQL Auth Proxy GitHub 版本頁面查看 Cloud SQL Auth Proxy 的最新版本。

如果您在使用 Cloud SQL 驗證 Proxy 連線至 Cloud SQL 執行個體時遇到問題,請嘗試以下幾種方法找出問題原因。

  • 請確認您使用 IP 位址連線至執行個體,而非寫入端點

  • 檢查 Cloud SQL 驗證 Proxy 的輸出內容。

    通常,Cloud SQL 驗證 Proxy 的輸出內容可協助您判斷問題來源,以及如何解決問題。將輸出傳送至檔案,或者監看您啟動 Cloud SQL 驗證 Proxy 時所使用的 Cloud Shell 終端機。

  • 如果您在使用服務帳戶驗證 Cloud SQL 驗證 Proxy 時發生 403 notAuthorized 錯誤,請確定服務帳戶擁有正確的權限

    您可在「IAM」(身分與存取權管理) 頁面搜尋服務帳戶的 ID 以進行檢查。必須具備 cloudsql.instances.connect 權限。Cloud SQL AdminClientEditor 這些預先定義的角色具備這項權限。

  • 如果您是從 App Engine 連線,且收到 403 notAuthorized 錯誤,請檢查 app.yamlcloud_sql_instances 是否有拼寫錯誤或不正確的執行個體連線名稱。執行個體連線名稱的格式一律為 PROJECT:REGION:INSTANCE

    此外,請確認 App Engine 服務帳戶 (例如 [email protected]) 具有 Cloud SQL 用戶端身分與存取權管理角色。

    如果 App Engine 服務位於一個專案 (專案 A),而資料庫位於另一個專案 (專案 B),則這項錯誤表示 App Engine 服務帳戶未獲得位於資料庫專案 (專案 B) 的 Cloud SQL 用戶端身分與存取權管理角色。

  • 請務必啟用 Cloud SQL Admin API。

    若未啟用,您會在 Cloud SQL 驗證 Proxy 記錄中看見像是 Error 403: Access Not Configured 的輸出。

  • 如果要將多個執行個體納入執行個體清單,請務必使用逗號做為分隔符號,不包含空格。如果您使用 TCP,請確定每個執行個體都指定了不同的通訊埠。

  • 如果您使用 UNIX 通訊端連線,請確認通訊端是透過列出您啟動 Cloud SQL 驗證 Proxy 時提供的目錄建立。

  • 如果您有傳出防火牆政策,請確定該政策允許連線至目標 Cloud SQL 執行個體的 3307 通訊埠。

  • 您可以依序前往Google Cloud 控制台的「Operations」>「Logging」>「Logs Explorer」專區,查看記錄檔,確認 Cloud SQL 驗證 Proxy 是否已正確啟動。成功的作業如下所示:

    2021/06/14 15:47:56 Listening on /cloudsql/$PROJECT_ID:$REGION:$INSTANCE_NAME/5432 for $PROJECT_ID:$REGION:$INSTANCE_NAME
    2021/06/14 15:47:56 Ready for new connections
    
  • 配額問題:當 Cloud SQL Admin API 配額超出時,Cloud SQL 驗證 Proxy 會啟動並顯示以下錯誤訊息:

    There was a problem when parsing a instance configuration but ignoring due
    to the configuration. Error: googleapi: Error 429: Quota exceeded for quota
    metric 'Queries' and limit 'Queries per minute per user' of service
    'sqladmin.googleapis.com' for consumer 'project_number:$PROJECT_ID.,
    rateLimitExceeded
    

    應用程式連線至 Proxy 後,Proxy 會回報以下錯誤:

    failed to refresh the ephemeral certificate for $INSTANCE_CONNECTION_NAME:
    googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit
    'Queries per minute per user' of service 'sqladmin.googleapis.com' for
    consumer 'project_number:$PROJECT_ID., rateLimitExceeded
    

    解決方案:找出配額問題的來源 (例如應用程式誤用連接器,並不必要地建立新連線),或是與支援團隊聯絡,要求提高 Cloud SQL Admin API 配額。如果在啟動時出現配額錯誤,您必須重新部署應用程式,才能重新啟動 Proxy。如果配額錯誤是在啟動後出現,則不必重新部署。

後續步驟