プライベートVMからCloud SQLインスタンスに接続する方法
はじめに
Cloud SQLは、Google Cloud Platform (GCP) で提供されるフルマネージドなリレーショナルデータベースサービスです。
しかし、パブリックIPアドレスを使用してCloud SQLに接続する場合、セキュリティ上のリスクを伴う可能性があります。また、パブリックIPアドレスを使用すると、通信経路が暗号化されていない場合は、データの漏洩や改ざんの危険性もあります。
そこで、プライベートVMからCloud SQLインスタンスに接続する方法を紹介します。プライベートVMとは、パブリックIPアドレスを持たないVMインスタンスのことです。プライベートVMからCloud SQLインスタンスに接続するには、以下の手順を実行します。
1. Cloud SQLインスタンスの作成
まず、Cloud SQLインスタンスを作成します。
ここでは、PostgreSQL を使用することを前提とします。Cloud SQLインスタンスの作成方法は、公式ドキュメント を参照してください。
作成時に注意する点は、プライベートIPアドレス を有効にすることです。プライベートIPアドレスを有効にすると、Cloud SQLインスタンスはVPCネットワーク内でのみアクセス可能になります。VPCネットワークとは、GCP上で仮想的に構築されるプライベートなネットワークのことです。VPCネットワーク内では、IPアドレスやファイアウォールルールなどを自由に設定できます。
プライベートIPアドレスを有効にするには、Cloud SQLインスタンスの作成画面で、「接続」タブを選択し、「プライベートIP」セクションで「構成」ボタンをクリックします。次に、「VPC ネットワーク」で使用したいVPCネットワークを選択し、「完了」ボタンをクリックします。最後に、「作成」ボタンをクリックしてCloud SQLインスタンスを作成します。
2. プライベートVMの作成
次に、プライベートVMを作成します。プライベートVMの作成方法は、公式ドキュメント を参照してください。
作成時に注意する点:
- 外部IP を「なし」に設定すること
- Cloud SQL API へのアクセスを許可すること
外部IPを「なし」に設定すると、プライベートVMはパブリックIPアドレスを持たず、VPCネットワーク内でのみアクセス可能になります。
外部IPを「なし」に設定するには、プライベートVMの作成画面で、「詳細オプション」タブを選択し、「ネットワーキング」の「ネットワーク インターフェース」セクションで「外部IPv4アドレス」を「なし」に設定します。最後に、「作成」ボタンをクリックしてプライベートVMを作成します。
Cloud SQL API へのアクセスを許可するには、プライベートVMの作成画面で、「アクセス権」タブを選択し、「Cloud SQL」の「Cloud SQL API」セクションで「Cloud SQL API」を「オン」に設定します。
3. プライベートVMからCloud SQLインスタンスに接続する
Compute Engine VM に対して 2 つの SSH 接続を開きます。1 つの接続は、Cloud SQL Auth Proxy を実行するために使用され、もう 1 つの接続は、プライベート VM から Cloud SQL に接続するために使用されます。
3.1. psqlとCloud SQL Proxy のインストール
一つ目のSSH接続で、psqlとCloud SQL Proxy をインストールします。Cloud SQL Auth Proxy は、プライベートVMからCloud SQLインスタンスに接続するために使用されます。
*プライベートVMが外部ネットワークをアクセスさせるために、Cloud NATが必要です。Cloud NATの設定方法は、公式ドキュメント を参照してください。
# psqlのインストール
sudo apt-get update
sudo apt-get install postgresql-client
# Cloud SQL Auth Proxy のインストール
sudo apt-get install wget
wget https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.0.0/cloud-sql-proxy.linux.amd64 -O cloud-sql-proxy
chmod +x cloud-sql-proxy
3.2. Cloud SQL Auth Proxy の起動
一つ目のSSH接続で、下記のコマンドを実行して、Cloud SQL Auth Proxy を起動します。
INSTANCE_CONNECTION_NAME は、Cloud SQLインスタンスの接続名です。Cloud SQLインスタンスの接続名は、Cloud SQLインスタンスの「概要」 「このインスタンスとの接続」にて確認できます。
./cloud-sql-proxy --private-ip INSTANCE_CONNECTION_NAME
# 例
xxx@instance-2:~$ ./cloud-sql-proxy --private-ip my-project:asia-northeast1:test-postgre-sql
2023/05/28 17:12:13 Authorizing with Application Default Credentials
2023/05/28 17:12:13 [my-project-1505-387921:asia-northeast1:test-postgre-sql] Listening on 127.0.0.1:5432
2023/05/28 17:12:13 The proxy has started successfully and is ready for new connections!
3.3. psql で Cloud SQL に接続
二つ目のSSH接続で、psql を使用して Cloud SQL に接続します。
psql "host=127.0.0.1 port=5432 sslmode=disable dbname=DB_NAME user=postgres"
# 例
xxx@instance-2:~$ psql "host=127.0.0.1 port=5432 sslmode=disable dbname=postgres user=postgres"
Password for user postgres:
psql (13.11 (Debian 13.11-0+deb11u1), server 15.2)
WARNING: psql major version 13, server major version 15.
Some psql features might not work.
Type "help" for help.
postgres=>
以上で、プライベートVMからCloud SQLに接続することができました。
まとめ
今回は、プライベートVMからCloud SQLに接続する方法を紹介しました。プライベートVMからCloud SQLに接続することで、プライベートIPアドレスを使用して、より安全にCloud SQLに接続することができます。
Discussion