GCP VPCネットワーク設計入門|サブネット・ファイアウォール・Cloud NATの実践

kento_morota 18分で読めます
社内のAI・IT活用、技術がわかる相手に無料相談。 相談 →
目次

クラウド環境でシステムを運用する際、ネットワーク設計は最も重要な基盤のひとつです。適切に設計されたネットワークは、セキュリティを確保しながらシステムの拡張性と可用性を高めます。

Google Cloud Platform(GCP)では、VPC(Virtual Private Cloud)がネットワークの中核を担います。この記事では、GCP VPCの基本概念からサブネット設計、ファイアウォールルールの設定、Cloud NATの導入まで、実務で使えるネットワーク構築の手順を詳しく解説します。

GCP VPCとは?クラウドネットワークの基本を理解する

VPC(Virtual Private Cloud)は、GCP上に構築する仮想的なプライベートネットワークです。オンプレミス環境でいう社内ネットワークに相当し、Compute EngineのVM、Cloud SQLのデータベース、Cloud Runのコンテナなど、あらゆるGCPリソースが配置される場所です。

VPCの基本構造

GCPのVPCは、他のクラウドプロバイダーとは異なる特徴を持っています。

グローバルリソース
GCPのVPCはグローバルリソースとして作成されます。つまり、1つのVPCが世界中のすべてのリージョンにまたがります。AWSではリージョンごとにVPCを作成する必要がありますが、GCPでは1つのVPCでマルチリージョン構成が可能です。

サブネットはリージョン単位
VPCの中にサブネットを作成しますが、サブネットはリージョン単位で配置されます。同じリージョン内のゾーン間では自動的に通信が可能です。

デフォルトVPCの存在
GCPプロジェクトを作成すると、デフォルトVPCが自動生成されます。開発やテスト用途ではそのまま利用できますが、本番環境ではカスタムVPCの作成を強く推奨します。

デフォルトVPCとカスタムVPCの違い

デフォルトVPCにはいくつかの問題点があります。

  • すべてのリージョンにサブネットが作成される:不要なサブネットが存在し、管理が複雑になる
  • 緩いファイアウォールルール:ICMPやSSH(22番ポート)、RDP(3389番ポート)がデフォルトで許可されている
  • IPアドレス範囲が固定:CIDR範囲をカスタマイズできない

本番環境では、必要なリージョンだけにサブネットを作成し、最小権限のファイアウォールルールを設定したカスタムVPCを使用しましょう。

カスタムVPCの作成手順

ここからは、実際にカスタムVPCを作成する手順を解説します。gcloudコマンドを使用して進めます。

VPCネットワークの作成

まず、カスタムモードでVPCを作成します。

# カスタムモードでVPCを作成
gcloud compute networks create my-production-vpc \
  --subnet-mode=custom \
  --bgp-routing-mode=regional \
  --description="本番環境用VPC"

--subnet-mode=customを指定することで、サブネットが自動作成されず、必要なリージョンだけに手動でサブネットを追加できます。

コンソールからの作成

Cloud Consoleから作成する場合は、以下の手順です。

  1. 「VPCネットワーク」→「VPCネットワークの作成」をクリック
  2. 名前を入力(例:my-production-vpc)
  3. 「サブネット作成モード」で「カスタム」を選択
  4. 必要なサブネットを追加
  5. 「作成」をクリック

なお、VPCやサブネットの構成をTerraformでコード管理すると、環境の再現性が高まり、変更履歴の追跡も容易になります。

サブネット設計のベストプラクティス

サブネット設計は、ネットワーク全体のスケーラビリティとセキュリティに直結します。適切なIPアドレス範囲の選定と、環境ごとの分離が重要です。

IPアドレス範囲(CIDR)の設計

サブネットに割り当てるCIDR範囲は、RFC 1918のプライベートアドレスから選択します。

# 東京リージョンにWebサーバー用サブネットを作成
gcloud compute networks subnets create web-subnet-tokyo \
  --network=my-production-vpc \
  --region=asia-northeast1 \
  --range=10.1.0.0/24 \
  --description="Webサーバー用サブネット"

# 東京リージョンにアプリケーションサーバー用サブネットを作成
gcloud compute networks subnets create app-subnet-tokyo \
  --network=my-production-vpc \
  --region=asia-northeast1 \
  --range=10.2.0.0/24 \
  --description="アプリケーションサーバー用サブネット"

