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

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

上り(内向き)設定と IAM 認証方法は、サービスへのアクセスを管理する 2 つの方法です。これらは互いに独立しています。アクセスを階層的に管理するには、両方を使用します。

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

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

設定 説明
内部 最も厳しい。次のソースからのリクエストを許可します。
  • 内部 HTTP(S) ロードバランサ。内部 HTTP(S) ロードバランサ経由でルーティングされた場合の共有 VPC ネットワークからのリクエストを含む。
  • Cloud Run サービスを含む任意の VPC Service Controls の境界で許可されるリソース
  • Cloud Run サービスと同じプロジェクトまたは VPC Service Controls の境界内にある VPC ネットワーク
  • 次の Google Cloud プロダクト(Cloud Run サービスと同じプロジェクトまたは VPC Service Controls の境界内にある場合)。
    • Eventarc
    • Pub/Sub
    • Workflows
これらのソースからのリクエストは、run.app URL でサービスにアクセスする場合でも、Google ネットワーク内にとどまります。インターネットを含む他のソースからのリクエストは、run.app URL またはカスタム ドメインのサービスに到達できません。

マルチテナンシー(同じプロジェクト内の複数の信頼ドメイン)はサポートされていません。
内部と Cloud Load Balancing 次のリソースからのリクエストを許可します。
  • より厳しい内部設定によって許可されるリソース
  • 外部 HTTP(S) ロードバランサ
内部ロード バランシングと Cloud Load Balancing の設定を使用して、以下の操作を行います。
  • 外部 HTTP(S) ロードバランサからのリクエストを受け入れ、インターネットから直接リクエストを受信することはありません。run.app URL へのリクエストは外部 HTTP(S) ロードバランサをバイパスします。この設定は外部リクエストが run.app URL に到達しないようにします。
  • インターネットからのリクエストを外部 HTTP(S) ロードバランサ機能(Identity-Aware ProxyGoogle Cloud ArmorCloud CDN など)の対象にします。
すべて 最も寛容。インターネットから run.app の 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、Workflows から内部サービスへのリクエストに関して、次の点を考慮してください。

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

上り(内向き)の設定

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

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
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

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

    • SERVICE は、Cloud Run の名前に置き換えます。
    • INGRESS を、使用可能な上り(内向き)設定のいずれかに置き換えます。
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION を新しいリビジョン名に置き換えるか、削除(存在する場合)します。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります
      • SERVICE- で始まる
      • 小文字、数字、- のみが使用されている
      • 末尾が - ではない
      • 63 文字以内である
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

次のステップ