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 infrastruktur lokal atau di VPC project Anda. Ada dua lapisan kontrol akses yang dapat Anda gunakan: setelan masuk dan kebijakan Identity and Access Management (IAM).

5aed47d10595c878.pngS

Setelan traffic masuk

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

Kebijakan IAM

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

Di lab ini, Anda akan mempelajari cara dan waktu untuk menggunakan setelan traffic masuk.

Host lokal terhubung melalui VPC

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

31611f6a2f12fd0c.pngS

Menyimulasikan beban kerja lokal menggunakan server jump di VPC

Di 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 Gateway Cloud VPN. Oleh karena itu, Anda dapat menggunakannya untuk menyimulasikan pengiriman permintaan dari workload 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 peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai PROJECT_ID). Jika Anda tidak menyukai ID yang dihasilkan, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan lihat 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. Untuk 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 berikutnya:
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 sampel dan buka direktorinya
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

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

Saat Anda menjalankan perintah berikut, ikuti petunjuk ini:

  • Lokasi kode sumber (...): Pastikan Anda berada di direktori layanan pendaftaran partner dan tekan enter untuk menerima nilai default
  • Nama layanan (partner-registration-service): Tekan enter untuk menyetujui nama default
  • Izinkan pemanggilan yang tidak diautentikasi ke [partner-registration-service] (y/N)? Y
gcloud run deploy 

Setelah selesai, perintah ini akan mencantumkan URL layanan Cloud Run Anda. Hasilnya akan terlihat seperti 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

Menyetel layanan agar hanya mengizinkan permintaan internal

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

Selain itu, permintaan dari produk Google Cloud lainnya dianggap internal, meskipun permintaan tersebut bukan bagian dari VPC. Produk tersebut mencakup, misalnya, Pub/Sub dan Workflows.

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

Update layanan untuk 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 isForbidden"

Karena browser Anda mengirimkan permintaan dari asal jaringan eksternal, dan bukan dari internal asal ke project Google Cloud, hal inilah yang Anda harapkan akan terjadi. 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 lompatan:

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

Output dari perintah ini akan terlihat mirip dengan 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 pada 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, yang merupakan sumber internal.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Output harus menyatakan:

Partner registration service: RUNNING

5. Bagaimana dengan kontrol akses berbasis IAM?

Lab ini menunjukkan kepada Anda cara dan waktu untuk menggunakan setelan traffic masuk. Setelan masuk adalah langkah pertama yang bagus jika Anda menghubungkan beban kerja lokal ke Cloud Run.

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

  • IAM mengharuskan Anda mengelola kredensial akun layanan yang berumur panjang 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 merupakan langkah awal yang bagus, tetapi jangan berhenti di situ saja.

6. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Langkah berikutnya:

Pelajari codelab Cymbal Eats lainnya:

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu.

Menghapus project

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

Referensi yang bermanfaat

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