# 東京リージョンにデータベース用サブネットを作成
gcloud compute networks subnets create db-subnet-tokyo \
  --network=my-production-vpc \
  --region=asia-northeast1 \
  --range=10.3.0.0/24 \
  --description="データベース用サブネット"

推奨するサブネット分割パターン

一般的なWebシステムの場合、以下のように役割ごとにサブネットを分離します。

3層アーキテクチャの例

  • Webサブネット(10.1.0.0/24):ロードバランサーやWebサーバーを配置。外部アクセスを受け付ける
  • Appサブネット(10.2.0.0/24):アプリケーションサーバーを配置。Webサブネットからのみアクセス可能
  • DBサブネット(10.3.0.0/24)Cloud SQLなどのデータベースを配置。Appサブネットからのみアクセス可能

CIDR設計時の注意点

CIDR範囲を決定する際は、以下の点に注意してください。

  • 将来の拡張を見据える:/24(254アドレス)で足りるなら/24を使用し、拡張が必要になったらセカンダリレンジを追加する
  • 他VPCやオンプレミスとの重複を避ける:VPCピアリングやVPN接続時にCIDRが重複するとルーティングが破綻する
  • GKE用のセカンダリレンジ:GKEを利用する場合、Pod用とService用のセカンダリレンジを追加で設定する
# GKE用のセカンダリレンジを含むサブネット作成
gcloud compute networks subnets create gke-subnet-tokyo \
  --network=my-production-vpc \
  --region=asia-northeast1 \
  --range=10.4.0.0/24 \
  --secondary-range pod-range=10.100.0.0/16,service-range=10.200.0.0/20

ファイアウォールルールの設定と管理

ファイアウォールルールは、VPC内のトラフィックを制御する最も重要なセキュリティ機能です。GCPのファイアウォールはステートフルで、許可した通信の戻りトラフィックは自動的に許可されます。

ファイアウォールルールの基本概念

GCPのファイアウォールルールには以下の要素があります。

  • 方向:ingress(受信)またはegress(送信)
  • 優先度:0〜65535の数値で、値が小さいほど優先度が高い
  • アクション:allow(許可)またはdeny(拒否)
  • ターゲット:ルールが適用されるインスタンス(ネットワークタグまたはサービスアカウントで指定)
  • フィルタ:送信元・宛先のIP範囲、プロトコル、ポート

最小権限の原則に基づくルール設計

セキュリティの基本はデフォルトで全て拒否し、必要な通信のみ許可することです。IAMによるアクセス制御と併せて、多層的なセキュリティを構築しましょう。

# まず全ての受信を拒否するルールを作成(低優先度)
gcloud compute firewall-rules create deny-all-ingress \
  --network=my-production-vpc \
  --direction=INGRESS \
  --priority=65534 \
  --action=DENY \
  --rules=all \
  --source-ranges=0.0.0.0/0 \
  --description="デフォルトで全受信を拒否"

# ロードバランサーからのHTTP/HTTPS通信を許可
gcloud compute firewall-rules create allow-lb-to-web \
  --network=my-production-vpc \
  --direction=INGRESS \
  --priority=1000 \
  --action=ALLOW \
  --rules=tcp:80,tcp:443 \
  --source-ranges=130.211.0.0/22,35.191.0.0/16 \
  --target-tags=web-server \
  --description="ロードバランサーからWebサーバーへのアクセスを許可"

# WebサーバーからAppサーバーへの通信を許可
gcloud compute firewall-rules create allow-web-to-app \
  --network=my-production-vpc \
  --direction=INGRESS \
  --priority=1000 \
  --action=ALLOW \
  --rules=tcp:8080 \
  --source-tags=web-server \
  --target-tags=app-server \
  --description="WebサーバーからAppサーバーへのアクセスを許可"

# AppサーバーからDBへの通信を許可
gcloud compute firewall-rules create allow-app-to-db \
  --network=my-production-vpc \
  --direction=INGRESS \
  --priority=1000 \
  --action=ALLOW \
  --rules=tcp:5432 \
  --source-tags=app-server \
  --target-tags=db-server \
  --description="AppサーバーからDBへのアクセスを許可"

