GoogleCloudPlatform/cloudsql-proxy
Cloud SQL Auth proxyは、Cloud SQLインスタンスに接続するときにIAMベースの認証と暗号化
Cloud SQLインスタンスへの接続の詳細については、”接続の概要”ページ、またはCloud SQLプロキシの動作の詳細については、”プロキシについて”ページを参照してくださ
: すでに存在しない場合、プロキシはCloud SQLインスタンスへのネットワークパスを提供できません(たとえば、すでにVPCにアクセスできない場合、プロキシはVpc
- インストール
- コンテナ画像
- ソースからインストール
- 使用法
- TCPソケットの例
- Unixソケットの例
- プライベートIP例
- 認証情報
- CLI Flags
- 認証フラグ
- -credential_file
- -token
- -enable_iam_login
- 接続フラグ”を参照してください
- -instances="project1:region:instance1,project3:region:instance1"
- -fuse
- -instances_metadata=metadata_key
- -max_connections
- 追加フラグ
- -ip_address_types=PUBLIC,PRIVATE
- -term_timeout=30s
- -skip_failed_instance_config
- -log_debug_stdout=true
- -structured_logs
- Kubernetesサイドカーとして実行する
- リファレンスドキュメント
- 貢献
- サードパーティ
- Helmを使用したKubernetesクラスターサービス
- .Netプロキシラッパー(Nugetパッケージ)
インストール
64ビットLinuxの場合は、次のコマンドを実行します:
wget https://storage.googleapis.com/cloudsql-proxy/v1.19.2/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxychmod +x cloud_sql_proxy
追加のOSとアーキテクチャのためのリリースとreleasespageにあります。
代替ディストリビューションについては、以下のサードパーティの下を参照してください。
コンテナ画像
次のgoogle Cloud Container Registryリポジトリから利用可能なプロキシのコンテナ化されたバージョンがあります:
gcr.io/cloudsql-docker/gce-proxy
us.gcr.io/cloudsql-docker/gce-proxy
eu.gcr.io/cloudsql-docker/gce-proxy
asia.gcr.io/cloudsql-docker/gce-proxy
各画像には、関連するプロキシバージョンがタグ付けされています。 現在サポートされているタグは次のとおりです:
-
$VERSION
– デフォルトの画像(推奨) -
$VERSION-alpine
– ベースイメージとしてalpine:3
を使用します(v1.17以降のみサポートされています) -
$VERSION-buster
– ベースイメージとしてdebian:buster
を使用します(v1.17以降のみサポートされています)
プロキシの最新バージョンを使用し、バージョンを更新することをお勧めします定期的に。 ただし、特定のタグに固定することをお勧めし、タグを使用しないようにしてください。 注:タグ付けされたバージョンは、プロキシのバージョンのみです。 Baseimagesの変更は、メジャーバージョン以外の増分であっても、特定の設定を破る可能性があります。 そのため、展開前に変更をテストし、automatedrollbacksを使用して潜在的な障害を元に戻すことをお勧めします。
ソースからインストール
ソースからインストールするには、Goinstallの最新バージョンがインストールされていることを確認します。
次に、単純に実行します:
go get github.com/GoogleCloudPlatform/cloudsql-proxy/cmd/cloud_sql_proxy
cloud_sql_proxy
はgo get
が完了した後に$GOPATH/bin
に配置されます。
使用法
次のすべての呼び出しは、有効な資格情報が環境に存在することを前提としています。 次の例はすべてINSTANCE_CONNECTION_NAME
を参照しており、myproject:myregion:myinstance
の形式をとります。 INSTANCE_CONNECTION_NAME
を検索するには、gcloud sql instances describe <INSTANCE_NAME>
を実行します。INSTANCE_NAME
はデータベースインスタンスの名前です。
TCPソケットの例
# Starts the proxy listening on 127.0.0.1:5432cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432
# Starts the proxy listening on on port 5432 on *all* interfacescloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:5432
Unixソケットの例
# The proxy will mount a Unix domain socket at /cloudsql/<INSTANCE_CONNECTION_NAME># Note: The directory specified by `-dir` must exist.cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME>
プライベートIP例
cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 -ip_address_types=PRIVATE
プライベートIPを使用して接続するには、yourprojectのVPCを介してアクセスできる必要があります。 詳細については、”プライベートIP要件”を参照してください。
認証情報
Cloud SQLプロキシは、Cloud IAMアカウントを使用してaCloud SQLインスタンスに対する接続を承認します。 プロキシは、次の順序でこれらのアカウントの資格情報をソースします:
-
-credential_file
フラグ -
-token
フラグ -
GOOGLE_APPLICATION_CREDENTIALS
環境変数に格納されているパスにあるサービスアカウントキー。 - gcloudユーザーの資格情報(以下から設定)
gcloud auth login
) - アプリケーションのデフォルト認証情報
注:Cloud SQLデータベースに接続するアカウントには、以下のいずれかのIAMロールが必要です:
- Cloud SQLクライアント(優先)
- Cloud SQLエディタ
- Cloud SQL Admin
または、次のIAM権限を手動で割り当てることができます:
cloudsql.instances.connect
cloudsql.instances.get
詳細については、”Cloud SQLのロールと権限”を参照してください。
プロキシがCompute Engine VMのデフォルトserviceaccountで認証する場合、VMには少なくともsqlservice.admin
APIスコープ(つまり”https://www.googleapis.com/auth/sqlservice.admin”)が必要であり、関連するprojectmustにはSQL Admin APIが有効になっている必要が 既定のサービスアカウントには、ターゲットSQLインスタンスのすべてのプロジェクトに対するライター権限または編集者権限も最小である必要があります。
CLI Flags
Cloud SQL Auth proxyは、接続するインスタンスと接続動作を設定するためにいくつかの引数を取ります。 プロキシでサポートされているフラグの完全なリストについては、cloud_sql_proxy -help
を使用します。
認証フラグ
-credential_file
接続を承認または認証するためにプロキシが使用するJSONサービスアカウントキーへのパスを指定します。
-token
設定すると、プロキシはこのベアラートークンを承認に使用します。
-enable_iam_login
プロキシがCloud SQL IAMデータベース認証を使用できるようにします。 これにより、プロキシはデータベースユーザー認証にIAMアカウント認証情報を使用します。 詳細については、”Cloud SQL IAMデータベース認証の概要
接続フラグ”を参照してください
-instances="project1:region:instance1,project3:region:instance1"
-dir
内で開くインスタンスのコンマ区切りのリスト。 また、TCPポートの拡張とデフォルトのUnixドメインソケットの名前の変更もサポートしています。 両方が提供されている場合には、INSTANCES環境変数を介して同じリストを提供することができます-proxyはコマンドラインフラグを使用します。
TCPソケットを使用した例
:
./cloud_sql_proxy -instances=my-project:us-central1:sql-inst=tcp:3306 &mysql -u root -h 127.0.0.1
Unixソケットの使用:
./cloud_sql_proxy -dir=/cloudsql -instances=my-project:us-central1:sql-inst &mysql -u root -S /cloudsql/my-project:us-central1:sql-inst
カスタムUnixソケット名を指定するには:
./cloud_sql_proxy -dir=/cloudsql \ -instances=my-project:us-central1:sql-inst=unix:custom_socket_name &mysql -u root -S /cloudsql/custom_socket_name
Unixソケットのカスタムの場所を指定するには(オーバーライド-dir
):
./cloud_sql_proxy -dir=/cloudsql \ -instances=my-project:us-central1:sql-inst=unix:/my/custom/sql-socket &mysql -u root -S /my/custom/sql-socket
-fuse
/dev/fuse
とfusermount
バイナリへのアクセスが必要です。 オプションの-fuse_tmp
フラグは、一時ファイルを配置する場所を指定できます。 -dir
で指定されたディレクトリがマウントされています。
例
-fuse
を使用すると、事前にインスタンス名を指定する必要はありません:
./cloud_sql_proxy -dir=/cloudsql -fuse &mysql -u root -S /cloudsql/my-project:us-central1:sql-inst
-instances_metadata=metadata_key
GCEでのみ使用可能です。 Given gceメタデータキーは、-dir
で開くインスタンスのリストに対してポーリングされます。 メタデータキーはrelativefromcomputeMetadata/v1/
です。 値の形式は’instances’フラグと同じです。 つまり、プロキシの実行中であっても、themetadata値への変更は-dir
に反映されます。インスタンスがリストから削除されると、対応するソケットも-dir
から削除されます(-instances
でも指定されていない限り)が、このインスタンスへの既存の接続は
例
./cloud_sql_proxy -dir=/cloudsql \ -instances_metadata instance/attributes/<custom-metadata-key> &mysql -u root -S /cloudsql/my-project:us-central1:sql-inst
注:-instances
と-instances_metadata
は同時に使用できますが、-fuse
フラグとは互換性がありません。
-max_connections
指定されている場合、newconnectionsを拒否する前に確立する接続の最大数。 デフォルトは0(制限なし)です。
追加フラグ
-ip_address_types=PUBLIC,PRIVATE
インスタンスに接続するための優先IPタイプのコンマ区切りのリスト。 たとえば、これをPRIVATEに設定すると、プロキシはインスタンスの関連付けられたプライベートIPを使用してinstancesに接続するように強制されます。 デフォルトは次のとおりです。PUBLIC,PRIVATE
-term_timeout=30s
プロキシをシャットダウンする前に接続が閉じるのを待つ時間。デフォルトは0です。
-skip_failed_instance_config
このフラグを設定すると、インスタンス構成中にエラーが発生した場合にプロキシが終了しなくなります。 これは、プロキシが再起動すると他のインスタンスが動作する可能性がありますが、一部のインスタンスが正しく設定される可能性があ
-log_debug_stdout=true
これは、標準エラーの代わりに標準出力に非エラー出力を記録することです。 たとえば、接続関連のメッセージをエラーとしてログに記録したくない場合は、thisフラグをtrueに設定します。 デフォルトはfalseです。
-structured_logs
すべてのログ出力を、level、ts、caller、msgのキーを使用してJSONとして書き込みます。 たとえば、起動メッセージは次のようになります:
{"level":"info","ts":1616014011.8132386,"caller":"cloud_sql_proxy/cloud_sql_proxy.go:510","msg":"Usinggcloud's active project: "}
Kubernetesサイドカーとして実行する
googlekubernetesエンジンから接続するだけでなく、ここの例を参照してください。
リファレンスドキュメント
- Cloud SQL
- Cloud SQL Auth proxyドキュメント
- Cloud SQL Auth proxy Quickstarts
- Cloud SQLコードサンプル
- Cloud SQL Auth proxyパッケージドキュメント
貢献
詳細については、貢献文書を参照してください。
このプロジェクトはコントリビューターコードでリリースされていることに注意してくださいConduct.By このプロジェクトに参加すると、その条件を遵守することに同意します。 詳細については、行動のSeeContributorコード。
サードパーティ
警告:これらのディストリビューションはGoogleによって公式にサポートされていません。Homebrew
ここにCloud SQL Auth proxyのHomebrew式があります。
Helmを使用したKubernetesクラスターサービス
以下の手順に従ってください。
このチャートはデプロイメントとサービスを作成しますが、theproxyをサイドカーコンテナとしてポッドにデプロイすることをお勧めします。
.Netプロキシラッパー(Nugetパッケージ)
Nuget経由でインストールし、theseinstructionsに従います。