0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gcloud で基本的なネットワークの設定をする

Last updated at Posted at 2025-09-07

備忘録。

前提条件

基本的なネットワークを設定するプロジェクトとリージョン、ゾーンを設定済みとする。

まずは基礎的な設定方法

example-instance という VM インスタンス名を設定して、 https-web-server というタグを付与する。

gcloud compute instances create example-instance \
  --zone=us-central1-a \
  --tags=https-web-server

次に、上記で指定したタグを付与した VM インスタンスに Firewall を設定する。

gcloud compute firewall-rules create allow-https \
  --target-tags https-web-server \
  --source-ranges 0.0.0.0/0 \
  --allow tcp:443

セキュリティを高める

上記の設定はプロジェクト作成時の初期 VPC default を使用しており、制限が緩い Firewall が設定されている。

そのため、default の VPC を使わずに、カスタム VPC を作成して必要なポートのみ開放する。

1. カスタム VPC を作成する

例として、カスタム VPC 名を myapp-dev-vpc を作成する。

$ gcloud compute networks create myapp-dev-vpc \
  --subnet-mode=custom \
  --bgp-routing-mode=regional

安易に default の VPC を利用しないように、次のコマンドで削除できる。

$ gcloud compute networks delete default

注意点として、

  1. default を削除する前に、既存のリソース (VM, LB) が default VPC を参照していないか要確認
  2. App Engine 初回デプロイなど、サービスによっては自動的に default VPC を使う挙動があるので 、必要に応じて明示的に VPC を指定する
  3. Cloud Interconnect や VPN を使う場合は、サブネット設計時に CIDR を競合させない

あとで後述。

2. サブネットを設定する

$ gcloud compute networks subnets create myapp-dev-vpc \
  --network=myapp-dev-vpc \
  --region=asia-northeast1 \
  --range=10.10.0.0/24

3. Firewall を設定する

VM を作成後に Firewall を設定する。

$ gcloud compute firewall-rules create allow-https \
  --network=myapp-dev-vpc \
  --priority=1000 \
  --action=ALLOW \
  --rules=tcp:80 \
  --source-ranges=0.0.0.0/0 \
  --target-tags https-web-server \
  --enable-logging \

--tags で指定するよりも、サービスアカウントを作成して指定する方が、セキュリティが高くなる。
(--target-service-accounts=web-server@${PROJECT_ID}.iam.gserviceaccount.com など)

カスタム VPC の注意点

  • App Engine
    • Standard
      1. VPC は不要
      2. ただし、VPC 内の Cloud SQL や Momory Store のアクセスが必要ならば、Serverless VPC Access コネクタが必須
      3. コネクタはリージョン単位
      4. /28〜/23 の専用範囲を要求
      5. 他サブネットと重複不可
      6. 新規にコネクタを作成するのであれば、 Direct VPC Egress を選択するのが良い
      7. CIDR 範囲の管理が不要
      8. 余計なVMリソースも不要
      9. Direct VPC Egress を採用する場合は、 app.yamlnetworkname でカスタム VPC と subnetwork_name でサブネット名を指定する
    • Flexible
      1. default VPC を削除している場合 app.yaml の network でを必ずカスタム VPC を指定
      2. 指定しないと “default” を探して失敗する
      3. 25年 9月時点で Direct VPC Egress は未対応

Serverless VPC Access コネクタ作成例

# アプリ側からは環境変数や接続ドライバで Private IP/内部の宛先を指定
# App Engine Standard は app.yaml にネットワーク直指定は不要
$ gcloud compute networks vpc-access connectors create myapp-dev-vpc-access-conn \
  --region=asia-northeast1 \
  --network=myapp-dev-vpc \
  --range=10.8.0.0/28

app.yaml 記述例

runtime: python
env: flex
network:
  name: myapp-dev-vpc
  subnetwork_name: myapp-dev-vpc
# 必要に応じて
#  forwarded_ports:
#  session_affinity: false
  • Cloud Run (第1/第2世代)
    1. 外部インターネットとの接続には VPC は不要
    2. VPC 内の Cloud Run や MemoryStore との通信が発生するのであれば、Serverless VPC Access コネクタが必要
    3. 新規でコネクタを作成するのであれば、Direct VPC Egress を選択するのが良い
    4. Serverless VPC Access コネクタを作成する場合は、前記の作成方法を参照

前述のServerless VPC Access コネクタを既存の Cloud Run に適用する場合は、

  • --ingress (インバウンド) の設定を考慮したコネクタを生成する
    • all (どこからでも Cloud Run に到達可能)
    • internal-and-cloud-load-balancing (基本的には Load Balancing と VPC 経由で到達)
    • internal (基本的には Internal LB や 同一プロジェクト内の VPC を経由してのみ到達可能)
  • --vpc-egress (アウトバウンド) の設定を考慮したコネクタを生成する
    • private-ranges-only (内部アドレス向けだけ VPC 経由)
    • all-traffic (すべてのトラフィックを VPC 経由)

ことに注意。

VPC Egress を利用する場合は、次の --vpc-connector=myapp-dev-vpc-access-conn \ は不要。
--ingress--vpc-egress は適宜、要件に合わせて設定する。

$ gcloud run services update web-backend \
  --region=asia-northeast1 \
  --subnet=myapp-dev-vpc
  --vpc-connector=myapp-dev-vpc-access-conn \
  --vpc-egress=private-ranges-only \
  --ingress=internal-and-cloud-load-balancing
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?