ネットワークタグの活用

上記のルールではネットワークタグを使って対象インスタンスを指定しています。タグを活用することで、IPアドレスに依存しない柔軟なルール管理が可能です。

# VMインスタンス作成時にタグを指定
gcloud compute instances create web-server-01 \
  --zone=asia-northeast1-b \
  --subnet=web-subnet-tokyo \
  --tags=web-server \
  --machine-type=e2-medium

タグを統一的に命名し、ドキュメントで管理することで、ルールの可読性が大幅に向上します。

Cloud NATの設定|プライベートインスタンスの外部通信

本番環境では、セキュリティを高めるためにインスタンスから外部IPアドレスを外し、プライベートIPのみで運用するのが一般的です。しかし、ソフトウェアのアップデートや外部APIへのアクセスなど、外部通信が必要な場面は多くあります。

Cloud NATは、外部IPアドレスを持たないインスタンスがインターネットへの送信通信を行うためのマネージドNATサービスです。

Cloud NATの構成要素

Cloud NATを設定するには、まずCloud Routerが必要です。

# Cloud Routerの作成
gcloud compute routers create my-nat-router \
  --network=my-production-vpc \
  --region=asia-northeast1

# Cloud NATの作成
gcloud compute routers nats create my-cloud-nat \
  --router=my-nat-router \
  --region=asia-northeast1 \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

Cloud NATの設定オプション

本番環境では、以下のオプションを検討してください。

NATするサブネットの限定

# 特定のサブネットのみNATを適用
gcloud compute routers nats create my-cloud-nat \
  --router=my-nat-router \
  --region=asia-northeast1 \
  --auto-allocate-nat-external-ips \
  --nat-custom-subnet-ip-ranges=app-subnet-tokyo,db-subnet-tokyo

静的IPアドレスの割り当て
外部サービスのIP許可リストに登録する場合は、静的IPを使用します。

# 静的IPアドレスの予約
gcloud compute addresses create nat-external-ip \
  --region=asia-northeast1

# 静的IPでCloud NATを作成
gcloud compute routers nats create my-cloud-nat \
  --router=my-nat-router \
  --region=asia-northeast1 \
  --nat-external-ip-pool=nat-external-ip \
  --nat-all-subnet-ip-ranges

ログの有効化
トラブルシューティング用にログ出力を有効化しておくと安心です。

# ログを有効化
gcloud compute routers nats update my-cloud-nat \
  --router=my-nat-router \
  --region=asia-northeast1 \
  --enable-logging \
  --log-filter=ALL

VPCピアリング・Shared VPC・プライベートアクセスの活用

複数のプロジェクトやVPCを運用する場合、ネットワーク間の接続方法やGCPサービスへのプライベート通信経路を理解しておく必要があります。

VPCピアリング

VPCピアリングは、異なるVPC間でプライベート通信を行う機能です。異なるプロジェクト間でも設定でき、トラフィックはGoogleのネットワーク内を通るため、低レイテンシかつ高セキュリティです。

# VPC-AからVPC-Bへのピアリングを作成
gcloud compute networks peerings create peer-a-to-b \
  --network=vpc-a \
  --peer-project=project-b \
  --peer-network=vpc-b

# VPC-BからVPC-Aへのピアリングも作成(双方で設定が必要)
gcloud compute networks peerings create peer-b-to-a \
  --network=vpc-b \
  --peer-project=project-a \
  --peer-network=vpc-a

ピアリングの注意点として、推移的ルーティングは不可です。VPC-AとVPC-B、VPC-BとVPC-Cがピアリングされていても、VPC-AからVPC-Cへは直接通信できません。

Shared VPC

Shared VPCは、ホストプロジェクトのVPCを複数のサービスプロジェクトで共有する仕組みです。組織内で統一されたネットワークポリシーを適用しつつ、プロジェクトごとにリソースを分離できます。

Shared VPCの利用が適しているケースは以下の通りです。

  • ネットワーク管理を一元化したい場合
  • 複数チームがそれぞれのプロジェクトで作業するが、同じネットワークを共有する場合
  • ファイアウォールルールやサブネットの管理を中央で行いたい場合

プライベートGoogleアクセス

