共有 VPC サービス プロジェクトでコネクタを構成する

組織で共有 VPC を使用している場合は、サーバーレス VPC アクセス コネクタをサービス プロジェクトまたはホスト プロジェクトのいずれかで設定できます。このガイドでは、サービス プロジェクトでコネクタを設定する方法について説明します。

ホスト プロジェクトでコネクタを設定する必要がある場合は、ホスト プロジェクトでコネクタを構成するをご覧ください。各方法の利点については、共有 VPC ネットワークへの接続をご覧ください。

大まかには、次の手順を行う必要があります。

  1. 必要な IP 範囲を許可するファイアウォール ルールを追加する
  2. 権限を付与する
  3. サブネットを作成する
  4. サーバーレス 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-requests \
    --allow tcp,udp,icmp \
    --direction=INGRESS \
    --source-tags vpc-connector \
    --network=VPC_NETWORK

    このルールにより、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 サブネットを追加します。このサブネットは、コネクタを使用するサーバーレス サービスと同じリージョンに存在する必要があります。

次のステップ