サーバーレス VPC アクセスの構成

サーバーレス VPC アクセスを使用すると、Google Cloud のサーバーレス環境(Cloud Run(フルマネージド)、Cloud Functions、または App Engine スタンダード環境)から VPC ネットワークに直接接続できます。この接続により、サーバーレス環境で Compute Engine VM インスタンスや Memorystore インスタンスなど、内部 IP アドレスを持つリソースにアクセスできるようになります。たとえば、次のような場合に便利です。

  • Memorystore を使用して、サーバーレス サービスのデータを保存する場合。
  • Compute Engine VM で実行されるサードパーティ ソフトウェアをサーバーレス ワークロードが使用する場合。
  • Compute Engine のマネージド インスタンス グループでバックエンド サービスが実行されていて、サーバーレス環境が公共のインターネット接続を経由せずにそのバックエンドと通信する必要がある場合。
  • オンプレミスのデータベースから Cloud VPN を介して、サーバーレス環境がデータにアクセスする必要がある場合。

VPC ネットワークに接続すると、サーバーレス環境で、RFC 1918RFC 6598 で定義されている内部 DNS 名と内部 IP アドレスにリクエストを送信できるようになります。この内部アドレスには Google Cloud サービスからのみアクセスできます。内部アドレスを使用すると、リソースを公共のインターネットに公開する必要がなくなり、サービス間の通信のレイテンシも短縮されます。

サーバーレス VPC アクセスは、サーバーレス環境でのみリクエストを開始できます。VM によって開始されたリクエストでは、サーバーレス サービスの外部アドレスを使用する必要があります。詳細については、限定公開の Google アクセスをご覧ください。

サーバーレス VPC アクセスでは、共有 VPC ネットワークと、Cloud InterconnectCloud VPNVPC ネットワーク ピアリングを介して接続されたネットワークとの通信がサポートされています。サーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。

サーバーレス VPC アクセス コネクタについて

サーバーレス VPC アクセスは、コネクタと呼ばれるリソースに基づいています。コネクタは、サーバーレス環境と VPC ネットワークとの間のトラフィックを処理します。Google Cloud プロジェクトでコネクタを作成するときに、コネクタを特定の VPC ネットワークとリージョンに接続します。次に、送信ネットワーク トラフィックにコネクタを使用するように、サーバーレス サービスを構成します。

コネクタを作成するときに、独自の CIDR /28 サブネットを使用するか、カスタム IP 範囲を使用できます。コネクタ経由で VPC ネットワークに送信されるトラフィックは、/28 サブネットまたはカスタム IP 範囲のアドレスから発信されます。カスタム IP 範囲を使用する場合は、VPC ネットワークでまだ予約されていない CIDR /28 範囲を指定する必要があります。

サブネットが共有サブネットでない場合、コネクタのサブネットまたはカスタム IP 範囲からの上り(内向き)を許可するために、優先度 1000 の暗黙的なファイアウォール ルールが VPC ネットワークに作成されます。

サーバーレス VPC アクセスは、コネクタ経由で送信されたトラフィック量に応じて、100 Mbps 単位で自動的にコネクタのスループットをプロビジョニングします。自動的にプロビジョニングされるスループットはスケールアップのみであり、スケールダウンは行われません。少なくとも 200 Mbps のコネクタがプロビジョニングされ、最大 1,000 Mbps までスケールアップできます。コネクタの作成時にスループットのスケーリング上限を構成できます。コネクタを介した実際のスループットが、プロビジョニングされたスループットを超える可能性があるので注意してください(特にトラフィックが短期間で急増する場合)。

サーバーレス VPC アクセス コネクタには使用量に応じて月額料金がかかります。詳しくは料金をご覧ください。

サーバーレス VPC アクセスの例(クリックして拡大)
サーバーレス VPC アクセスの例(クリックして拡大)

次のことに注意してください。

  • コネクタとそれに接続するサーバーレス サービス(Cloud Run サービス、App Engine アプリ、Cloud Functions など)は同じプロジェクトに配置する必要があります。
  • コネクタは、それに接続するサーバーレス サービスと同じリージョンに配置する必要があります。コネクタを作成できるリージョンのリストについては、サポート対象のリージョンを参照してください。
  • 内部 IP アドレスと内部 DNS 名へのトラフィックは、コネクタ経由でルーティングされます。外部 IP アドレスへのトラフィックは、デフォルトでインターネット経由でルーティングされます。
  • 共有 VPC を使用する場合:

  • 同じコネクタを複数のサーバーレス サービスで使用できます。

  • リージョン間のアクセスを許可するリソース(Google Cloud VM インスタンスや GKE クラスタなど)に関しては、トラフィックの送信先のリソースとは別のリージョン内にコネクタを配置できます。その際、コネクタからの下り(外向き)の料金が請求されます。詳細については、料金をご覧ください。

コネクタの作成

コネクタを作成するには、Cloud Console または gcloud コマンドライン ツールを使用します。

