プライベートVMからCloud SQLインスタンスに接続する方法

2023/05/29に公開

はじめに

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インスタンスを作成します。

CloudSQL

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」を「オン」に設定します。

PrivateVM
PrivateVM

3. プライベートVMからCloud SQLインスタンスに接続する

Compute Engine VM に対して 2 つの SSH 接続を開きます。1 つの接続は、Cloud SQL Auth Proxy を実行するために使用され、もう 1 つの接続は、プライベート VM から Cloud SQL に接続するために使用されます。

SSH

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