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

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

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

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

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

ネットワーク タグを使用して、コネクタ VM による VPC リソースへのアクセスを制限します

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

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

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

内部と Cloud Load Balancing この設定では、次のリソースからのリクエストが許可されます。
  • より厳しい「内部」設定によって許可されるリソース
  • 外部アプリケーション ロードバランサ
次の場合は、この設定を使用します。
  • 外部アプリケーション ロードバランサを介してインターネットからのリクエストを受け入れる。インターネットから s3nsrun.fr URL に直接リクエストを送信することはできません。
  • インターネットからのリクエストを外部アプリケーション ロードバランサ機能(Identity-Aware ProxyGoogle Cloud ArmorCloud CDN など)の対象にする。

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

内部サービスにアクセスする

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

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

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

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

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

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

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

上り(内向き)は、 Cloud de Confiance コンソール、Google Cloud CLI、YAML、または Terraform を使用して設定できます。

コンソール

  1. Cloud de Confiance コンソールで、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 コマンドをご覧ください。

Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。

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

デフォルトの URL を無効にするには、 Cloud de Confiance コンソール、Google Cloud CLI、YAML、または Terraform を使用して次の操作を行います。

コンソール

  1. Cloud de Confiance コンソールで、Cloud Run の [サービス] ページに移動します。

    Cloud Run に移動

  2. 既存のサービスをクリックします。

  3. [ネットワーキング] タブを選択します。

  4. [エンドポイント] カードで、[デフォルトの HTTPS エンドポイント URL] の [有効にする] をオフにします。

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

デフォルトの URL を復元するには、[有効にする] を選択して [保存] をクリックします。

gcloud

  • 既存のサービスの場合は、--no-default-url フラグを指定して gcloud run services update コマンドを実行します。次に例を示します。

    gcloud run services update SERVICE_NAME --no-default-url
  • 新しいサービスの場合は、--no-default-url フラグを指定して gcloud run deploy コマンドを実行します。次に例を示します。

    gcloud 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. s3nsrun.fr URL を無効にするには、run.googleapis.com/default-url-disabled アノテーションを使用します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/default-url-disabled: true
      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 アノテーションを削除します。

Terraform

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

Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。
  resource "google_cloud_run_v2_service" "disable_default_url_service" {
    name     = "cloudrun-service"
    location = "europe-west1"
    default_uri_disabled = true

    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
      }
      annotations = {
        "run.googleapis.com/ingress" = "all"   # "all" or "internal-only"
      }

    }
  }

main.tf ファイルに launch_stage 行と default_uri_disabled 行があることを確認します。前の google_cloud_run_v2_service リソースには、プレビュー版でデフォルトの URL が無効になっている Cloud Run サービスを指定します。

デフォルトの URL に戻すには、default_uri_disabled 引数と launch_stage 引数を削除します。

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

次のステップ