Console

  1. 共有 VPC を使用している場合は、ホスト プロジェクトを構成済みであることを確認します。

  2. プロジェクトで Serverless VPC Access API が有効になっていることを確認します。

    API を有効にする

  3. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  4. [コネクタを作成] をクリックします。

  5. [名前] フィールドに、コネクタの名前を入力します。

  6. [リージョン] フィールドで、コネクタのリージョンを選択します。これは、サーバーレス サービスのリージョンと一致する必要があります。詳しくは、サポート対象のリージョンをご覧ください。

  7. [ネットワーク] フィールドで、コネクタを接続する VPC ネットワークを選択します。

  8. [サブネットワーク] プルダウン メニューをクリックします。

    • 独自のサブネット(共有 VPC に必要)を使用する場合は、コネクタに使用する /28 サブネットを選択します。
    • 共有 VPC を使用していない場合、サブネットを明示的に作成するのではなく、コネクタでサブネットを作成するようにしたい場合は、[カスタム IP 範囲] をプルダウンから選択してから [IP 範囲] フィールドに、予約されていない CIDR /28 内部 IP 範囲の最初のアドレスを入力します。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0/28)はほとんどの新しいプロジェクトで機能します。

  9. (オプション)コネクタのスループットをさらに制御するには、[最小スループット] フィールドと [最大スループット] フィールドを編集します。

  10. [作成] をクリックします。

  11. コネクタの使用準備が整うと、コネクタ名の横に緑色のチェックマークが表示されます。

gcloud

  1. 共有 VPC を使用している場合は、ホスト プロジェクトを構成済みであることを確認します。

  2. gcloud コンポーネントを最新バージョンに更新します。

    gcloud components update
    
  3. プロジェクトで Serverless VPC Access API が有効になっていることを確認します。

    gcloud services enable vpcaccess.googleapis.com
    
  4. 独自のサブネット(共有 VPC に必要)を使用する場合は、次のコマンドを使用してコネクタを作成します。

    gcloud beta compute networks vpc-access connectors create [CONNECTOR_NAME] \
    --region [REGION] \
    --subnet [SUBNET] \
    # If you are not using Shared VPC, omit the following line.
    --subnet-project [HOST-PROJECT-ID]
    

    ここで

    • [CONNECTOR_NAME] は、コネクタの名前です。
    • [REGION] は、コネクタのリージョンです。これは、サーバーレス サービスのリージョンと一致する必要があります。詳しくは、サポート対象のリージョンをご覧ください。
    • [SUBNET] は、他のリソースによって使用されていない独自の「/28」専用サブネットです。指定する値は、サブネットの名前です。
    • [HOST-PROJECT-ID] は、ホスト プロジェクトの ID です。 共有 VPC を使用する場合にのみ指定します。

    スループット制御などの詳細とオプションの引数については、gcloud のリファレンスをご覧ください。

  5. 共有 VPC を使用していない場合、そしてサブネットを使用せずにカスタム IP 範囲を指定する場合は、次のコマンドでコネクタを作成します。

    gcloud compute networks vpc-access connectors create [CONNECTOR_NAME] \
    --network [VPC_NETWORK] \
    --region [REGION] \
    --range [IP_RANGE]
    

    ここで

    • [CONNECTOR_NAME] は、コネクタの名前です。
    • [VPC_NETWORK] は、コネクタを接続する VPC ネットワークです。
    • [REGION] は、コネクタのリージョンです。これは、サーバーレス サービスのリージョンと一致する必要があります。詳しくは、サポート対象のリージョンをご覧ください。
    • [IP_RANGE] は予約されていない内部 IP ネットワークです。未割り振りスペースの /28 が必要です。指定された値は、CIDR 表記(10.8.0.0/28)です。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0/28 はほとんどの新しいプロジェクトで機能します。

    スループット制御などの詳細とオプションの引数については、gcloud のリファレンスをご覧ください。

  6. 使用する前に、コネクタが READY 状態になっていることを確認します。

    gcloud compute networks vpc-access connectors describe [CONNECTOR_NAME] --region [REGION]
    

    出力には、state: READY という行が含まれます。

共有 VPC を使用する場合のホスト プロジェクトの構成

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

  • 必要な IP 範囲がコネクタにアクセスできるように、ファイアウォール ルールを追加します。
  • 各サービス プロジェクトにホスト プロジェクトの Compute ネットワーク ユーザー ロールを付与します。
  • 共有 VPC コネクタを作成するときに使用するために、サブネットをホスト プロジェクトに作成します。

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

この手順は、ホスト プロジェクト(共有 VPC 管理者)のネットワーク管理者のロールを持つユーザーが行う必要があります。

次の 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 コネクタが一部のリソースにのみアクセスできるようにするには、これらのファイアウォール ルールのターゲットを指定します。

より狭いスコープでのファイアウォール ルールの作成

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

コネクタの削除

