Cloud Run のネットワーク上り(内向き)を制限する

このページでは、上り(内向き)の設定を使用して Cloud Run サービスへのネットワーク アクセスを制限する方法について説明します。

ネットワーク レベルでは、Cloud Run サービスのエンドポイントは次のネットワーク上り(内向き)パスから到達可能です。

  • デフォルトの run.app URL(無効にできます)
  • 構成されたドメイン マッピング
  • 構成済みの外部アプリケーション ロードバランサまたは内部アプリケーション ロードバランサ

すべてのネットワーク上り(内向き)パスは、サービスの上り(内向き)設定の対象となります。デフォルトの上り(内向き)パスと上り(内向き)設定によって、インターネット上の任意のリソースが Cloud Run サービスにアクセスできます。カスタム制約を使用して、組織または一連のプロジェクトの上り(内向き)設定を制限できます。上記のネットワーク上り(内向き)パスのいずれかからサービス エンドポイントに到達するリクエストには、引き続き IAM 認証が適用されます。アクセスを階層的に管理するには、ネットワーク上り(内向き)設定と IAM 認証の両方を使用します。

使用可能なネットワーク上り(内向き)設定

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

設定 Description
内部 最も厳しい。次のソースからのリクエストを許可します。
  • 内部アプリケーション ロードバランサ(内部アプリケーション ロードバランサ経由で転送された場合の共有 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 を使用している場合)。
これらのソースからのリクエストは、run.app URL でサービスにアクセスする場合でも、Google ネットワーク内にとどまります。インターネットを含む他のソースからのリクエストは、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 Run functions から「内部」または「内部と Cloud Load Balancing」に設定されている Cloud Run サービスに呼び出しを行う場合、トラフィックは内部と見なされる VPC ネットワーク経由でルーティングする必要があります。他の Cloud Run サービス、App Engine、Cloud Run 関数からリクエストを受信するをご覧ください。

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

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

上り(内向き)を設定する

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

コンソール

  1. Google Cloud コンソールで [Cloud Run] ページに移動します。

    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"

  deletion_protection = false # set to "true" in production

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

デフォルトの URL を無効にする

Cloud Run サービスのデフォルトの run.app URL を無効にして、サービスの他の上り(内向き)パス(Cloud Load Balancing と構成されたドメイン マッピング)からのトラフィックのみを許可します。

デフォルトの URL を無効にするには、次の手順を行います。

コマンドライン

  • サービスの run.app URL を無効にするには、--no-default-url フラグを指定して gcloud beta run deploy または gcloud beta run services update コマンドを実行します。

    gcloud beta run deploy SERVICE_NAME --no-default-url

    ここで、SERVICE_NAME は Cloud Run サービスの名前です。

出力に、URL が None として表示されます。

デフォルトの URL を復元するには、--default-url フラグを使用します。

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.app URL を無効にするには、run.googleapis.com/default-url-disabled アノテーションを使用します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/default-url-disabled: true
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

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

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

    gcloud run services replace service.yaml

デフォルトの URL に戻すには、run.googleapis.com/default-url-disabled アノテーションを削除します。

次の Google Cloud サービスは、デフォルトの run.app URL を使用して Cloud Run を呼び出します。デフォルトの run.app URL を無効にすると、次のサービスが想定どおりに動作しなくなります。

次のステップ