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

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

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

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

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

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

これらのソースからのリクエストは、run.app URL でサービスにアクセスする場合でも、Google ネットワーク内にとどまります。インターネットを含む他のソースからのリクエストは、run.app URL またはカスタム ドメインのサービスに到達できません。

Cloud Scheduler、Cloud Tasks、Eventarc、Pub/Sub、BigQuery、Workflows から内部サービスへのリクエストの場合、そのサービスに Cloud Run のデフォルト run.app URL を使用する必要があります。カスタム ドメインは使用できません。
内部と Cloud Load Balancing この設定では、次のリソースからのリクエストが許可されます。
  • より厳しい「内部」設定によって許可されるリソース
  • 外部アプリケーション ロードバランサ
次の場合は、この設定を使用します。
  • 外部アプリケーション ロードバランサを介してインターネットからのリクエストを受け入れる。インターネットから run.app URL に直接リクエストを送信することはできません。
  • インターネットからのリクエストを外部アプリケーション ロードバランサ機能(Identity-Aware ProxyGoogle Cloud ArmorCloud CDN など)の対象にする。

注: gcloud CLI でこの設定を有効にするには、internal-and-cloud-load-balancing を使用します。Google Cloud コンソールでこの設定を有効にするには、[内部] > [外部アプリケーション ロードバランサからのトラフィックを許可する] を選択します。
すべて 最も寛容。インターネットから run.app の URL に直接送信されるリクエストを含むすべてのリクエストを許可します。

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

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

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

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

  • Cloud Run、App Engine、または Cloud Functions から「内部」または「内部と Cloud Load Balancing」に設定されている Cloud Run サービスに呼び出しを行う場合、トラフィックは内部と見なされる VPC ネットワーク経由でルーティングする必要があります。他の Cloud Run サービス、App Engine、Cloud Functions からリクエストを受信するをご覧ください。

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

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

上り(内向き)の設定

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

コンソール

  1. Cloud Run に移動します

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

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

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

    画像

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

gcloud

  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 の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
  2. 既存のサービスの上り(内向き)を変更する場合:

    gcloud run services update SERVICE --ingress INGRESS

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

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    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
    }
  }
}

次のステップ