Cloud SQL Auth Proxy について

ここでは、Cloud SQL Auth Proxy の基本的な概要と、プロキシ オプションについて説明します。

Cloud SQL Auth Proxy を使用する詳細な手順については、次のリンクからご使用の環境に該当するものをクリックしてください。

App Engine スタンダード環境または App Engine フレキシブル環境から Cloud SQL に接続する場合は、Cloud SQL Auth Proxy を使用する、または SSL を構成する必要はありません。

使ってみる

Google Cloud を初めて使用される方は、アカウントを作成して、実際のシナリオでの Cloud SQL のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイに使用できる無料クレジット $300 分を差し上げます。

Cloud SQL 無料トライアル

Cloud SQL Auth Proxy が提供する機能

Cloud SQL Auth Proxy を使用すると、承認済みネットワークSSL の構成を必要とせずに、安全にインスタンスへアクセスできます。

Cloud SQL Auth Proxy を使用して Cloud SQL インスタンスにアクセスする利点は次のとおりです。

  • 安全な接続: Cloud SQL Auth Proxy は、TLS 1.2 と 128 ビット AES 暗号を使用して、データベースとの間で送受信されるトラフィックを自動的に暗号化します。クライアントとサーバーの ID の確認には、SSL 証明書が使用されます。
  • 簡単な接続管理: Cloud SQL Auth Proxy が Cloud SQL との認証を処理するので、静的な IP アドレスを提供する必要がなくなります。

Cloud SQL Auth Proxy は新しい接続パスを提供しません。既存の IP 接続に依存します。プライベート IP を使用して Cloud SQL インスタンスに接続するには、Cloud SQL Auth Proxy がそのインスタンスと同じ VPC ネットワークにアクセスできるリソース上にある必要があります。

Cloud SQL Auth Proxy の仕組み

Cloud SQL Auth Proxy は、ローカル環境で動作するローカル クライアントがあることで機能します。アプリケーションは、データベースで使用される標準のデータベース プロトコルを使用して Cloud SQL Auth Proxy と通信します。Cloud SQL Auth Proxy は、セキュアなトンネルを使用して、サーバー上で動作しているコンパニオン プロセスと通信します。

Cloud SQL Auth プロキシは、どのポートでもリッスンできますが、ポート 3307 にのみ Cloud SQL インスタンスへの送信接続が作成されます。クライアント マシンに送信 ファイアウォール ポリシーがある場合は、Cloud SQL インスタンスの IP でポート 3307 への送信接続が許可されていることを確認します。

次の図は、Cloud SQL Auth Proxy が Cloud SQL に接続する方法を示しています。

クライアント ソフトウェアから SQL インスタンスに接続する Cloud SQL Auth Proxy の図。

Cloud SQL Auth Proxy を使用する際の要件

Cloud SQL Auth Proxy を使用するには、次の要件を満たす必要があります。

  • Cloud SQL API が有効になっている必要があります。
  • Cloud SQL Auth Proxy に Google Cloud 認証情報を指定する必要があります。
  • Cloud SQL Auth Proxy に有効なデータベース ユーザー アカウントとパスワードを指定する必要があります。
  • インスタンスでパブリック IPv4 アドレスが指定されているか、プライベート IP を使用するように構成されている必要があります。

    パブリック IP アドレスがすべての外部アドレスからアクセス可能である必要はありません(承認済みネットワークのアドレスとして追加する必要はありません)。

Cloud SQL Auth Proxy の起動オプション

Cloud SQL Proxy を起動する際には、次の情報を指定します。

  • 接続先の Cloud SQL インスタンス
  • Cloud SQL へ送信するためにアプリケーションから受信するデータをリッスンする場所
  • Cloud SQL に対するアプリケーションの認証に使用する認証情報を取得できる場所
  • 使用する IP アドレスのタイプ(必要な場合)

指定した Cloud SQL Auth Proxy の起動オプションによって、TCP ポートと Unix ソケットのどちらでリッスンするかが決まります。Unix ソケットでリッスンする場合は、選択した場所(通常は /cloudsql/ ディレクトリ)にソケットが作成されます。TCP の場合、Cloud SQL Auth Proxy は、デフォルトでは localhost でリッスンします。

