業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【Hakkyの社内Wiki】Strapi
クラウドとオンプレの違いAIシステム導入時におすすめのクラウドシステムスクレイピングのためのプロキシサーバのAPI
TerraformでGCPからAWSのリソースにアクセスするGoogle Cloudとは?
AI

執筆者:Handbook編集部

プライベートIPのみを持つCloud SQLにVMインスタンスを踏み台にして接続する方法

クラウド環境において、外部からのアクセスを制限するために、Cloud SQL インスタンスにはプライベート IP しか付与されない場合があります。そのため、VM などの外部からのアクセスを許可する必要がある場合、どのように接続するかが問題となります。

そこで本記事では、VM を踏み台として Cloud SQL に接続する方法について解説します。

目的

本記事の目的は、Cloud SQL インスタンスにプライベート IP しか付与されていない場合に、VM を用いて Cloud SQL に接続する方法を解説することです。

プライベート IP のみの Cloud SQL に VM を踏み台にして接続する流れ

VM を踏み台にして Cloud SQL に接続する流れを示します。

  1. GCP コンソールから VM インスタンスへ SSH 接続する
  2. VM インスタンス内で mysql client を使用して Cloud SQL インスタンスに接続する

必要なリソースを作成する

  1. (オプション)VM インスタンス用のサービスアカウント作成
  2. VM インスタンスを作成
    • 接続対象の Cloud SQL インスタンスと同じ VPC 内に作成します。今回はセキュリティ上の理由から外部 IP を持たない VM インスタンスを作成します。
    • 上記で作成したサービスアカウントか、Google が用意した VM インスタンス用のデフォルトのサービスアカウントを VM インスタンスに付与します。
  3. Firewall ルールを作成
    • ユーザが VM に SSH 接続するために IAP(Identity-Aware Proxy)という仕組みを使用します。IAP とは Google Cloud で提供されるセキュリティサービスの 1 つで、アプリケーションやサービスにアクセスする前に、ユーザーの認証と認可を行うためのプロキシサービスです。IAP からのネットワークを許可することでセキュアに VM インスタンスと通信を行うことが可能なります。
    • IAP からのネットワークを許可する Firewall ルールを作成し、VM インスタンスに付与したサービスアカウントを用いて VM インスタンスに Firewall ルールを適用します。
  4. NAT を作成
    • 今回作成した VM インスタンスは外部 IP を持たないので、NAT なしの場合インターネットに接続することができず、mysql client などの Cloud SQL に接続するためのソフトウェアをインストールできないので、NAT を作成します。

Terraform コード

前章で登場したリソースを Terraform でデプロイするためのコードを紹介します。

Cloud SQL に接続するのための踏み台として使う VM インスタンスに付与するサービスアカウント

resource "google_service_account" "cloud_sql_client" {
  project      = "プロジェクトID"
  account_id   = "作成するサービスアカウントのID"
  display_name = "作成するサービスアカウントの表示名"
}

Cloud SQL に接続するのための踏み台として使う VM

resource "google_compute_instance" "cloud_sql_client" {
  name         = "VMの名前"
  machine_type = "e2-micro"
  zone         = "asia-northeast1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network = google_compute_network.private_network.name
  }

  service_account {
    email  = google_service_account.cloud_sql_client.email
    scopes = ["cloud-platform"]
  }
}

プライベート IP のみをもつ VM に SSH 接続するための Firewall ルール

resource "google_compute_firewall" "inbound_ip_ssh" {
  name    = "allow-incoming-ssh-from-iap"
  project = var.project
  network = "対象のVPC名"

  direction = "INGRESS"
  allow {
    protocol = "tcp"
    ports    = ["22"]
  }
  source_ranges = [
    "35.235.240.0/20"
  ]
  target_service_accounts = [google_service_account.cloud_sql_client.email]
}

IAP の IP レンジである"35.235.240.0/20" からの通信を 22 番ポートで許可することで、IAP を用いて、VM インスタンスへの SSH 接続ができるようになります。

NAT を作成

resource "google_compute_router" "nat" {
  name    = "作成するNATの名前"
  region  = "対象のVPCのリージョン"
  network = "対象のVPC名"
}

# 上記で作成するNATの設定
resource "google_compute_router_nat" "nat_config" {
  name                               = "名前"
  router                             = google_compute_router.nat.name
  region                             = "対象のVPCのリージョン"
  nat_ip_allocate_option             = "AUTO_ONLY"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}

まとめ

本記事では、Cloud SQL にプライベート IP しか付与されていない場合に、VM を使用した接続方法について説明しました。 具体的には、 Cloud SQL と同じ VPC 内に作成した VM インスタンスに IAP を用いて SSH 接続することで安全な接続方法を紹介しました。 また、必要なリソース(サービスアカウント、VM インスタンス、Firewall ルール、NAT)の作成方法について解説しました。

参考

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年06月15日に最終更新
読み込み中...