外部IPを持たないVMからCloud StorageBigQueryなどのGoogle APIにアクセスできるようにする機能です。

# サブネットでプライベートGoogleアクセスを有効化
gcloud compute networks subnets update app-subnet-tokyo \
  --region=asia-northeast1 \
  --enable-private-google-access

この設定により、外部IPのないVMからでもCloud StorageへのデータアップロードやBigQueryへのクエリ実行が可能になります。Cloud NATと併せて設定することで、インターネット向けと Google サービス向けの通信を適切に分離できます。

Private Service Connect

Private Service Connectは、Google APIやサードパーティサービスに対してVPC内部のプライベートエンドポイントを作成する機能です。より厳密なネットワーク制御が必要な場合に有効です。

# Private Service Connectエンドポイントの作成
gcloud compute addresses create psc-endpoint-ip \
  --region=asia-northeast1 \
  --subnet=app-subnet-tokyo \
  --addresses=10.2.0.100

gcloud compute forwarding-rules create psc-google-apis \
  --region=asia-northeast1 \
  --network=my-production-vpc \
  --address=psc-endpoint-ip \
  --target-google-apis-bundle=all-apis

本番環境のネットワーク設計チェックリスト

ここまでの内容を踏まえて、本番環境のVPCネットワークを構築する際のチェックリストを紹介します。

設計フェーズのチェック項目

  • カスタムVPCを作成しているか:デフォルトVPCは使用しない
  • CIDR範囲が適切か:将来の拡張と他ネットワークとの重複を考慮する
  • サブネットが役割ごとに分離されているか:Web、App、DBの3層分離を基本とする
  • ファイアウォールルールが最小権限か:デフォルト拒否+必要な通信のみ許可
  • プライベートGoogleアクセスが有効か:GCPサービスへのアクセス経路を確保する

運用フェーズのチェック項目

  • Cloud NATが正しく設定されているか:外部通信が必要なサブネットにNATを適用する
  • VPC Flow Logsが有効か:ネットワークトラフィックの監視と分析に必要
  • ファイアウォールルールのログが有効か:不正アクセスの検出に活用する
  • 不要なファイアウォールルールが残っていないか:定期的に棚卸しする
# VPC Flow Logsを有効化
gcloud compute networks subnets update web-subnet-tokyo \
  --region=asia-northeast1 \
  --enable-flow-logs \
  --logging-aggregation-interval=interval-5-sec \
  --logging-flow-sampling=0.5

ネットワークの監視設定も忘れずに行いましょう。VPC Flow LogsのデータをCloud Monitoringと連携させることで、異常なトラフィックパターンを早期に検知できます。

まとめ:安全で拡張性の高いVPCネットワークを構築しよう

GCP VPCネットワークの設計は、クラウドインフラの安全性と効率性を左右する重要な工程です。この記事で解説したポイントを振り返ります。

  • カスタムVPCを使用し、必要なリージョンにのみサブネットを作成する
  • サブネットは役割ごとに分離し、将来の拡張を見据えたCIDR設計を行う
  • ファイアウォールルールはデフォルト拒否で最小権限を徹底する
  • Cloud NATでプライベートインスタンスの外部通信を安全に実現する
  • プライベートGoogleアクセスでGCPサービスへの通信をプライベートに保つ

まずは開発環境でカスタムVPCを作成し、サブネット分離とファイアウォールルールの設定を試してみてください。ネットワーク設計の知見は、Cloud RunCloud FunctionsなどのサービスをVPC接続する際にも役立ちます。インフラ構成の管理にはTerraformによるコード化も検討することをお勧めします。

#GCP#VPC#ネットワーク
ManageAI 先行モニター企業 募集中|先着5社・2026年11月末まで

生成AIの利用費、「誰が・何のために・いくら」まで見えていますか?

株式会社カイダンと共同開発したAI利用ガバナンスSaaS「ManageAI」は、OpenAI・Azure OpenAI・Claude・AWS Bedrock・Google Vertex AIの費用と利用状況を、部署・利用者・プロジェクト別に可視化します。導入は読み取り専用キーの登録だけ。初期費用0円・月額5万円(税別)で先行モニター企業を募集しています。

ニュースリリースを読む
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

関連記事

