Mengonfigurasi setelan jaringan

Dengan setelan jaringan Cloud Functions, Anda dapat mengontrol traffic masuk dan keluar jaringan ke dan dari setiap fungsi. 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 Cloud Functions (generasi ke-1), layanan yang dibatasi adalah Cloud Functions API. Untuk Cloud Functions (generasi ke-2), itu adalah Cloud Run Admin API.

Batasan

Cloud Functions (generasi ke-1): Fungsi khusus internal yang dipicu HTTP hanya dapat dipanggil oleh permintaan HTTP yang dibuat dalam jaringan VPC, seperti permintaan dari Kubernetes Engine, Compute Engine, Lingkungan Fleksibel App Engine, atau dibuat oleh Cloud Scheduler, Cloud Tasks, Workflows, atau resource BigQuery 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.
    • Traffic ke fungsi Cloud Functions (generasi ke-2) dianggap internal jika fungsi tersebut terhubung ke jaringan VPC Bersama 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

  1. Buka halaman Ringkasan Fungsi di konsol Google Cloud:

    Buka halaman Ringkasan Cloud Functions

  2. Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.

  3. Perluas setelan lanjutan dengan mengklik Runtime, build ....

  4. 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. Memblokir traffic yang dikirim ke cloudfunctions.net atau domain kustom apa pun yang disiapkan melalui Cloud Functions. Mencegah pengguna menghindari kontrol akses apa pun (Cloud Armor, IAP) yang mereka siapkan melalui Cloud Load Balancing.
  • FLAGS... mengacu pada flag lain yang Anda teruskan ke perintah deploy.

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.

  1. 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 ke cloudfunctions.net atau domain kustom apa pun yang disiapkan melalui Cloud Functions. 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 Cloud Functions ke internet, bukan melalui jaringan VPC.

  • 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

  1. Buka halaman Ringkasan Fungsi di konsol Google Cloud:

    Buka halaman Ringkasan Cloud Functions

  2. Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.

  3. Perluas setelan lanjutan dengan mengklik Runtime, build ....

  4. Di bagian Koneksi, di bagian Setelan traffic keluar, pilih konektor Akses VPC Serverless.

  5. 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 dokumentasi gcloud untuk informasi selengkapnya.

  • EGRESS_SETTINGS adalah salah satu nilai yang didukung untuk setelan traffic keluar: lihat dokumentasi gcloud.

  • FLAGS... mengacu pada flag lain yang Anda teruskan ke perintah deploy.

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.

  1. Deploy fungsi Anda dan hanya izinkan traffic internal. Gunakan konsol Google Cloud atau Google Cloud CLI:

    Konsol

    1. Buka halaman Ringkasan Fungsi di konsol Google Cloud:

      Buka halaman Ringkasan Cloud Functions

    2. Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.

    3. Perluas setelan lanjutan dengan mengklik Runtime, build ....

    4. 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.

  1. Clone repositori cloud-run-sample dan ubah ke direktori vpc-sample:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    cd vpc-sample
    

  2. Instal dependensi Python:

    pip3 install -r requirements.txt
    

  3. Anda dapat membuka file main.py di direktori vpc-sample untuk melihat fungsi yang sedang di-deploy:

    def hello_world(request):
        return "Hello World!"

  4. Deploy fungsi tersebut:

    gcloud functions deploy restricted-function 
    --runtime=python38
    --trigger-http
    --no-allow-unauthenticated
    --ingress-settings=internal-only
    --entry-point=hello_world

  5. Siapkan konektor Akses VPC Serverless:

    gcloud compute networks vpc-access connectors create serverless-connector 
    --region=SERVICE_REGION
    --range=10.8.0.0/28

    dengan SERVICE_REGION adalah region untuk konektor Anda; region ini harus sesuai dengan region layanan serverless Anda. Jika layanan Anda berada di region us-central atau europe-west, gunakan us-central1 atau europe-west1.

  6. 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 file main.py:

    import os
    import urllib
    
    import google.auth.transport.requests
    import google.oauth2.id_token
    
    def get_hello_world(request):
        try:
            url = os.environ.get("URL")
            req = urllib.request.Request(url)
    
            auth_req = google.auth.transport.requests.Request()
            id_token = google.oauth2.id_token.fetch_id_token(auth_req, url)
            req.add_header("Authorization", f"Bearer {id_token}")
    
            response = urllib.request.urlopen(req)
            return response.read()
    
        except Exception as e:
            print(e)
            return str(e)

  7. 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 region us-central atau europe-west, gunakan us-central1 atau europe-west1.

    Layanan run-function Cloud Run kini disetel untuk mengirim permintaan GET 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 merutekan traffic keluar dari fungsi ke jaringan VPC, Anda dapat memastikan bahwa traffic keluar Cloud Functions mengikuti firewall, DNS, perutean, dan aturan lainnya dari jaringan VPC Anda, dan Anda dapat menggunakan produk seperti Cloud NAT.

  1. Siapkan jaringan VPC. Konfigurasikan jaringan VPC yang sudah ada atau buat yang baru dengan mengikuti panduan dalam Menggunakan jaringan VPC.

  2. Siapkan konektor Akses VPC Serverless. Cloud Functions memerlukan konektor Akses VPC Serverless untuk merutekan traffic ke jaringan VPC Anda. Buat konektor dan siapkan izin yang sesuai dengan mengikuti petunjuk di bagian Menghubungkan ke jaringan VPC.

  3. Deploy fungsi yang menggunakan konektor dan rutekan semua traffic keluar melalui konektor. Gunakan konsol Google Cloud atau alat command line gcloud:

    Konsol

    1. Buka halaman Ringkasan Fungsi di konsol Google Cloud:

      Buka halaman Ringkasan Cloud Functions

    2. Klik Create function. Atau, klik fungsi yang sudah ada untuk membuka halaman detailnya dan klik Edit.

    3. Perluas setelan lanjutan dengan mengklik Runtime, build ....

    4. 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.

  1. Rutekan traffic keluar fungsi Anda melalui jaringan VPC. Lihat bagian sebelumnya, Memilih rute traffic keluar fungsi melalui jaringan VPC Anda.

  2. 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.