Cloud Run での上り(内向き)の制限

このページでは、上り(内向き)の設定を使用して Cloud Run サービスへのネットワーク アクセスを制限する方法について説明します。ネットワーク レベルではデフォルトで、インターネット上の任意のリソースは、run.app URL または Cloud Run で設定されたカスタム ドメインから Cloud Run サービスにアクセスできます。このデフォルトを変更するには、上り(内向き)に別の設定を指定します。

この機能を IAM 認証方法と併用すると、サービスへのアクセスを管理できます。

使用可能な上り(内向き)設定

次の設定を使用できます。

設定 説明
すべて インターネットからサービスにアクセスできるようにします。IAM 起動元の権限は引き続き適用されます。
内部 同じプロジェクトまたは VPC Service Controls の境界内の VPC ネットワーク、Pub/Sub、Eventarc から発生したリクエストにのみ、サービスへのアクセスを許可できます。IAM 起動元の権限は引き続き適用されます。

何が内部とみなされ、何が内部サービスにアクセスできるかについては、内部サービスへのアクセスをご覧ください。

マルチテナンシー(同じプロジェクト内の複数の信頼ドメイン)はサポートされていません。
内部と Cloud Load Balancing 内部リクエストと HTTP(S) ロード バランシング経由のリクエストのみを受け入れます。IAM 起動元権限は引き続き適用されます。

Identity-Aware ProxyGoogle Cloud ArmorCloud CDN を使用している場合は、デフォルトの URL にアクセスすることで、このようなバイパスをしないようにすることもできます。

内部サービスへのアクセス

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

  • 内部サービスにアクセスする場合は、公開 URL(デフォルトの run.app URL または Cloud Run で設定されたカスタム ドメイン)を使用して通常どおりに呼び出します。

  • Compute Engine VM インスタンスからのリクエストの場合、または同じプロジェクトの VPC ネットワーク内で実行されている他のリソースからのリクエストの場合、さらなる設定は必要ありません。

  • 他の Cloud Run サービスまたは同じプロジェクト内の Cloud Functions からのリクエストでは、サービスまたは関数を VPC ネットワークに接続し、下り(外向き)はすべてコネクタ経由でルーティングします。詳しくは、VPC ネットワークへの接続をご覧ください。なお、IAM 起動元の権限は引き続き適用されます。

  • 同じプロジェクトの VPC ネットワーク内のリソースからのリクエストは、送信元のリソースがパブリック IP アドレスを持っていても、内部に分類されます。

  • Cloud Run Admin API がサービス境界内で制限されているサービスとして構成されている場合、トラフィックが VPC ネットワークから発信される、VPC Service Controls 境界内のリソースからのリクエストは、内部サービスを呼び出すことができます。

  • 共有 VPC リソースと内部サービスが同じ VPC SC 境界内にあり、Cloud Run Admin API がアービス境界内で制限されているサービスとして構成されている場合に限り、共有 VPC ネットワークにあるリソースは内部サービスを呼び出すことができます。

  • Cloud VPN 経由で VPC ネットワークに接続されているオンプレミス リソースからのリクエストは、internal とみなされます。

  • Pub/Sub と Eventarc から内部サービスへのリクエストの場合は、次の点に注意してください。

    • Pub/Sub によって呼び出される Cloud Run サービスで上り(内向き)設定を使用する場合は、カスタム ドメインではなく、そのサービスに Cloud Run のデフォルト app.run URL を使用する必要があります。
    • Pub/Sub サブスクリプションは、Cloud Run サービスと同じプロジェクトまたは VPC Service Controls の境界内になければなりません。
  • VPC ネットワークから発信されていないトラフィック ソースから内部サービスを呼び出す方法はありません(ただし Pub/Sub または Eventarc は除きます)。つまり、Cloud Scheduler、Cloud Tasks、Workflow では内部サービスを呼び出すことができません。

「内部」か「内部と Cloud Load Balancing」か

上り(内向き)が「内部と Cloud Load Balancing」に設定されたサービスには、Cloud Load Balancing によって設定されたロードバランサを介してアクセスすることもできます。「内部と Cloud Load Balancing」設定は、「内部」のスーパーセットです。つまり、「内部」 に設定されたサービスにアクセス可能なあらゆる通信は、「内部と Cloud Load Balancing」に設定されたサービスにも到達できます。

上り(内向き)の設定

以下のタブでサポートされているメソッドを使用して、上り(内向き)の設定ができます。

Console

新しいサービスをデプロイする場合:

  1. Cloud Run に移動します

  2. [サービスの作成] をクリックし、最初のステップ(サービスの設定)を必要に応じて構成して、[次へ] をクリックします。

  3. 必要に応じて 2 番目のステップ(サービスの最初のリビジョンの構成)を構成し、[次へ] をクリックします。

  4. 3 番目のステップで、このサービスをトリガーする方法を構成します。Ingress* ラベルの下で、許可する上り(内向き)トラフィックを選択します。

    画像

既存のサービスを構成する場合:

  1. サービスをクリックします。

  2. [トリガー] タブをクリックします。

  3. [上り] ラベルで、許可する上り(内向き)トラフィックを選択します。

    画像

  4. [保存] をクリックします。

コマンドライン

  1. 新しいサービスをデプロイする場合は、--ingress フラグを付加してサービスをデプロイします。

    gcloud run deploy SERVICE --image IMAGE_URL --platform managed --ingress INGRESS

    次のように置き換えます。

    • INGRESS を、使用可能な上り(内向き)設定のいずれかに置き換えます。
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE を、サービス名に置き換えます。
    • IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。
  2. 既存のサービスの上り(内向き)を変更する場合:

    gcloud run services update SERVICE --platform managed --ingress INGRESS

    次のように置き換えます。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.googleapis.com/ingress: アノテーションを更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/ingress: INGRESS

    次のように置き換えます。

  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

次のステップ

サーバーレス VPC アクセスを使用すると、下り(外向き)設定を使用して Cloud Run サービスを VPC ネットワークに直接接続できます。

また、Cloud Run では HTTP(S) 負荷分散も使用できます。