Mengonfigurasi setelan jaringan (generasi ke-1)
Setelan jaringan fungsi Cloud Run memungkinkan Anda mengontrol traffic masuk jaringan serta traffic keluar ke dan dari fungsi individual. Misalnya, Anda dapat menggunakan setelan jaringan untuk kasus penggunaan berikut:
- Amankan fungsi Anda dengan menerapkan kontrol akses berbasis jaringan.
- Buat traffic keluar dari fungsi mematuhi firewall, DNS, dan aturan perutean yang dikaitkan dengan jaringan VPC Anda.
- Kaitkan traffic keluar fungsi dengan alamat IP statis.
Untuk mengetahui detail selengkapnya tentang kasus penggunaan, lihat bagian Contoh kasus penggunaan.
Setelan ingress
Setelan traffic masuk mengontrol apakah resource di luar project Google Cloud atau perimeter layanan VPC Service Controls dapat memanggil fungsi.
Agar tunduk pada kebijakan perimeter Kontrol Layanan VPC, resource harus menjadi bagian layanan yang akan dibatasi. Untuk fungsi Cloud Run (generasi ke-1), layanan yang dibatasi adalah Cloud Functions API.
Batasan
Fungsi khusus internal yang dipicu HTTP dapat hanya dipanggil oleh permintaan HTTP yang dibuat di dalam VPC seperti yang berasal dari Kubernetes Engine, Compute Engine, yakni Lingkungan Fleksibel App Engine, atau dibuat oleh Cloud Scheduler, Cloud Tasks, Workflows, atau BigQuery resource yang berada dalam project atau perimeter Kontrol Layanan VPC yang sama. Artinya, permintaan HTTP yang dibuat oleh atau dirutekan melalui Pub/Sub atau Eventarc tidak dapat memicu fungsi ini. Pemicu peristiwa selalu dianggap "internal" dan diizinkan, terlepas dari setelan traffic masuk.
Mengonfigurasi setelan traffic masuk
Untuk membatasi resource dari luar project atau perimeter, tentukan salah satu nilai setelan traffic masuk berikut:
- Izinkan semua traffic: Default. Semua permintaan masuk ke fungsi diizinkan, baik dari internet maupun resource dalam project yang sama.
Hanya izinkan traffic internal: Hanya traffic dari Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, BigQuery, dan jaringan VPC dalam project atau perimeter Kontrol Layanan VPC yang sama yang diizinkan. Semua permintaan lainnya ditolak dengan error
404
.Untuk permintaan dari VPC Bersama, perhatikan pertimbangan berikut:
- Traffic dianggap internal jika fungsi di-deploy di project host VPC Bersama.
- Traffic dianggap internal jika host VPC Bersama dan semua project layanan ditempatkan di dalam perimeter Kontrol Layanan VPC yang sama.
- Semua traffic lain dari jaringan VPC Bersama ditolak.
Izinkan traffic internal dan traffic dari Cloud Load Balancing: Traffic dari Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, BigQuery, dan jaringan VPC dalam project atau perimeter Kontrol Layanan VPC yang sama diizinkan. Traffic dari Cloud Load Balancing diizinkan.
Anda dapat menentukan setelan traffic masuk saat men-deploy atau memperbarui fungsi menggunakan konsol Google Cloud, Google Cloud CLI, atau Terraform:
Konsol
Buka halaman Ringkasan Fungsi di Google Cloud Console:
Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.
Luaskan setelan lanjutan dengan mengklik Runtime, build ....
Di bagian Koneksi, pilih nilai untuk Setelan traffic masuk.
gcloud
Gunakan perintah gcloud functions deploy
untuk men-deploy atau memperbarui
fungsi dan menentukan
flag
--ingress-settings
:
gcloud functions deploy FUNCTION_NAME
--trigger-http
--ingress-settings INGRESS_SETTINGS
FLAGS...
dengan:
FUNCTION_NAME
adalah nama fungsi Anda.INGRESS_SETTINGS
adalah salah satu nilai yang didukung untuk setelan traffic masuk. Kemungkinan nilainya adalah:all
internal-only
internal-and-gclb
: memungkinkan traffic internal serta traffic yang dikirim ke IP publik yang diekspos oleh Cloud Load Balancing. Block traffic yang dikirim kecloudfunctions.net
atau domain kustom apa pun yang disiapkan melalui fungsi-fungsi Cloud Run. Mencegah pengguna menghindari kontrol akses apa pun (Cloud Armor, IAP) yang mereka siapkan melalui Cloud Load Balancing.
FLAGS...
mengacu pada tanda lain yang Anda teruskan ke Perintahdeploy
.
Terraform
Opsional. Untuk memperbarui kolom setelan traffic masuk file main.tf
resource Terraform Anda, sertakan argumen ingress_settings
yang ingin
Anda deploy atau perbarui. Membuat perubahan pada setelan traffic masuk akan membuat ulang fungsi.
Dari file
main.tf
, temukan resource yang ingin Anda batasi setelan traffic masuknya dan perbarui ke setelan yang diinginkan, misalnya:resource "google_cloudfunctions_function" "function" { name = "function" location = "us-central1" description = "Sample function" ingress_settings = "INGRESS_SETTINGS" }
dengan INGRESS_SETTINGS adalah salah satu nilai yang didukung untuk setelan traffic masuk. Kemungkinan nilainya adalah:
ALLOW_ALL
(default): Semua permintaan masuk ke fungsi diizinkan, baik dari internet dan resource dalam project yang sama.ALLOW_INTERNAL_ONLY
: Hanya traffic dari Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, dan jaringan VPC di project atau perimeter Kontrol Layanan VPC yang sama yang diizinkan.ALLOW_INTERNAL_AND_GCLB
: Memungkinkan traffic internal serta traffic yang dikirim ke IP publik yang diekspos oleh Cloud Load Balancing. Memblokir traffic yang dikirim kecloudfunctions.net
atau penyiapan domain kustom apa pun melalui fungsi Cloud Run. Mencegah pengguna mengakali kontrol akses apa pun (Cloud Armor, IAP) yang mereka siapkan melalui Cloud Load Balancing.
Jika menggunakan Google Cloud Armor dengan Cloud Load Balancing, Anda dapat membuat kebijakan keamanan yang memfilter kondisi berbasis traffic seperti alamat IP permintaan masuk, rentang IP, kode wilayah, atau header permintaan. Untuk mengetahui informasi selengkapnya, baca ringkasan kebijakan keamanan Google Cloud Armor.
Setelan keluar
Setelan traffic keluar mengontrol perutean permintaan HTTP keluar dari suatu fungsi. Untuk menentukan setelan traffic keluar, Anda harus menghubungkan fungsi ke jaringan VPC dengan menggunakan konektor Akses VPC Serverless. Setelan traffic keluar mengontrol kapan traffic dirutekan melalui konektor di jaringan VPC Anda.
Batasan
Akses VPC Serverless hanya mendukung pemilihan rute traffic IPv4. Traffic IPv6 tidak didukung, meskipun Anda memiliki rute IPv6 di jaringan VPC Anda.
Untuk keamanan tambahan, Google Cloud memblokir paket traffic keluar ke alamat IP eksternal pada port tujuan TCP 25.
Fungsi atau layanan pengguna yang memanggil fungsi atau layanan yang dilindungi oleh jaringan VPC harus merutekan pemanggilan tersebut melalui konektor VPC.
Mengonfigurasi setelan traffic keluar
Untuk setelan traffic keluar, Anda dapat menentukan hal berikut:
Rutekan hanya permintaan ke IP pribadi melalui konektor VPC: Default. Traffic dirutekan melalui jaringan VPC hanya jika paket yang membawa traffic memiliki tujuan yang sesuai dengan:
Paket ke tujuan lain dirutekan dari fungsi Cloud Run ke internet dan bukan melalui jaringan VPC apa pun.
Mengarahkan rute semua traffic melalui konektor VPC: Traffic selalu dirutekan melalui jaringan VPC yang terkait dengan konektor, untuk semua tujuan paket. Anda harus menggunakan opsi ini dalam keadaan berikut:
- Jika Anda perlu mengirim traffic ke rentang subnet VPC dengan rentang alamat IP eksternal yang digunakan secara pribadi. Untuk informasi selengkapnya tentang rentang subnet VPC, lihat Rentang IPv4 yang valid dalam ringkasan Subnet.
- Jika Anda perlu mengirim traffic ke endpoint Private Service Connect untuk Google API yang alamatnya adalah alamat IP eksternal yang digunakan secara pribadi. Untuk informasi selengkapnya tentang endpoint Private Service Connect untuk Google API, lihat Akses Google API melalui endpoint.
- Jika Anda perlu mengirim traffic ke tujuan alamat IP eksternal lain yang digunakan secara pribadi yang dapat dirutekan dalam konektor jaringan VPC. Contoh tujuan lain yang mencakup alamat IP eksternal yang digunakan secara pribadi mungkin mencakup rentang subnet peering, rentang subnet peering yang dibuat dari Rentang alamat IP yang dialokasikan untuk layanan, dan tujuan tersebut yang dapat diakses menggunakan rute khusus di jaringan VPC.
Jika jaringan VPC Anda menyertakan rute default, paket akan tetap dirutekan ke internet setelah diproses konektor saat Anda mengonfigurasikan gateway Cloud NAT untuk menyediakan layanan NAT ke subnet yang digunakan konektor. Paket ini tunduk pada rute di jaringan VPC dan aturan firewall yang diterapkan ke jaringan VPC Anda. Anda dapat menggunakan konfigurasi rute dan firewall guna mengontrol traffic keluar internet untuk semua permintaan keluar yang dikirimkan fungsi Anda melalui konektor Akses VPC Serverless.
Anda dapat menentukan setelan traffic keluar saat men-deploy atau memperbarui fungsi menggunakan konsol Google Cloud atau Google Cloud CLI.
Konsol
Buka halaman Ringkasan Fungsi di Google Cloud Console:
Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.
Luaskan setelan lanjutan dengan mengklik Runtime, build ....
Di bagian Koneksi, di bagian Setelan traffic keluar, pilih konektor Akses VPC Serverless.
Pilih setelan traffic keluar yang sesuai berdasarkan cara Anda ingin merutekan traffic keluar melalui konektor.
gcloud
Gunakan perintah gcloud functions deploy
untuk men-deploy atau memperbarui
fungsi dan menentukan
flag
--egress-settings
:
gcloud functions deploy FUNCTION_NAME
--vpc-connector CONNECTOR_NAME
--egress-settings EGRESS_SETTINGS
FLAGS...
dengan:
FUNCTION_NAME
adalah nama fungsi Anda.CONNECTOR_NAME
adalah nama konektor Akses VPC Serverless yang akan digunakan. Lihat dokumentasigcloud
untuk informasi selengkapnya.EGRESS_SETTINGS
adalah salah satu nilai yang didukung untuk setelan traffic keluar: lihat dokumentasigcloud
.FLAGS...
mengacu pada tanda lain yang Anda teruskan ke Perintahdeploy
.
Contoh kasus penggunaan
Contoh berikut menunjukkan cara mengonfigurasi akses jaringan dalam beberapa skenario umum.
Membuat fungsi yang tidak dapat dipanggil oleh klien eksternal
Anda dapat mengamankan fungsi HTTP dengan hanya mengizinkan fungsi tersebut dipanggil oleh resource di project Google Cloud atau perimeter layanan Kontrol Layanan VPC yang sama.
Deploy fungsi Anda dan hanya izinkan traffic internal. Gunakan konsol Google Cloud atau Google Cloud CLI:
Konsol
Buka halaman Ringkasan Fungsi di Google Cloud Console:
Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.
Luaskan setelan lanjutan dengan mengklik Runtime, build ....
Di bagian Koneksi, pada Setelan traffic masuk, pilih Izinkan traffic internal saja.
gcloud
Gunakan perintah
gcloud functions deploy
:gcloud functions deploy FUNCTION_NAME \ --ingress-settings internal-only \ FLAGS...
Setelah fungsi di-deploy, permintaan yang berasal dari luar project Google Cloud Anda akan diblokir agar tidak menjangkau fungsi tersebut. Jika Anda menggunakan Kontrol Layanan VPC, permintaan dari luar perimeter layanan akan diblokir. Instance VM di dalam project atau perimeter layanan masih dapat menjangkau fungsi Anda dengan membuat permintaan ke endpoint HTTPS-nya.
Jika Anda ingin memanggil fungsi yang dibatasi ini dari fungsi lain, fungsi tersebut harus merutekan traffic keluarnya melalui jaringan VPC Anda.
Menggunakan setelan traffic keluar dan traffic masuk untuk membatasi akses
Anda dapat menggabungkan traffic masuk dan keluar ke layanan Anda untuk menambahkan lapisan pembatasan tambahan.
Clone repositori
cloud-run-sample
dan ubah ke direktorivpc-sample
:git clone https://github.com/GoogleCloudPlatform/cloud-run-samples cd vpc-sample
Instal dependensi Python:
pip3 install -r requirements.txt
Anda dapat membuka file
main.py
di direktorivpc-sample
untuk melihat fungsi yang sedang di-deploy:Deploy fungsi tersebut:
gcloud functions deploy restricted-function
--runtime=python38
--trigger-http
--no-allow-unauthenticated
--ingress-settings=internal-only
--entry-point=hello_worldSiapkan konektor Akses VPC Serverless:
gcloud compute networks vpc-access connectors create serverless-connector
--region=SERVICE_REGION
--range=10.8.0.0/28dengan
SERVICE_REGION
adalah region untuk konektor Anda; region ini harus sesuai dengan region layanan serverless Anda. Jika layanan Anda berada di regionus-central
ataueurope-west
, gunakanus-central1
ataueurope-west1
.Buat image container Anda:
gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
dengan
PROJECT_ID
sebagai project ID.Tindakan ini akan membuat image container yang memanggil
get_hello_world
saat di-deploy dari filemain.py
:Gunakan perintah
gcloud run deploy run-function
untuk men-deploy container Cloud Run:gcloud run deploy run-function
--image gcr.io/PROJECT_ID
/restricted-function-caller
--no-allow-unauthenticated
--update-env-vars=URL=https://SERVICE_REGION
-PROJECT_ID
.cloudfunctions.net/restricted-function-caller
--vpc-egress=all
--vpc-connector=serverless-connector
--region=SERVICE_REGION
dengan:
PROJECT_ID
adalah project ID.SERVICE_REGION
adalah region untuk konektor Anda; region ini harus cocok dengan region layanan serverless Anda. Jika layanan Anda berada di regionus-central
ataueurope-west
, gunakanus-central1
ataueurope-west1
.
Layanan
run-function
Cloud Run kini disetel untuk mengirim permintaanGET
dari konektor VPC ke fungsi yang dibatasi jaringan.
Memilih rute traffic keluar fungsi melalui jaringan VPC Anda
Jaringan VPC di Google Cloud mendukung berbagai konfigurasi dan fitur jaringan. Dengan mengarahkan traffic keluar dari ke jaringan VPC, Anda dapat memastikan bahwa Traffic keluar fungsi Cloud Run mengikuti VPC Anda firewall jaringan, DNS, perutean, dan aturan lainnya, dan Anda dapat menggunakan produk seperti Cloud NAT.
Siapkan jaringan VPC. Konfigurasikan jaringan VPC yang sudah ada atau buat yang baru dengan mengikuti panduan dalam Menggunakan jaringan VPC.
Siapkan konektor Akses VPC Serverless. Fungsi Cloud Run memerlukan Akses VPC Serverless khusus untuk mengarahkan traffic ke jaringan VPC Anda. Buat konektor dan siapkan izin yang sesuai dengan mengikuti petunjuk di bagian Menghubungkan ke jaringan VPC.
Deploy fungsi yang menggunakan konektor dan rutekan semua traffic keluar melalui konektor. Gunakan konsol Google Cloud atau alat command line
gcloud
:Konsol
Buka halaman Ringkasan Fungsi di Google Cloud Console:
Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.
Luaskan setelan lanjutan dengan mengklik Runtime, build ....
Di bagian Koneksi, di bagian Setelah traffic keluar, pilih konektor Akses VPC Serverless Anda lalu pilih Rutekan semua traffic melalui konektor VPC.
gcloud
Gunakan perintah
gcloud functions deploy
:gcloud functions deploy FUNCTION_NAME \ --vpc-connector CONNECTOR_NAME \ --egress-settings all \ FLAGS...
Setelah fungsi di-deploy, semua traffic yang berasal dari fungsi Anda akan dirutekan melalui jaringan VPC dan mematuhi aturan yang ditetapkan pada jaringan VPC Anda. Perhatikan bahwa fungsi Anda tidak dapat mengakses internet publik kecuali jika Anda mengonfigurasi Cloud NAT. Perhatikan lebih lanjut bahwa Anda memerlukan Cloud NAT untuk memetakan semua rentang IP primer dan sekunder untuk semua subnet ke gateway NAT, agar subnet konektor disertakan dalam pemetaan.
Mengaitkan traffic keluar fungsi dengan alamat IP statis
Dalam beberapa kasus, Anda mungkin ingin traffic yang berasal dari fungsi Anda dikaitkan dengan alamat IP statis. Misalnya, cara ini berguna jika Anda memanggil layanan eksternal yang hanya mengizinkan permintaan dari alamat IP yang ditentukan secara eksplisit.
Rutekan traffic keluar fungsi Anda melalui jaringan VPC. Lihat bagian sebelumnya, Memilih rute traffic keluar fungsi melalui jaringan VPC Anda.
Siapkan Cloud NAT dan tentukan alamat IP statis. Ikuti panduan di Menentukan rentang subnet untuk NAT dan Menentukan alamat IP untuk NAT guna menyiapkan Cloud NAT untuk subnet yang terkait dengan konektor Akses VPC Serverless fungsi Anda. Cloud NAT Anda harus memetakan semua rentang IP primer dan sekunder untuk semua subnet ke gateway NAT agar dapat menyertakan subnet konektor dalam pemetaan.
Load balancing multi-region
Anda dapat men-deploy fungsi ke region yang berbeda, dan mengizinkan permintaan dikirim ke region responsif terdekat. Untuk melakukannya, Anda perlu menyiapkan grup endpoint jaringan serverless (NEG) untuk fungsi tersebut dan menghubungkannya ke load balancer, seperti yang dijelaskan dalam Menyiapkan HTTP(S) load balancer dengan NEG serverless.