プライベート ネットワークと Cloud Run

このページでは、プライベート ネットワークに Cloud Run サービスを追加するための構成オプションについて説明します。

このコンテンツを最大限に活用するには、次のコンセプトを理解している必要があります。

多くの組織では、サービスやアプリケーションのネットワーク トラフィックを保護するために、境界制御が可能な Google Cloud でプライベート ネットワークを使用して、データの引き出しを防止しています。プライベート ネットワークには、次のような特性がある場合があります。

  • 多くのリソース(VM など)が 1 つ以上の VPC ネットワークに配置されている場合があります。
  • こうした VM はさまざまなプロジェクトに属している可能性があり、共有 VPC で接続されている場合があります。
  • オンプレミス ワークロードや他のクラウド上のワークロードが、Cloud VPNCloud Interconnect 経由でこの環境に接続している場合もあります。
  • VPC Service Controls 境界を有効にすることで、データが引き出されるリスクを軽減できます。
  • 複数のプライベート ネットワークが本番環境、ステージング環境、開発環境ごとに存在している場合があります。

VM とは異なり、Cloud Run サービスは特定の VPC ネットワークに関連付けられていません。このページでは、Cloud Run サービスをプライベート ネットワークに組み込む方法について説明します。

サーバーレス ネットワーキングの説明

パブリック ネットワークとプライベート ネットワークの一般的なエンタープライズ構成の詳細については、サーバーレス ネットワーキングの説明をご覧ください。

ここでは、次のように Cloud Run の基本的なシナリオから高度なシナリオまで紹介しています。

  • カスタム ドメインを使用する「Hello, World!」アプリを安全にデプロイする
  • エンタープライズ アプリケーションとマイクロサービスを開発する
  • データベースとファイル システムに一般公開または限定公開でアクセスする
  • SaaS プロバイダに接続する
  • セキュリティ管理を適用する

対応する Terraform モジュールのリストをご覧ください。

プライベート ネットワークからリクエストを受信する

プライベート ネットワークからリクエストを受信するには、次の条件に基づく構成が必要です。

  • リクエストの送信元。
  • Cloud Run サービスがプライベート ネットワークからのリクエストのみを許可するかどうか。

たとえば、VPC ネットワークからのリクエストの受信には、オンプレミス リソースや他のクラウドからのリクエストの受信とは異なる構成が必要になる場合があります。

他の Cloud Run サービス、App Engine、Cloud Run functions からリクエストを受信する

宛先の Cloud Run サービスが、他の Cloud Run サービス、App Engine、Cloud Run functions のいずれかからトラフィックを受信し、「内部」または「内部およびロード バランシング」の上り(内向き)設定を使用する場合、トラフィックは VPC ネットワークを使用し、内部とみなされる必要があります。

他の Cloud Run サービス、App Engine、または Cloud Run functions からリクエストを受信するには、次の手順を行います。

  1. ダイレクト VPC 下り(外向き)またはコネクタを使用するように送信元のサービスを構成します。

  2. 次のオプションのいずれかを使用して、Cloud Run へのトラフィックが VPC ネットワークを経由することを確認します。

    • VPC ネットワーク経由ですべてのトラフィックを送信するようにソースサービスを構成し、ダイレクト VPC 下り(外向き)またはコネクタに関連付けられたサブネットで限定公開の Google アクセスを有効にします。
    • Private Service Connect または内部アプリケーション ロードバランサを設定して、宛先の Cloud Run サービスと通信するようにします。この構成では、内部 IP アドレスを使用して Cloud Run にアクセスするため、リクエストは VPC ネットワーク経由で転送されます。
    • ソースサービスに関連付けられたサブネットで限定公開の Google アクセスを有効にし、DNS を構成して、run.app URL を private.googleapis.com199.36.153.8/30)または restricted.googleapis.com199.36.153.4/30)範囲に解決します。これらの範囲へのリクエストは、VPC ネットワーク経由で転送されます。

VPC ネットワークからリクエストを受信する