コネクタを削除する前に、まだそれを使用しているサービスがないことを確認してください。サービスからコネクタの接続を解除する方法については、関連するプロダクトのドキュメントをご覧ください。

コネクタを削除するには、Cloud Console または gcloud コマンドライン ツールを使用します。

Console

  1. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  2. 削除するコネクタを選択します。

  3. [削除] をクリックします。

gcloud

コネクタを削除するには、次の gcloud コマンドを使用します。

gcloud compute networks vpc-access connectors delete [CONNECTOR_NAME] --region [REGION]

ここで

  • [CONNECTOR_NAME] は、削除するコネクタの名前です。
  • [REGION] は、コネクタが配置されているリージョンです。

コネクタを使用するサービスの構成

コネクタを作成したら、それを使用するようにサーバーレス サービスを構成できます。コネクタを使用するサービスの構成方法は、プロダクトによって異なります。具体的な手順については、関連するガイドをご覧ください。

サービスが VPC ネットワークに接続されたら、内部 IP アドレスまたは DNS 名にリクエストを送信することで、VM インスタンスと他の内部リソースにアクセスできます。

VPC Service Controls の追加

コネクタを作成してサービスを構成したら、サーバーレスの VPC アクセス API に VPC Service Controls を使用して、データの引き出しのリスクを軽減し、リソースとデータを保護できます。

VPC Service Controls の有効化に関する一般的な情報については、サービス境界の作成をご覧ください。

サポート対象のサービス

サーバーレス VPC アクセスを使用して、次のサービスから VPC ネットワークにアクセスできます。

サポートされるリージョン

サーバーレス VPC アクセス コネクタは、次のリージョンで作成できます。

  • asia-east1
  • asia-east2
  • asia-northeast1
  • asia-northeast2
  • asia-northeast3
  • asia-south1
  • asia-southeast1
  • asia-southeast2
  • australia-southeast1
  • europe-central2
  • europe-north1
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west6
  • northamerica-northeast1
  • southamerica-east1
  • us-central1
  • us-east1
  • us-east4
  • us-west1
  • us-west2
  • us-west3
  • us-west4

サポートされているネットワーク プロトコル

次の表は、サーバーレス VPC アクセスのコネクタ設定でサポートされるプロトコルを示しています。使用可能な下り(外向き)設定については、ネットワーク設定の構成をご覧ください。

プロトコル プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする すべてのトラフィックを VPC コネクタ経由でルーティングする
TCP
UDP
ICMP 外部 IP アドレスのみサポート

キュレートされた IAM ロール

次の表は、サーバーレス VPC アクセスに関連付けられている Identity and Access Management(IAM)のロールを示しています。各ロールに関連付けられている権限の一覧については、IAM のドキュメントのサーバーレス VPC アクセスのロールをご覧ください。

ロール 説明
サーバーレス VPC アクセス管理者
roles/vpcaccess.admin
すべてのサーバーレス VPC アクセス リソースに対する完全アクセス権
サーバーレス VPC アクセス ユーザー
roles/vpcaccess.user
サーバーレス VPC アクセス コネクタのユーザー
サーバーレス VPC アクセス閲覧者
roles/vpcaccess.viewer
すべてのサーバーレス VPC アクセス リソースの閲覧者

サービス アカウント

Cloud プロジェクトでオペレーションを実行するため、サーバーレス VPC アクセス サービスはサーバーレス VPC アクセス サービス エージェント サービス アカウントを使用します。このサービス アカウントのメールアドレスは、次の形式になります。

service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com

このサービス アカウントには、デフォルトでサーバーレス VPC アクセス サービス エージェントのロール(roles/vpcaccess.serviceAgent)が設定されています。このアカウントの権限を変更すると、サーバーレス VPC アクセスのオペレーションが失敗する可能性があります。

監査ロギング

サーバーレス VPC アクセスの監査ロギングの情報をご覧ください。

料金

サーバーレス VPC アクセスの料金については、VPC の料金ページのサーバーレス VPC アクセスをご覧ください。

トラブルシューティング

コネクタの作成でエラーが発生した場合は、次の方法でコネクタを再作成してください。

  • VPC ネットワーク内で予約されている既存の IP アドレスと重複しない RFC 1918 の内部 IP 範囲を指定します。
  • プロジェクトから ID serverless-vpc-access-images で Compute Engine VM イメージを使用できるように、プロジェクトに権限を付与します。これに合わせて組織ポリシーを更新する方法については、イメージ アクセスの制限の設定をご覧ください。
  • VM が IP 転送を有効にできるように constraints/compute.vmCanIpForward 組織のポリシーを設定します。

サーバーレス サービスのコネクタを指定しても、VPC ネットワーク内のリソースにアクセスできない場合は、次のようにします。

  • コネクタの IP 範囲からの上り(内向き)を拒否する、優先度が 1,000 よりも小さいファイアウォール ルールが、VPC ネットワーク上にないことを確認します。