Mengamankan Traffic Masuk Cloud Run

1. Ringkasan

Lab ini menunjukkan cara membatasi akses ke layanan Cloud Run dan hanya mengizinkan permintaan dari beban kerja yang berjalan di lokasi atau di VPC project Anda. Ada dua lapisan kontrol akses yang dapat Anda gunakan: setelan ingress dan kebijakan Identity and Access Management (IAM).

5aed47d10595c878.png

Setelan traffic masuk

Setelan ingress memungkinkan Anda memfilter permintaan berdasarkan asal jaringannya (internal atau eksternal). Secara default, semua permintaan diizinkan untuk diteruskan, termasuk permintaan dari internet publik.

Kebijakan IAM

Kebijakan IAM memungkinkan Anda memfilter permintaan berdasarkan identitas pengirim, dan biasanya digunakan untuk mengautentikasi permintaan antar layanan.

Dalam lab ini, Anda akan mempelajari cara dan waktu menggunakan setelan ingress.

Host lokal terhubung melalui VPC

Dalam lab ini, kita akan menyimulasikan beban kerja di lokal. Untuk menghubungkan host lokal ke Cloud Run, Anda harus mengonfigurasi Akses Google Pribadi untuk host lokal. Hal ini mencakup penyiapan gateway Cloud VPN di jaringan VPC, seperti yang ditunjukkan di bawah.

31611f6a2f12fd0c.png

Mensimulasikan beban kerja lokal menggunakan server jump di VPC

Dalam lab ini, Anda akan menyimulasikan pengiriman permintaan dari host lokal dengan mengirim permintaan dari virtual machine Compute Engine di VPC, seperti yang ditunjukkan di sini.

aebf22740c7a84f0.png

Virtual machine Compute Engine yang akan Anda gunakan sebagai server jump memiliki asal jaringan yang sama dengan Cloud VPN Gateway, itulah sebabnya Anda dapat menggunakannya untuk menyimulasikan pengiriman permintaan dari beban kerja lokal.

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Penyiapan Lingkungan

  1. Tetapkan variabel lingkungan ke Project ID untuk digunakan dalam perintah selanjutnya:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Aktifkan API yang diperlukan untuk menjalankan lab ini.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Clone repositori aplikasi contoh dan buka direktori
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Menetapkan region dan zona default untuk Compute Engine dan Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Men-deploy layanan

Pertama-tama, Anda akan men-deploy layanan dan membiarkannya dapat diakses secara publik. Setelah Anda memverifikasi bahwa Anda dapat mengirim permintaan dari browser, kami akan mengunci layanan dan hanya mengizinkan permintaan dari sumber jaringan internal.

Saat menjalankan perintah berikut, ikuti petunjuk ini:

  • Lokasi kode sumber (...): Pastikan Anda berada di direktori partner-registration-service, lalu tekan enter untuk menyetujui default
  • Nama layanan (partner-registration-service): Tekan enter untuk menerima default
  • Allow unauthenticated invocations to [partner-registration-service] (y/N)? Y
gcloud run deploy 

Setelah selesai, perintah ini akan mencantumkan URL layanan Cloud Run Anda. Output-nya akan terlihat mirip dengan listingan ini:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Buka URL layanan di browser Anda. Anda akan melihat output ini:

Partner registration service: RUNNING

Menetapkan layanan agar hanya mengizinkan permintaan internal

Sekarang, Anda akan menggunakan setelan ingress layanan Cloud Run untuk hanya mengizinkan permintaan dari sumber internal. Sumber internal mencakup resource di jaringan VPC yang berada dalam project yang sama (atau perimeter Kontrol Layanan VPC) dengan layanan Cloud Run, sehingga sangat cocok untuk kasus penggunaan kita.

Selain itu, permintaan dari produk Google Cloud lainnya dianggap internal, meskipun tidak termasuk dalam VPC. Produk tersebut mencakup, misalnya, Pub/Sub dan Alur Kerja.

Permintaan dari sumber ini tetap berada dalam jaringan Google, meskipun permintaan tersebut mengakses layanan Anda di URL run.app, dan akses publik dilarang.

Perbarui layanan agar hanya mengizinkan permintaan internal:

gcloud run services update partner-registration-service --ingress=internal

Jika Anda membuka URL layanan lagi, akan muncul pesan "Error: Forbidden - Access is forbidden"

Karena browser Anda mengirim permintaan dari origin jaringan eksternal, dan bukan dari origin internal ke project Google Cloud, hal ini persis seperti yang Anda harapkan. Layanan Anda kini lebih aman.

4. Membuat virtual machine Compute Engine sebagai server jump

Langkah berikutnya adalah menyimulasikan permintaan dari server lokal melalui gateway Cloud VPN, dengan membuat instance Compute Engine di VPC untuk digunakan sebagai server jump:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

Output perintah ini akan terlihat seperti ini:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Mengirim permintaan dari instance Compute Engine ke layanan

Sekarang Anda akan membuka terminal di virtual machine dan mengirim permintaan langsung dari mesin di jaringan VPC.

Jika perintah berikut meminta Anda untuk menyiapkan SSH di Cloud Shell, ikuti petunjuknya:

gcloud compute ssh jump-server

Dapatkan URL layanan Cloud Run dengan perintah ini:

gcloud run services describe partner-registration-service --region us-central1

Beberapa baris pertama output akan terlihat seperti ini:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Sekarang salin URL dan kirim permintaan dari instance Compute Engine menggunakan curl. Permintaan ini akan berhasil, karena instance VM berjalan di jaringan VPC project Anda - ini adalah sumber internal.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Output akan menampilkan:

Partner registration service: RUNNING

5. Bagaimana dengan kontrol akses berbasis IAM?

Lab ini menunjukkan cara dan waktu menggunakan setelan ingress. Setelan ingress adalah langkah pertama yang bagus jika Anda menghubungkan workload on-premise ke Cloud Run.

Kontrol akses berbasis IAM memerlukan lebih banyak upaya untuk diterapkan, terutama jika Anda melakukan panggilan dari host lokal:

  • IAM mengharuskan Anda mengelola kredensial akun layanan yang aktif dalam waktu lama di host
  • IAM memerlukan perubahan kode untuk menandatangani permintaan menggunakan kredensial akun layanan.

Google merekomendasikan pendekatan berlapis untuk kontrol akses. Menggunakan setelan traffic masuk untuk membatasi akses hanya ke host internal adalah langkah awal yang bagus, tetapi jangan berhenti di situ.

6. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Langkah berikutnya:

Jelajahi codelab Cymbal Eats lainnya:

Pembersihan

Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Referensi yang berguna

Berikut adalah referensi tambahan yang membantu Anda mempelajari lebih lanjut dua lapisan kontrol akses di Cloud Run.