Membatasi traffic masuk untuk Cloud Run

Halaman ini menjelaskan cara menggunakan setelan traffic masuk untuk membatasi akses jaringan ke layanan Cloud Run Anda. Di tingkat jaringan, secara default, resource apa pun di internet dapat menjangkau layanan Cloud Run Anda di URL run.app atau di domain kustom yang disiapkan di Cloud Run. Anda dapat mengubah setelan default ini dengan menentukan setelan yang berbeda untuk traffic masuk. Semua jalur traffic masuk, termasuk URL run.app default, tunduk pada setelan ingress Anda. Traffic masuk ditetapkan di tingkat layanan.

Setelan traffic masuk dan metode autentikasi IAM adalah dua cara untuk mengelola akses ke layanan. Keduanya tidak saling bergantung. Untuk pendekatan berlapis guna mengelola akses, gunakan keduanya.

Setelan masuk yang tersedia

Berikut adalah setelan yang tersedia:

Setelan Deskripsi
Internal Batasan maksimum. Mengizinkan permintaan dari sumber berikut:
  • Aplikasi Internal Load Balancer, termasuk permintaan dari jaringan VPC Bersama saat dirutekan melalui Aplikasi Internal Load Balancer
  • Resource yang diizinkan oleh perimeter Kontrol Layanan VPC mana pun yang memuat layanan Cloud Run Anda. Cloud Run harus dikonfigurasi sebagai layanan yang dibatasi.
  • Jaringan VPC yang ada dalam project yang sama dengan layanan Cloud Run Anda
  • Traffic masuk VPC Bersama: Jaringan VPC Bersama tempat revisi Anda dikonfigurasi untuk mengirim traffic. Untuk mengetahui informasi tentang kapan traffic VPC Bersama dikenali sebagai "internal", lihat Pertimbangan khusus untuk VPC Bersama.
  • Produk Google Cloud berikut, jika berada dalam project atau perimeter Kontrol Layanan VPC yang sama dengan layanan Cloud Run Anda:
Permintaan dari sumber ini tetap berada dalam jaringan Google, meskipun jika sumber tersebut mengakses layanan Anda di URL run.app. Permintaan dari sumber lain, termasuk internet, tidak dapat menjangkau layanan Anda di run.app URL atau domain kustom.

Permintaan ke Cloud Run dari Cloud Run, Cloud Functions, atau App Engine harus diarahkan ke jaringan VPC agar dianggap internal. Untuk mengarahkan permintaan ke jaringan VPC, gunakan traffic keluar VPC Langsung atau konektor Akses VPC Serverless dan aktifkan Akses Google Pribadi pada subnet yang terkait dengan traffic keluar VPC Langsung atau konektornya.

Tidak ada dukungan untuk multi-tenancy, yaitu, beberapa domain kepercayaan dalam project yang sama.
Cloud Load Balancing dan Internal Mengizinkan permintaan dari resource berikut:
  • Resource yang diizinkan oleh setelan Internal yang lebih ketat
  • Load Balancer Aplikasi Eksternal
Gunakan setelan Internal dan Cloud Load Balancing untuk:
  • Terima permintaan dari internet melalui Aplikasi eksternal Load Balancer. Permintaan langsung ke URL run.app dari internet tidak diizinkan.
  • Pastikan permintaan dari internet tunduk pada fitur Aplikasi eksternal Load Balancer (seperti Identity-Aware Proxy, Google Cloud Armor, dan Cloud CDN).
Semua Batasan minimum. Mengizinkan semua permintaan, termasuk permintaan langsung dari internet ke URL run.app.

Mengakses layanan internal