Related / 9 articles

  1. プログラミング

    DDoS攻撃の仕組みと対策入門|レイヤー別の防御とCDN・クラウドの活用

    DDoS攻撃をボリューム型・プロトコル型・アプリ層に分けて仕組みを解説し、自前サーバーで防げない理由、CloudflareやAWS Shieldの標準防御、オリジンIPの隠し方、レートリミットとBot対策、攻撃を受けたときの初動、費用が跳ね上がるDenial of Walletへの備えまでわかります。

  2. プログラミング

    WAFとは?仕組み・導入パターン・誤検知対策|Webアプリを攻撃から守る実践ガイド

    WAFがファイアウォールやIDSと何が違うのか、シグネチャとマネージドルールの仕組み、Cloudflare WAF・AWS WAF・ModSecurityの比較、フォーム送信がブロックされる誤検知の調査と例外設定、ログ監視、WAFが代替できないことまで実践的に解説します。

  3. プログラミング

    セキュリティヘッダー入門|CSP・HSTS・X-Frame-Optionsの設定と効果を実践解説

    CSP・HSTS・X-Frame-Options・X-Content-Type-Optionsなど主要セキュリティヘッダーが防ぐ攻撃と、CSPのReport-Onlyからの段階導入、nonce/hash、HSTS preloadの不可逆リスク、Nginx・Next.js・Astroでの設定例、確認方法を解説します。

  4. プログラミング

    クラウドの通信費(Egress)入門|データ転送量課金の仕組みと転送コストを抑える設計

    クラウドの「受信無料・送信有料」の原則、AZ間・リージョン間・インターネット向けの単価差、NATゲートウェイ処理料の罠、CDNで転送量を減らす方法、バックアップやログ転送の見落とし、請求書で転送料を特定する手順を解説。想定外の請求を防げます。

  5. プログラミング

    秘密情報をGitに入れない仕組み|.gitignore・git-secrets・履歴から漏れた鍵の削除

    APIキーや.envをGitにコミットしてしまう典型経路と、.gitignore・.env.exampleの運用、pre-commitでのgitleaks検知、GitHub secret scanningの活用、漏れた鍵の無効化と履歴書き換え(git filter-repo)の手順を解説。仕組みで再発を防げます。

  6. プログラミング

    開発・ステージング・本番環境の分離設計|環境差分をなくす構成とアクセス制御

    開発・ステージング・本番それぞれの目的と、構成をコードで揃える方法、環境別の設定注入、本番データを使わないテストデータ戦略、ステージングの保護(Basic認証・IP制限・noindex)、コストを抑える運用までを解説。環境差分による本番障害を防げます。

  7. プログラミング

    ngrok・Cloudflare Tunnelでローカルを公開|Webhook開発とデモ環境の作り方

    NAT内のローカル環境にStripeやLINEのWebhookを届けるトンネリングの仕組みを解説。ngrok・Cloudflare Tunnel・localtunnelの比較、固定ドメインと認証、リクエスト検査、公開時のセキュリティ、自宅サーバー公開への応用までわかります。

  8. プログラミング

    ローカル開発環境のHTTPS化|mkcert・hostsファイル・自己署名証明書の正しい使い方

    ローカル開発をHTTPS前提にすべき理由(Secure Cookie・Service Worker・OAuth)と、mkcertでローカルCAを作りhostsで独自ドメインを割り当ててVite・Next.js・Dockerで使う手順を解説。証明書警告を無視する癖の危険も理解できます。

  9. プログラミング

    localhost・0.0.0.0・127.0.0.1の違い|ポートとUnixソケットを理解して「つながらない」を解決

    localhost・127.0.0.1・0.0.0.0の意味の違い、Dockerで外から接続できない原因、host.docker.internal、ポート競合の調べ方、Unixソケットの利点と権限、1024未満ポートの制約を解説。「つながらない」を仕組みから解決できます。

ManageAI

先行モニター企業 募集中

生成AIのコストを「部署別」に、請求書より先に。

先着5社限定・2026年11月末まで。初期費用0円・月額5万円(税別)で、正式版と同等の機能に加え、開発者と伴走者による導入支援を追加費用なしで提供します。プロンプト原文は一切取得しません。

株式会社カイダン × Harmonic Society株式会社の共同事業|読み取り専用キーの登録だけで導入できます