デフォルトでは、パブリック IP アドレスを持っている VPC リソースか、Cloud NAT を使用する VPC リソースにのみ、インターネットと Google Cloud サービス(Pub/Sub や Cloud Run など)への直接アクセスが許可されます。他の VPC リソースについては、Cloud Run へのトラフィック パスを有効にする方法がいくつかあります。

  1. 最も直接的なパスは、VPC リソースをホストするサブネットで限定公開の Google アクセスを有効にすることです。有効にすると、サブネット上のリソースはデフォルトの run.app URL で Cloud Run サービスにアクセスできます。VPC から Cloud Run へのトラフィックは Google のネットワーク内にとどまります。この場合、Cloud Run サービスに送信されるリクエストの IP 範囲は 0.0.0.0/32 です。リクエストのログエントリでは、HttpRequestremoteIp 属性は 0.0.0.0 になります。
  2. Cloud Run サービスを他の Google API とともに VPC ネットワークの内部 IP アドレスとして公開する必要がある場合は、Private Service Connect を検討してください。有効にすると、VPC リソースは、内部 IP アドレスを使用してデフォルトの run.app URL で Cloud Run サービスにアクセスできます。
  3. ロード バランシングの機能と制御が必要な場合は、内部アプリケーション ロードバランサの使用を検討してください。このアプローチでは、VPC リソースは、内部アプリケーション ロードバランサに関連付けられた URL を使用して Cloud Run サービスにアクセスします。
  4. サービスを内部クライアントにマネージド サービスとして公開し、アクセス可能なプロジェクトを制御する場合は、内部アプリケーション ロードバランサを使用してサービスをホストし、Private Service Connect を使用して公開できます。サービスを使用する必要があるプロジェクトは、Private Service Connect を使用してアクセスすることもできます。

レスポンスは、リクエストと同じパスを使用して返されます。

共有 VPC に関する特別な考慮事項

Cloud Run の上り(内向き)制御を使用して、すべてのトラフィックを(internal 設定を使用して)プライベート ネットワークから受信する必要がある場合は注意が必要です。次の状況では共有 VPC トラフィックが「内部」として認識されます。

  • Cloud Run サービスが共有 VPC ホスト プロジェクトで実行されている。

  • 共有 VPC 上り(内向き): Cloud Run サービスが共有 VPC ネットワークに接続している。このシナリオでは、次の点を考慮してください。

    • 共有 VPC ネットワークにトラフィックを送信するようにダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを構成したサービス リビジョンのみが、同じ共有 VPC ネットワークからのトラフィックも受け入れます。

    • リクエストでは、トラフィックの方向に応じて異なるパスが使用されます。Cloud Run から共有 VPC ネットワークに送信されるリクエストは、直接 VPC 下り(外向き)またはコネクタ経由で転送されます。一方、共有 VPC ネットワークから Cloud Run に送信されるリクエストでは、標準の上り(内向き)パスが使用されます。

    • Cloud Run サービスを共有 VPC ネットワークから切断するには、VPC ネットワーク アクセスなしで再デプロイするか、異なる VPC ネットワークにトラフィックを送信するように構成されたサービスで再デプロイします。

  • 内部アプリケーション ロードバランサでトラフィックのプロキシ処理を行っている。

  • 共有 VPC ホストとすべてのサービス プロジェクトを同じ VPC Service Controls 境界内に配置している。VPC Service Controls の設定方法については、VPC Service Controls(VPC SC)の使用をご覧ください。

プロジェクト外の VPC に関する特別な考慮事項

Cloud Run の上り(内向き)制御を使用して、すべてのトラフィックを(internal 設定を使用して)プライベート ネットワークから受信する必要がある場合は注意が必要です。次の場合を除き、プロジェクト外の他の VPC から受信したトラフィックは「内部」として認識されません。

  • VPC Service Controls が、run.googleapis.com のトラフィックを制限付きサービスとして許可するように構成されており、ソース サブネットで限定公開の Google アクセスが有効になっている。
  • Private Service Connect を使用して、Cloud Run サービスがマネージド サービスとして公開され(内部アプリケーション ロードバランサが必要)、他の VPC ネットワークからアクセスされている

プロジェクトの外部に VPC をピアリングしても、トラフィックが「内部」として認識されることはありません。

他の Google Cloud サービスからリクエストを受信する

Pub/Sub などの Google Cloud サービスから Cloud Run へのリクエストは、Google のネットワーク内にとどまります。