Pertimbangan tambahan berikut berlaku:

  • Saat mengakses layanan internal, panggil layanan seperti yang biasa Anda lakukan menggunakan URL publiknya, baik URL run.app default atau domain kustom yang disiapkan di Cloud Run.

  • Untuk permintaan dari instance VM Compute Engine, tidak diperlukan penyiapan lebih lanjut untuk mesin yang memiliki alamat IP publik atau yang menggunakan Cloud NAT. Jika tidak, baca bagian Menerima permintaan dari jaringan VPC.

  • Untuk permintaan dari layanan Cloud Run lain atau dari Cloud Functions dalam project yang sama, hubungkan layanan atau fungsi ke jaringan VPC dan arahkan semua traffic keluar melalui konektor, seperti yang dijelaskan dalam VPC dengan konektor. Perlu diperhatikan bahwa izin invoker IAM masih diterapkan.

  • Permintaan dari resource dalam jaringan VPC pada project yang sama diklasifikasikan sebagai "internal" meskipun resource asalnya memiliki alamat IP publik.

  • Permintaan dari resource pada project terpisah tetapi dalam perimeter Kontrol Layanan VPC yang sama hanya dapat memanggil layanan internal jika Anda mengonfigurasi Cloud Run Admin API sebagai layanan terbatas di perimeter layanan.

  • Untuk informasi tentang kapan traffic VPC Bersama dikenali sebagai "internal", lihat Pertimbangan khusus untuk VPC Bersama.

  • Permintaan dari resource lokal yang terhubung ke jaringan VPC melalui Cloud VPN dan Cloud Interconnect dianggap "internal".

  • Untuk permintaan dari Cloud Scheduler, Cloud Tasks, Eventarc, Pub/Sub, BigQuery, dan Workflows ke layanan internal, pertimbangan berikut berlaku:

    • Anda harus menggunakan URL run.app default Cloud Run untuk layanan tersebut, bukan domain kustom apa pun.
    • Job, tugas, langganan Pub/Sub, peristiwa, alur kerja, atau fungsi jarak jauh BigQuery harus berada dalam perimeter Kontrol Layanan VPC yang sama dengan layanan Cloud Run.
  • Anda dapat memanggil layanan internal dari sumber traffic di luar jaringan VPC menggunakan Cloud Scheduler, Cloud Tasks, Pub/Sub, Eventarc, Workflows, atau BigQuery dari dalam project atau perimeter Kontrol Layanan VPC.

Setelan masuk

Anda dapat menyetel traffic masuk menggunakan salah satu metode yang didukung di tab:

Konsol

  1. Buka Cloud Run

  2. Jika Anda mengonfigurasi layanan baru, klik Buat Layanan dan isi halaman setelan layanan awal seperti yang diinginkan.

  3. Jika Anda mengonfigurasi layanan yang ada, klik layanan tersebut, lalu klik tab Networking.

  4. Pilih traffic masuk yang ingin Anda izinkan:

    gambar

  5. Klik Buat atau Simpan.

Command line

  1. Jika Anda men-deploy layanan baru, deploy layanan dengan flag --ingress:

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

    Ganti

    • INGRESS dengan salah satu setelan masuk yang tersedia:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE dengan nama layanan Anda
    • IMAGE_URL dengan referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  2. Jika Anda mengubah layanan masuk yang sudah ada:

    gcloud run services update SERVICE --ingress INGRESS

    Ganti

    • INGRESS dengan salah satu setelan masuk yang tersedia:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE dengan nama layanan Anda

YAML

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang ada, download konfigurasi YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Update anotasi 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

    Ganti

    • SERVICE dengan nama Cloud Run Anda.
    • INGRESS dengan salah satu setelan masuk yang tersedia:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION dengan nama revisi baru atau hapus (jika ada). Jika Anda memberikan nama revisi baru, nama tersebut harus memenuhi kriteria berikut:
      • Dimulai denganSERVICE-
      • Hanya berisi huruf kecil, angka, dan -
      • Tidak diakhiri dengan -
      • Tidak melebihi 63 karakter
  3. Ganti layanan dengan konfigurasi barunya menggunakan perintah berikut:

    gcloud run services replace service.yaml

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Tambahkan berikut ini ke file 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
    }
  }
}

Langkah selanjutnya