Defending Edge Cache dengan Cloud Armor

1. Pengantar

Kebijakan Keamanan Edge Google Cloud Armor memungkinkan Anda membatasi akses ke objek yang di-cache di Google Cloud CDN dan Google Cloud Storage. Contoh alasan untuk melakukannya mencakup memastikan pengguna Anda tidak mengakses objek di bucket penyimpanan dari wilayah geografis yang dibatasi atau memastikan distribusi media Anda memfilter wilayah geografis sesuai dengan lisensi yang Anda miliki.

Di lab ini, kita akan membuat bucket GCS, mengupload gambar ke bucket tersebut, mengikatnya ke load balancer, lalu mengaktifkan kebijakan Cloud CDN dan Keamanan Edge di bucket tersebut.

Yang akan Anda pelajari

  • Cara menyiapkan bucket Cloud Storage dengan konten yang bisa di-cache
  • Cara membuat Kebijakan Keamanan Edge untuk melindungi konten
  • Cara memvalidasi bahwa Kebijakan Keamanan Edge berfungsi seperti yang diharapkan

Yang Anda butuhkan

  • Networking Dasar dan pengetahuan tentang HTTP
  • Pengetahuan dasar mengenai command line Unix/Linux

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.

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
  • Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat.
  • Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Konsol GCP, klik ikon Cloud Shell di toolbar kanan atas:

bce75f34b2c53987.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

f6ef2b5f13479f3a.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.

Sebelum memulai

Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Aktifkan API

Aktifkan semua layanan yang diperlukan

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Membuat Bucket Cloud Storage

Di Cloud Console, buka Menu navigasi > Cloud Storage > Browser. Klik CREATE BUCKET:

baf3d3c74282ecba.png

Aturan penamaan bucket:

  • Jangan sertakan informasi sensitif pada nama bucket, karena namespace bucket bersifat global dan dapat dilihat publik.
  • Nama bucket hanya boleh berisi huruf kecil, angka, tanda pisah (-), garis bawah (_), dan titik (.). Nama yang berisi titik membutuhkan verifikasi.
  • Nama bucket harus diawali dan diakhiri dengan angka atau huruf.
  • Nama bucket harus berisi 3 hingga 63 karakter. Nama yang mengandung titik dapat berisi hingga 222 karakter, tetapi setiap komponen yang dipisahkan titik dapat berisi tidak lebih dari 63 karakter.
  • Nama bucket tidak dapat direpresentasikan sebagai alamat IP dalam notasi desimal bertitik (misalnya 192.168.5.4).
  • Nama bucket tidak boleh dimulai dengan awalan "goog".
  • Nama bucket tidak boleh mengandung kata "google" atau salah eja yang mendekati "google".
  • Selain itu, untuk kepatuhan dan kompatibilitas DNS pada masa mendatang, Anda tidak boleh menggunakan garis bawah (_) maupun titik yang berdekatan dengan titik lain atau tanda hubung. Misalnya, ".." atau "-." atau ".-" tidak valid pada nama DNS.

Klik LANJUTKAN.

Location type: region

Lokasi: pilih wilayah yang jauh dari Anda

Klik LANJUTKAN.

Kelas Penyimpanan default: Standard

Klik LANJUTKAN.

Hapus centang pada kotak Enforce public access prevention on this bucket di bagian Prevent public access.

Pilih Fine Grained di bagian Access Control.

Klik LANJUTKAN.

Setelah bucket berhasil dikonfigurasi, klik BUAT:

Selesai — Anda baru saja berhasil membuat bucket Cloud Storage!

4. Mengupload Objek ke bucket Anda

Sekarang upload objek ke dalam bucket.

Pertama, download gambar ini ke instance sementara di Cloud Shell. Dalam contoh di bawah, gambar Google dari halaman beranda Google digunakan.

Dari Cloud Shell

wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

Gunakan perintah gsutil cp untuk mengupload gambar dari lokasi tempat Anda menyimpannya ke bucket yang Anda buat:

Dari Cloud Shell

gsutil cp google.png gs://YOUR-BUCKET-NAME

Sekarang hapus gambar yang didownload:

Dari Cloud Shell

rm google.png

Temukan Objek Anda, klik tiga titik di sisi kanan, lalu edit izin agar menjadi publik.

821aad82d8633922.png30a975d3ad22d33d.png

5. Membuat Load Balancer

Selanjutnya, kita akan membuat Load balancer HTTP.

Buka Networking >> Network services >> Load Balancing >> Create Load Balancer >> HTTP Load Balancer >> Internet to my VMs >> Classic HTTP(S) Load Balancer

Pertama, buat nama untuk load balancer yang akan Anda buat.

Membuat bucket backend

Buat bucket backend baru yang merupakan bucket yang baru saja Anda buat dan pilih Aktifkan CDN dan Cache Konten Statis. Klik Buat.

ed392a56538d499e.png

Membuat aturan host dan jalur

Buka Host and path rules di sisi kiri. Kita akan menggunakan aturan host/jalur sederhana dan mengirim permintaan apa pun ke bucket.

7c1a664e0d1f15b0.png

