🤖
VPC内でCloud SQL通信する
初めに
GCP環境のセキュリティを向上させるために Security Command Center を導入しチェックしたところ Cloud SQL にてパブリックIPを使われていることが検出されたため、プライベートIPを使った通信に切り替えるべく、その時の作業を忘備録的に残します。
設定箇所
Cloud SQLをVPC内で通信させるには以下の設定が必要です。
- Cloud SQL
- VPCネットワーク
- サブネット
- VPCネットワークピアリング
- プライベートサービスアクセス
また、Cloud RunやCloud Functionなどサーバレスな環境から接続する場合はそれらがVPC経由でプライベートアクセスできるようにするために、サーバレスVPCアクセスの設定も必要となります。
今回はその部分の設定は除きます。
設定
設定は今回はTerrafromから設定を行いました。リソースごとにTerraformのコードを書いておきます。
今回の設定は、VPCネットワークピアリングの設定で servicenetworking というCloudSQLなどのマネージドサービスのためのVPCを用意してGCEがある既存のVPCとのルートを作り、プライベートサービスアクセスでVPCピアリングで用意したVPCにサブネットを作りCloudSQLにプライベートIPを割り当てる形になります。
※各APIを有効にしておくこと
VPC
resource "google_compute_network" "private_network" {
provider = google-beta
name = "private-network"
auto_create_subnetworks = false
}
サブネットワーク
resource "google_compute_subnetwork" "subnetwork" {
name = "test-subnetwork"
ip_cidr_range = "10.2.0.0/16"
region = "us-central1"
network = google_compute_network.private_network.id
}
VPCネットワークピアリング
resource "google_compute_global_address" "private_ip_address" {
provider = google-beta
name = "private-ip-address"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = google_compute_network.private_network.id
}
プライベートサービスアクセス
resource "google_service_networking_connection" "private_vpc_connection" {
provider = google-beta
network = google_compute_network.private_network.id
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}
Cloud SQL
resource "google_sql_database_instance" "instance" {
provider = google-beta
name = "private-instance"
database_version = "POSTGRES_15"
region = "us-central1"
// Terraformでdestroyするときにエラーが出るので削除プロテクションは無効にする
deletion_protection = "false"
// プライベートサービスアクセスの作成に時間が掛かるので依存関係に含める
depends_on = [google_service_networking_connection.private_vpc_connection]
settings {
tier = "db-f1-micro"
ip_configuration {
ipv4_enabled = false // プライベートIP
private_network = google_compute_network.private_network.id
require_ssl= false
ssl_mode = "ALLOW_UNENCRYPTED_AND_ENCRYPTED"
}
}
}
まとめ
簡単ですが上記の設定でVPC経由でCloudSQLにアクセスできるようになります。
CloudSQL以外にもプライベートアクセスをサポートするサービスは複数あります。
サポート対象のサービス
またサーバレスのサービスの場合は上記にもあるように別の設定サーバレスVPCアクセスが必要となります。
使用するサービスで使い分けてください。
以上、皆さんの役立てれば幸いです。
Discussion