引数 --help を指定して cloud_sql_proxy 実行可能ファイルを実行すると、起動オプションすべての一覧が表示されます。

Cloud SQL Auth Proxy は、ローカル環境の任意の場所にインストールできます。Cloud SQL Auth Proxy バイナリの場所は、アプリケーションからデータをリッスンする場所には影響しません。

認証でのサービス アカウントの使用

Cloud SQL Auth Proxy には認証が必要です。この目的でサービス アカウントを使用する利点は、特に Cloud SQL Auth Proxy 用の認証情報ファイルを作成できることと、Cloud SQL Auth Proxy が動作する間は、そのファイルが Cloud SQL Auth Proxy に明示的かつ永続的にリンクされることです。このため、Compute Engine インスタンスで実行していない本番環境インスタンスには、サービス アカウントを使用することをおすすめします。

複数のマシンから Cloud SQL Auth Proxy を呼び出す必要がある場合は、認証情報ファイルをシステム イメージで複製できます。

この方法を使用するには、認証情報ファイルを作成して管理する必要があります。resourcemanager.projects.setIamPolicy 権限を持つユーザー(プロジェクト オーナーなど)だけが、サービス アカウントを作成できます。Google Cloud ユーザーにこの権限がない場合は、他のユーザーにサービス アカウントを作成してもらうか、別の方法で Cloud SQL Auth Proxy を認証する必要があります。

認証情報ファイルの作成に関するヘルプについては、サービス アカウントを作成するをご覧ください。

サービス アカウントに必要な権限

サービス アカウントを使用して Cloud SQL Auth Proxy に認証情報を提示する場合は、十分な権限が付与されたサービス アカウントを作成する必要があります。よりきめ細かい Identity Access and Management(IAM)の役割を使用して Cloud SQL 権限を管理する場合は、サービス アカウントに cloudsql.instances.connect 権限を含む役割を付与する必要があります。この権限を含む事前定義された Cloud SQL のロールは次のとおりです。

  • Cloud SQL クライアント
  • Cloud SQL 編集者
  • Cloud SQL 管理者

以前のプロジェクトの役割(閲覧者、編集者、オーナー)を使用する場合、サービス アカウントには少なくとも編集者の役割が付与されている必要があります。

Cloud SQL インスタンスを指定するためのオプション

Cloud SQL Auth Proxy に接続するインスタンスを指定するには、いくつかの方法があります。明示的な方法と暗黙的な方法があります。一部の構成では、Cloud SQL Auth Proxy は接続リクエストに基づいて接続するため、接続先のインスタンスを事前に Cloud SQL Auth Proxy に指定する必要はありません。

インスタンス指定のオプションは、オペレーティング システムと環境によって異なります。

オプション 利点 注意点と要件 Linux / macOS
(Unix ソケット)
Java Windows
FUSE
Filesystem in User Space
接続リクエストに基づく動的なソケット作成。インスタンスを変化してもプロキシの再起動は必要ありません。 FUSE をインストールする必要があります。 対応 × × -fuse フラグを使用します。
自動インスタンス検出 インスタンスを指定する必要はありません。デフォルト プロジェクト内のすべてのインスタンスに対してソケットが作成されます。 Cloud SQL Auth Proxy API の使用量が増加します。Cloud SDK をインストールし、デフォルトのプロジェクト セットで認証する必要があります。新しいインスタンスを追加するには、Cloud SQL Proxy を再起動する必要があります。 対応 × × 本番環境インスタンスには推奨されません。
プロジェクト検出 インスタンスを指定する必要はありません。指定したプロジェクト内のすべてのインスタンスに対してソケットが作成されます。 Cloud SQL Auth Proxy API の使用量が増加します。Cloud SDK をインストールして認証する必要があります。新しいインスタンスを追加するには、Cloud SQL Proxy を再起動する必要があります。 対応 × × -projects パラメータを使用します。本番環境インスタンスには推奨されません。
Cloud SQL Proxy 呼び出しで指定されるインスタンス インスタンスのリストは既知で静的です。 新しいインスタンスを追加するには、Cloud SQL Proxy を再起動する必要があります。 対応 TCP ソケットで対応 TCP ソケットで対応 -instances パラメータを使用します。複数のインスタンスを指定する場合、スペースなしのカンマ区切りのリストを使用します。詳細
Compute Engine メタデータでのインスタンス指定 Cloud SQL Auth Proxy を再起動しなくても、メタデータの値を変更することでインスタンス リストを更新できます。 Compute Engine でのみ使用できます。 対応 TCP ソケットで対応 TCP ソケットで対応 -instances_metadata フラグを使用します。詳細
呼び出しと接続文字列の例をご覧ください