Membuat konfigurasi frontend

Pilih konfigurasi frontend. Untuk konfigurasi frontend, kita akan menggunakan HTTP (meskipun HTTPS juga akan berfungsi jika Anda memiliki sertifikat) dan alamat IP sementara, serta memastikan Anda telah memilih jaringan paket premium.

2597a5e63d618622.png

Klik Buat

Mendapatkan IP Load Balancer

Dapatkan IP Load Balancer dari konsol dengan mengklik nama load balancer dalam daftar load balancer untuk project Anda.

9b757362d806e835.png

Mengirim kueri ke Load Balancer

Setelah beberapa menit, coba kirim kueri ke load balancer untuk objek yang Anda upload. Anda akan memerlukan alamat IP load balancer dan nama gambar. Perintahnya disusun sebagai berikut:

Dari Terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Output

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng
< Expires: Mon, 13 Dec 2021 22:58:26 GMT
< Date: Mon, 13 Dec 2021 21:58:26 GMT
< Cache-Control: public, max-age=3600
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer

Pastikan konten Anda disajikan dari CDN melalui Pemantauan CDN atau Load Balancing. Anda akan dapat mencapai rasio hit mendekati 100%. Jika Anda perlu menjalankan beberapa kueri, Anda dapat melakukan hal berikut

Dari Terminal

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

Mengonfirmasi konten yang disajikan oleh Cloud CDN

Pastikan Anda menyajikan traffic dari CDN dengan membuka Network Services >> CDN

a52d0ba4c084aa05.png

6. Menghapus Objek dari GCS

Setelah cache terisi, hapus objek dari bucket, yang mempertegas bahwa kita menerapkan kebijakan ke cache, bukan ke backend.

Buka Cloud Storage >> %bucket name% >> objects

Pilih gambar, lalu hapus.

a1cc1bb9a0ff41df.png

7. Membuat Kebijakan Keamanan Edge untuk Cache CDN Anda

Buka Network Security >> Cloud Armor, lalu klik Create Policy

Pilih opsi berikut

Jenis Kebijakan: Kebijakan Keamanan Edge

Tindakan Default: Tolak

7a12374be33026fd.pngb7c4efc091272358.png77ddbcddd07b65d2.png

Terapkan kebijakan ke bucket backend Anda.

8. Memvalidasi Kebijakan Keamanan Edge

Setelah membuat Kebijakan Keamanan Edge di depan bucket backend, mari kita pastikan kebijakan tersebut berfungsi seperti yang diharapkan.

Periksa kebijakan keamanan

Setelah beberapa menit berlalu, Anda akan dapat memeriksa bahwa Kebijakan Cloud Armor sedang berjalan. Dari command line, menjalankan perintah berikut akan memberikan respons 403

Dari Terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Output

curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw
< Content-Type: application/xml; charset=UTF-8
< Content-Length: 111
< Date: Mon, 13 Dec 2021 23:09:35 GMT
< Expires: Mon, 13 Dec 2021 23:09:35 GMT
< Cache-Control: private, max-age=0
< Server: UploadServer
<

Menyelidiki log

Selanjutnya, Anda dapat memeriksa log untuk melihat kebijakan keamanan edge yang diterapkan. Buka Operations >> Logging >> Logs Explorer

Masukkan cuplikan di bawah ke kueri, lalu klik jalankan

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Perhatikan respons 403 dan kebijakan keamanan yang diterapkan

cddc48ca93ad79ca.png

Menghapus kebijakan keamanan

Hapus kebijakan keamanan dan kueri objek dari cache.

Buka Network Security >> Cloud Armor >> %POLICY NAME% >> targets dan hapus bucket target.

350655729a89eb33.png

Konfirmasi penghapusan kebijakan

Setelah beberapa menit berlalu, kirim curl lain ke resource di bucket penyimpanan. Kali ini Anda akan mendapatkan respons 200.

Dari Terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Output

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png

*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0

Selamat! Anda telah menyelesaikan lab ini di Kebijakan Keamanan Edge Cloud Armor.

©2020 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lainnya mungkin merupakan merek dagang dari tiap-tiap perusahaan yang bersangkutan.

9. Pembersihan Lab

Buka Network Security >> Cloud Armor >> %POLICY NAME%, lalu pilih hapus

21eefb5f375e8fee.png

Buka Cloud Storage, pilih bucket yang Anda buat, lalu klik hapus

ef2fa8d45c1d3452.png

Buka Networking >> Network services >> Load Balancing. Pilih load balancer yang Anda buat, lalu klik hapus.

ee2e78c10f4104eb.png

10. Selamat!

Anda telah menyelesaikan codelab Defending Edge Cache with Cloud Armor.

Yang telah kita bahas

  • Cara menyiapkan bucket Cloud Storage dan load balancer cloud terkait
  • Cara membuat Kebijakan Keamanan Edge Cloud Armor
  • Cara memvalidasi bahwa Kebijakan Keamanan Edge berfungsi sebagaimana mestinya.

Langkah berikutnya

  • Coba siapkan Kebijakan Keamanan Edge dengan cache hit dari resource Compute Engine.