共有 VPC ネットワークへの接続

組織で共有 VPC を使用する場合は、サーバーレス VPC アクセスを使用して共有 VPC ネットワークに接続できます。このガイドでは、サーバーレス VPC アクセスを許可するために、共有 VPC のホスト プロジェクトとサービス プロジェクトを構成する方法について説明します。

共有 VPC 用のコネクタを作成する場合は、ホスト プロジェクトとサーバーレス環境を次のように構成する必要があります。

  1. 必要な IP 範囲を許可するファイアウォール ルールを追加する
  2. サービス プロジェクトのサービス アカウントに権限を付与する
  3. サブネットを作成する
  4. サーバーレス VPC アクセス コネクタを作成する
  5. サーバーレス VPC アクセス コネクタを使用するようにサービスを構成する

IP 範囲を許可するファイアウォール ルールを追加する

この手順を行うには、ホスト プロジェクトで次のいずれかのロールが必要です。

次の IP 範囲からのリクエストを許可してコネクタに到達し、コネクタからも到達できるように、ファイアウォール ルールを作成する必要があります。

  • NAT 範囲
    • 107.178.230.64/26
    • 35.199.224.0/19
  • ヘルスチェック範囲
    • 130.211.0.0/22
    • 35.191.0.0/16
    • 108.170.220.0/23

これらの範囲は、Cloud Run、Cloud Functions、App Engine スタンダードの基盤となる Google インフラストラクチャによって使用されます。これらの IP からのすべてのリクエストは Google インフラストラクチャから送信されるため、Cloud Run、Cloud Functions、App Engine のサービス / 機能 / アプリはそれぞれ接続先の VPC コネクタとの通信のみを行います。

単純な構成の場合、共有 VPC ネットワークに接続されているすべてのサービス プロジェクトが、サーバーレス サービスがネットワーク内の任意のリソースにリクエストを送信できるように、ルールを適用します。

これらのルールを適用するには:

  1. 次の 3 つのコマンドを実行して、サーバーレス環境からのリクエストがネットワーク内のすべての VPC コネクタに到達できるようにするルールを設定します。

    gcloud compute firewall-rules create serverless-to-vpc-connector \
    --allow tcp:667,udp:665-666,icmp \
    --source-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-to-serverless \
    --allow tcp:667,udp:665-666,icmp \
    --destination-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=EGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-health-checks \
    --allow tcp:667 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16,108.170.220.0/23 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK

    VPC_NETWORK は、コネクタを接続する VPC ネットワークです。

  2. 次のコマンドを実行して、任意の VPC コネクタからネットワーク上のすべてのリソースへのリクエストを許可します。

    gcloud compute firewall-rules create \
    vpc-connector-egress \
    --allow tcp,udp,icmp \
    --direction=INGRESS \
    --source-tags vpc-connector \
    --network=VPC_NETWORK

    このルールにより、VPC コネクタに対して、ネットワーク内のすべてのリソースへのアクセスが許可されます。サーバーレス VPC アクセスを使用してサーバーレス環境でアクセスできるリソースを制限するには、こうしたファイアウォール ルールのターゲットを指定するか、対象範囲を狭めたファイアウォール ルールを作成するをご覧ください。ターゲットを指定する場合、新しい VPC コネクタを作成するたびに新しいファイアウォール ルールのセットを作成する必要があります。

対象範囲を狭めたファイアウォール ルールを作成する

IP 範囲を許可するファイアウォール ルールを追加するの手順に沿って、既存のコネクタと、今後作成されるコネクタの両方すべてに適用されるファイアウォール ルールを作成します。これが必要でなく、特定のコネクタだけに対するルールを作成する場合は、それらのコネクタにのみ適用されるようにルールの範囲を設定できます。

ルールの対象範囲を特定のコネクタに限定するには、次のいずれかの仕組みを使用できます。

  • ネットワーク タグ。各コネクタには、vpc-connectorvpc-connector-REGION-CONNECTOR_NAME の 2 つのネットワーク タグがあります。後者のフォーマットを使用して、ファイアウォール ルールの範囲を特定のコネクタに制限します。
  • IP 範囲。このルールは Ingress で機能しないため、下り(外向き)ルールにのみ使用します。コネクタ サブネットの IP 範囲を使用して、ファイアウォール ルールの範囲を単一の VPC コネクタに制限できます。

サービス プロジェクトのサービス アカウントに権限を付与する

共有 VPC 管理者は、VPC コネクタを使用する各サービス プロジェクトについて、ホスト プロジェクトでの Compute ネットワーク ユーザー ロール(compute.networkUser)をサービス プロジェクト cloudservicesvpcaccess サービス アカウントに付与する必要があります。

ロールを付与するには:

  1. 次のコマンドを使用します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
  2. @gcp-sa-vpcaccess サービス アカウントが存在しない場合は、サービス プロジェクトで Serverless VPC Access API を有効にしてから、もう一度お試しください。

    gcloud services enable vpcaccess.googleapis.com

これらのサービス アカウントに共有 VPC ネットワーク全体へのアクセスを許可せず、特定のサブネットへのアクセス権のみを付与する場合は、代わりにこれらのロールを特定のサブネット上でのみサービス アカウントに付与することもできます。

サブネットを作成する

共有 VPC を使用する場合、共有 VPC 管理者はコネクタごとにサブネットを作成する必要があります。サブネットの追加の説明に沿って、共有 VPC ネットワークに /28 サブネットを追加します。このサブネットは、コネクタを使用するサーバーレス サービスと同じリージョンに存在する必要があります。

次のステップ