Cloud SQL Auth Proxy の最新状態の維持

Google は、Cloud SQL Auth Proxy の新しいバージョンを随時リリースしています。最新バージョンは Cloud SQL Auth Proxy GitHub リリースページで確認できます。また、プロキシの今後のリリースについては、Google Groups Cloud SQL のお知らせフォーラムで通知されます。

API の使用

Cloud SQL Auth Proxy は、Cloud SQL Admin API に対してリクエストを発行します。これらのリクエストは、プロジェクトの API 割り当て量にカウントされます。

API 使用率は、Cloud SQL Auth Proxy の起動時に最高値となります。これは特に、インスタンスの自動検出、または -projects パラメータを使用している場合に顕著です。Cloud SQL Auth Proxy は動作中に、接続されているインスタンスごとに 1 時間あたり 2 つの API 呼び出しを発行します。

Cloud SQL Auth Proxy 用の特別なユーザー アカウントの作成について

Cloud SQL Auth Proxy を使用してインスタンスに接続する場合は、インスタンスへのログインに使用するユーザー アカウントを指定します。この場合、任意のデータベース ユーザー アカウントを使用することができます。ただし、Cloud SQL Auth Proxy は常に Cloud SQL Auth Proxy 以外ではアクセスできないホスト名から接続するので、Cloud SQL Auth Proxy だけが使用できるユーザー アカウントを作成できます。このようにすると、インスタンスまたはデータのセキュリティを損なうことなく、パスワードを使用しないでこのアカウントを指定できるという利点があります。

Cloud SQL Auth Proxy 接続用のユーザー アカウントを作成するには、ホスト名を 'cloudsqlproxy~[IP_ADDRESS]' と指定します。また、IP アドレスのワイルドカードを使用して、'cloudsqlproxy~%' にすることもできます。完全なユーザー アカウント名は次のようになります。

'[USER_NAME]'@'cloudsqlproxy~%'

または

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

ユーザーの作成については、ユーザーを作成して管理するをご覧ください。Cloud SQL でユーザー アカウントがどのように使用されるかについては、ユーザーをご覧ください。MySQL ユーザー アカウントについては、MySQL のドキュメントの初期 MySQL アカウントの保護をご覧ください。

Cloud SQL Auth Proxy のパラメータとフラグ

Cloud SQL Auth Proxy は、起動時に複数のフラグとパラメータを受け取ります。これらのオプションにより、Cloud SQL Auth Proxy が Cloud SQL との通信に使用するソケットを作成する場所と方法、および認証の方法が決まります。

Cloud SQL Auth Proxy のオプションのヘルプについては、次の情報をご覧ください。

Cloud SQL Auth Proxy での FUSE の使用方法

FUSEは、「Filesystem in User Space」の略です。Cloud SQL Auth Proxy の呼び出し方法によっては、Cloud SQL との接続に使用するソケットを作成するために、必要に応じて、FUSE を使用できます。

Compute Engine またはローカル開発環境から接続するときは、Cloud SQL Auth Proxy は次のように FUSE を使用して、Cloud SQL インスタンスにアクセスします。

  • Cloud SQL Auth Proxy によって、「/cloudsql」ディレクトリが FUSE としてマウントされます。

  • プロセス(mysql など)が $INSTANCE という名前のファイルの検索を試みます。

  • Cloud SQL Auth Proxy は、リクエストを傍受し、/cloudsql/$INSTANCE がファイル システム上のどこかにある Unix ソケットを指し示すシンボリック リンクであることを返します。

  • プロセス(mysql など)はリンクに従って Unix ソケットを開いてプロキシ処理を続けます。