内部トラフィックのみを許可するように Cloud Run の上り(内向き)制御を構成している場合は、特別な考慮事項がいくつかあります。

  • 同じプロジェクト内または VPC Service Controls 境界内にある Cloud Scheduler、Cloud Tasks、Eventarc、Pub/Sub、合成モニター(稼働時間チェックを含む)、Workflow からのリクエストは「内部」として認識されます。
  • 同じプロジェクトまたは VPC Service Controls の境界内から送信される Cloud Run、App Engine、Cloud Run functions からのリクエストを「内部」として認識されるようにするには、追加の構成が必要です。詳細については、他の Cloud Run サービス、App Engine、Cloud Run 関数からリクエストを受信するセクションをご覧ください。
  • 選択した Google Cloud サービスが、上り(内向き)が internal に設定されている Cloud Run サービスにアクセスできない場合は、次の点に注意してください。Pub/Subinternal と認証の両方をサポート)、API GatewayDialogflow CX などで Cloud Run の認証がサポートされています。セキュリティ要件によっては、「内部」の上り(内向き)ではなく、宛先の Cloud Run サービスで認証を要求すれば十分な場合もあります。
  • 上記以外の Google Cloud サービスからのリクエストは内部として認識されないため、上り(内向き)が internal または internal-and-cloud-load-balancing に設定された Cloud Run サービスでは受信できません。

オンプレミスや他のクラウドからリクエストを受信する

オンプレミス リソースや他のクラウドから非公開でリクエストを受信する方法は複数あります。

  1. 基本構成: オンプレミス リソースやその他のクラウドからのリクエストがプライベート ネットワークを通過するようにするために、オンプレミス ホストに限定公開の Google アクセスを構成します。
  2. 内部 IP アドレスを使用して Cloud Run サービスを公開する: 内部 IP アドレスを使用して Cloud Run サービスを呼び出すには、オンプレミス ホストに Private Service Connect を構成します。オンプレミス ホストに Private Service Connect を追加すると、Cloud Run サービスを内部 IP アドレスとして VPC ネットワークに公開できます。Private Service Connect には費用が発生します。
  3. ロード バランシング機能の使用: ロード バランシングの機能と制御が必要な場合は、内部アプリケーション ロードバランサを使用します。
  4. 管理境界: サービスをマネージド サービスとして内部クライアントに公開し、アクセス可能なプロジェクトを制御できるようにする場合は、サービスを Private Service Connect で公開します。詳しくは、オンプレミス ホストからの Private Service Connect の使用をご覧ください(内部アプリケーション ロードバランサが必要です)。

リクエストがプライベート ネットワークから送信されることを必須にする

外部ソースからの受信トラフィック(上り、内向き)を防ぐには、制限付きの上り(内向き)設定を指定できます。最も制限の厳しい上り(内向き)設定が internal です。上り(内向き)を「internal」に設定すると、サービスは、プロジェクト、プロジェクトが接続されている共有 VPC ネットワーク、VPC Service Controls の境界からのリクエストのみを許可します。この設定には、リクエストの送信元に応じていくつかの制限があります。これらの制限と操作方法については、プライベート ネットワークからリクエストを受信するをご覧ください。

Cloud Run サービスごとに上り(内向き)設定を指定することも、組織内のすべての Cloud Run サービスに上り(内向き)設定を適用するようにすることもできます。

  • 各サービスに上り(内向き)設定を指定する: 上り(内向き)の設定をご覧ください。
  • プロジェクト、フォルダまたは組織内のすべての Cloud Run サービスに特定の上り(内向き)設定を適用する: run.allowedIngress 組織のポリシー制約を構成します。方法については、リスト型制約のポリシーのカスタマイズをご覧ください。

プライベート ネットワークにリクエストを送信する

Cloud Run サービスがプライベート ネットワーク上のリソースにアクセスする必要がある場合、ネットワークへのプライベート リクエストのパスを構成できます。この構成は、リクエストの最終宛先によって異なります。

VPC ネットワークにリクエストを送信する

VPC ネットワークにリクエストを送信するには、ダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを構成する必要があります。ダイレクト VPC 下り(外向き)と VPC コネクタを比較してください。料金を確認して、費用を把握します。

ダイレクト VPC 下り(外向き)コネクタまたはサーバーレス VPC アクセス コネクタが構成されている場合は、デフォルトで次のように配慮されます。

  • すべての DNS クエリは、VPC ネットワーク下り(外向き)設定に関連付けられた VPC ネットワーク用に構成されている DNS サーバーに送信されます。

  • 内部 IP アドレスへのリクエストは、ダイレクト VPC 下り(外向き)またはコネクタのいずれかを使用して VPC ネットワークに転送されます。公開された宛先へのリクエストは、下り(外向き)設定が構成されていない限り、インターネットに直接転送され続けます。

ダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを使用して転送されたリクエストでは、リクエストが通過したパスを使用してレスポンスが返されます。VPC から Cloud Run へのリクエストは、他のテクノロジーを使用して有効化され、サーバーレス VPC アクセスやダイレクト VPC 下り(外向き)を経由しません。このリクエストに対するレスポンスは、同じパスを使用して返されます。VPC から Cloud Run にリクエストを送信する詳細については、VPC ネットワークからリクエストを受信するをご覧ください。

プロジェクト外の VPC ネットワークにリクエストを送信する

プロジェクト外の VPC ネットワークにリクエストを送信するには:

  1. 共有 VPC ユーザーの場合は、共有 VPC ネットワークへの接続をご覧ください。
  2. 他の VPC の場合は、ダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを構成して、プロジェクトの VPC に接続します。
    • ピアリングされた VPC: VPC ネットワーク下り(外向き)を使用する VPC にピアリングされている VPC に送信するために、追加の構成は必要ありません。ただし、VPC ネットワーク下り(外向き)をホストするサブネット内の VM は、ターゲット VPC ネットワークに到達できる必要があります。
    • その他の VPC: プロジェクト外の VPC ネットワーク(同じ共有 VPC 環境に属していないか、プロジェクト VPC にピアリングされていない VPC)の場合は、VPC ネットワーク下り(外向き)の設定後に Private Service Connect を構成します。

他の Cloud Run サービスと Google Cloud サービスにリクエストを送信する

Cloud Run サービスから別の Google Cloud サービスへのリクエストは、Google の内部ネットワーク内にとどまり、VPC Service Controls の対象となります。

制限付きの上り(内向き)設定のある Cloud Run サービスにリクエストを送信する場合は、追加の構成が必要です。他の Cloud Run サービス、App Engine、Cloud Run 関数からリクエストを受信するをご覧ください。

オンプレミス リソースとその他のクラウドにリクエストを送信する

プライベート ネットワーク経由でオンプレミス リソースや他のクラウドにリクエストを送信するには、次のようにします。

  1. VPN トンネル経由など、宛先に非公開ルートで転送するように VPC ネットワークが構成されていることを確認します。
  2. VPC ネットワークにリクエストを送信するようにサービスを構成します。
  3. 次に、すべてのリクエストを VPC ネットワークに送信します。

すべてのリクエストが VPC ネットワークに送信されることを必須にする

Cloud Run サービスからのすべてのリクエストが VPC ネットワークに送信されるようにするには、「all-traffic」の VPC ネットワーク下り(外向き)設定を指定します。VPC ネットワーク下り(外向き)を使用する Cloud Run サービスごとに下り(外向き)設定を指定することも、プロジェクト、フォルダ、組織内のすべての Cloud Run サービスに対して任意の下り(外向き)設定を適用することもできます。

これは次のような場合に役立ちます。

  1. Cloud Run サービスに対して静的アウトバウンド IP アドレスを設定する場合。
  2. Cloud Run サービスからのすべての下り(外向き)に対してファイアウォール ルールを適用する場合。
  3. プライベート ネットワーク経由で、オンプレミス リソースと他のクラウドにリクエストを送信する場合。

Cloud Run サービスが VPC ネットワーク外の最終的な宛先にリクエストを送信すると、すべてのリクエストを VPC ネットワークに送信する必要があるため、(構成されていれば)サーバーレス VPC アクセス コネクタの帯域幅使用が増加し、それによって費用が増える可能性があります。サーバーレス VPC アクセス コネクタは、トラフィックが増加すると自動的にスケールアウトしますが、トラフィックが減少した場合はスケールインしません。料金を確認して、費用を把握します。

その他の制御

  • 境界制御: リソースのグループに対するデータ漏洩のリスクを軽減するには、VPC Service Controls を使用して、コンテキストアウェアの境界内にリソースを配置します。
  • きめ細かい制御: 特定の Cloud Run サービスや Compute Engine 仮想マシンなど、プライベート ネットワーク内の特定のリソースからのトラフィックに対するアクセスを制御するには、サービス アカウントを使用して権限と認証を制御します。

次のステップ

Terraform を使用している場合は、Terraform サンプルコードを使用して、プライベート ネットワークで Cloud Run サービスを設定できます。