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

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

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

  1. 必要な IP 範囲を許可するファイアウォール ルールを追加する
  2. 権限を付与する
  3. サブネットを作成する
  4. サーバーレス VPC アクセスの構成ページの次のセクションの手順を完了します。

利点

サービス プロジェクトでコネクタを作成するメリットは、次のとおりです。

  • 分離: 各コネクタには専用の帯域幅があり、他のサービス プロジェクトでのコネクタの帯域幅の使用による影響を受けません。これは、トラフィックが急増するサービスの場合や、各サービス プロジェクトが他のサービス プロジェクトの使用による影響を受けないようにする必要がある場合に適しています。
  • チャージバック: コネクタで発生した料金は、そのコネクタを含むサービス プロジェクトに関連付けられます。これにより、チャージバックが容易になります。
  • セキュリティ: 「最小権限の原則」に従うことができます。コネクタには、アクセスする必要がある共有 VPC ネットワーク内のリソースへのアクセス権を付与する必要があります。サービス プロジェクトでコネクタを作成すると、ファイアウォール ルールを使用して、プロジェクト内のサービスがアクセスできるものを制限できます。
  • チームの独立性: ホスト プロジェクト管理者への依存が軽減されます。サービス プロジェクトに関連付けられたコネクタをチームで作成して管理できます。Compute Engine セキュリティ管理者ロールや、有効にされたホスト プロジェクトの compute.firewalls.create 権限を含むカスタム Identity and Access Management(IAM)ロールが付与されたユーザーは、引き続きコネクタのファイアウォール ルールを管理する必要があります。

これらの考慮事項がユースケースに合わない場合は、ホスト プロジェクトでコネクタを使用して共有 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 アクセスを使用してサーバーレス環境でアクセスできるリソースを制限するには、こうしたファイアウォール ルールのターゲットを指定するか、対象範囲を狭めたファイアウォール ルールを作成するをご覧ください。ターゲットを指定すると、新しい 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 サブネットを追加します。このサブネットは、コネクタを使用するサーバーレス サービスと同じリージョンに存在する必要があります。

次のステップ