FUSE をインストールする

Linux の場合:

FUSE が機能するには、fusermount プログラムとカーネル モジュールが必要です。/dev/fuse/ ファイルを見ることによって、このプログラムがインストールされているかどうかを確認できます。fusermount がシステム上にない場合は、パッケージ マネージャーを使用してインストールするか、ソースからコンパイルできます。

macOS の場合:

FUSE for macOS をインストールします。

本番環境での Cloud SQL Auth Proxy の使用

本番環境で Cloud SQL Auth Proxy を使用している場合は、Cloud SQL Auth Proxy でアプリケーションに必要な可用性を確保するための手順がいくつかあります。

Cloud SQL Auth Proxy が永続サービスとして実行されていることを確認する

Cloud SQL Auth Proxy プロセスが停止すると、そのプロキシを介した既存の接続がすべて切断され、アプリケーションは Cloud SQL Auth Proxy を使用して Cloud SQL インスタンスへの接続を確立できなくなります。このシナリオを回避するには、Cloud SQL Auth Proxy を永続的なサービスとして動作させ、Cloud SQL Auth Proxy がなんらかの理由で終了した場合には、自動的に再起動されるようにします。このためには、systemdupstartsupervisor などのサービスを使用します。Windows オペレーティング システムの場合は、Cloud SQL Auth Proxy を Windows サービスとして動作させます。通常、Cloud SQL Auth Proxy に、アプリケーション プロセスと同じ稼働時間要件があることを確認してください。

アプリケーションに必要な Cloud SQL Auth Proxy のコピー数

アプリケーション プロセスごとにプロキシ プロセスを作成する必要はありません。多くのアプリケーション プロセスが単一の Cloud SQL Auth Proxy プロセスを共有できます。ワークステーションまたは仮想マシンごとに 1 つの Cloud SQL Auth Proxy クライアント プロセスを実行します。

仮想マシンの自動スケーリングを使用している場合は、新しい仮想マシンの起動時に、常に仮想マシンに独自の Cloud SQL Auth Proxy が存在するように、仮想マシンの構成に Cloud SQL Auth Proxy が含まれていることを確認してください。

接続を制限するかプールするかにかかわらず、アプリケーションに必要な接続数の管理はユーザーが行います。Cloud SQL Auth Proxy によって、新しい接続の割合や永続的な接続の数が制限されることはありません。

Cloud SQL Auth Proxy の出力の削減

Cloud SQL Auth Proxy のログのサイズを削減する必要がある場合は、Cloud SQL Auth Proxy の起動時に -verbose=false を設定します。ただし、ログのサイズを削減すると、接続の問題を診断する際の Cloud SQL Proxy 出力の有効性が低下する点に留意してください。

フェイルオーバーが Cloud SQL Auth Proxy に及ぼす影響

高可用性向けに構成されたインスタンス上で Cloud SQL Auth Proxy を動作させている最中にフェイルオーバーが発生した場合、Cloud SQL Auth Proxy を介した接続は、IP 経由の接続と同様に影響を受けます。つまり、既存の接続がすべて失われるため、アプリケーションは新しい接続を確立する必要があります。ただし、手動による操作は必要ありません。アプリケーションは以前と同じ接続文字列を引き続き使用できます。

Cloud SQL Auth Proxy Docker イメージを最新の状態に保つ

Cloud SQL Auth Proxy Docker イメージは、Cloud SQL Auth Proxy の特定のバージョンに基づいています。Cloud SQL Auth Proxy の新しいバージョンが利用可能になったら、Cloud SQL Auth Proxy Docker イメージの新しいバージョンを pull して、環境を最新の状態に保ってください。Cloud SQL Auth Proxy の最新バージョンは Cloud SQL Auth Proxy GitHub リリースページで確認できます。

次のステップ