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

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

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

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

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

設定 説明
内部 最も厳しい。次のソースからのリクエストを許可します。
  • 内部アプリケーション ロードバランサ(内部アプリケーション ロードバランサ経由でルーティングされた場合の共有 VPC ネットワークからのリクエストを含む)。
  • Cloud Run サービスを含む任意の VPC Service Controls の境界で許可されるリソース
  • Cloud Run サービスと同じプロジェクトまたは VPC Service Controls の境界内にある VPC ネットワーク
  • 共有 VPC 上り(内向き): リビジョンがトラフィックを送信するように構成されている共有 VPC ネットワーク。共有 VPC トラフィックが「内部」として認識される条件については、共有 VPC に関する特別な考慮事項をご覧ください。
  • 次の Google Cloud プロダクト(Cloud Run サービスと同じプロジェクトまたは VPC Service Controls の境界内にある場合)。
    • Cloud Scheduler
    • Cloud Tasks
    • Eventarc
    • Pub/Sub
    • Workflows
    • BigQuery
これらのソースからのリクエストは、run.app URL でサービスにアクセスする場合でも、Google ネットワーク内にとどまります。インターネットを含む他のソースからのリクエストは、run.app URL またはカスタム ドメインのサービスに到達できません。

Cloud Run、Cloud Functions、App Engine から Cloud Run へのリクエストを内部リクエストと見なすには、VPC ネットワークに送信する必要があります。VPC ネットワークにリクエストをルーティングするには、ダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを使用して、ダイレクト VPC 下り(外向き)またはコネクタに関連付けられたサブネットで限定公開の Google アクセスを有効にします。

マルチテナンシー(同じプロジェクト内の複数の信頼ドメイン)はサポートされていません。
内部と Cloud Load Balancing 次のリソースからのリクエストを許可します。
  • より厳しい内部設定によって許可されるリソース
  • 外部アプリケーション ロードバランサ
内部ロード バランシングと Cloud Load Balancing の設定を使用して、以下の操作を行います。
  • 外部アプリケーション ロードバランサを介してインターネットからのリクエストを受け入れます。インターネットから run.app URL に直接リクエストを送信することはできません。
  • インターネットからのリクエストを外部アプリケーション ロードバランサ機能(Identity-Aware ProxyGoogle Cloud ArmorCloud CDN など)の対象にします。
すべて 最も寛容。インターネットから run.app の URL に直接送信されるリクエストを含むすべてのリクエストを許可します。

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

次のその他の考慮事項も適用されます。

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

  • Compute Engine VM インスタンスからのリクエストの場合、パブリック IP アドレスを持つマシンや Cloud NAT を使用するマシンでは、追加の設定は必要ありません。そうでない場合は、VPC ネットワークからリクエストを受け取るをご覧ください。

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

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

  • Cloud Run Admin API がサービス境界内で制限されているサービスとして構成されている場合、同じ VPC Service Controls 境界内にある別のプロジェクトのリソースからのリクエストで呼び出せるのは内部サービスに限られます。

  • 共有 VPC トラフィックが「内部」として認識されるタイミングについては、共有 VPC に関する特別な考慮事項をご覧ください。

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

  • Cloud Scheduler、Cloud Tasks、Eventarc、Pub/Sub、BigQuery、Workflows から内部サービスへのリクエストについては、次の点を考慮してください。

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

上り(内向き)の設定

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

コンソール

  1. Cloud Run に移動します

  2. 新しいサービスを構成する場合は、[サービスを作成] をクリックし、必要に応じて最初のサービス設定ページに入力します。

  3. 既存のサービスを構成する場合は、サービスをクリックし、[ネットワーキング] タブをクリックします。

  4. 許可する上り(内向き)トラフィックを選択します。

    画像

  5. [作成] または [保存] をクリックします。

コマンドライン

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

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

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

    • INGRESS は、使用可能な上り(内向き)設定のいずれかに置き換えます。
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE は、サービス名に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
  2. 既存のサービスの上り(内向き)を変更する場合:

    gcloud run services update SERVICE --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

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

次のコードを main.tf ファイルに追加します。

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "ingress-service"
  location = "us-central1"

  # For valid annotation values and descriptions, see
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#ingress
  ingress = "INGRESS_TRAFFIC_INTERNAL_ONLY"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello" #public image for your service
    }
  }
}

次のステップ