Defending Edge Cache dengan Cloud Armor

1. Pengantar

Dengan Kebijakan Keamanan Google Cloud Armor Edge, Anda dapat membatasi akses ke objek yang di-cache di Google Cloud CDN dan Google Cloud Storage. Contoh alasan untuk melakukan hal ini termasuk memastikan bahwa pengguna Anda tidak mengakses objek dalam bucket penyimpanan dari wilayah geografis yang dibatasi atau memastikan bahwa distribusi media Anda memfilter wilayah geografis tempat Anda memiliki lisensi untuk melakukannya.

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

Yang akan Anda pelajari

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

Yang Anda butuhkan

  • Jaringan 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.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 GCP Console, 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 masing-masing 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".
  • Juga, untuk kepatuhan dan kompatibilitas DNS pada masa mendatang, Anda tidak boleh menggunakan garis bawah (_) maupun titik yang berdekatan titik lain atau tanda pisah. Misalnya, ".." atau "-." atau ".-" tidak valid pada nama DNS.

Klik LANJUTKAN.

Jenis lokasi: wilayah

Lokasi: pilih wilayah yang jauh dari lokasi Anda

Klik LANJUTKAN.

Class Storage Default: Standard

Klik LANJUTKAN.

Hapus centang Terapkan pencegahan akses publik di bucket ini di bagian Cegah akses publik.

Pilih Fine Grained di bagian Kontrol Akses.

Klik LANJUTKAN.

Setelah bucket berhasil dikonfigurasi, klik CREATE:

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 ini, 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 Object Anda dan klik tiga titik di sisi kanan dan edit izin akses menjadi publik.

821aad82d8633922.png

30a975d3ad22d33d.pngS

5. Membuat Load Balancer

Selanjutnya, kita akan membuat Load balancer HTTP.

Buka Jaringan >> Layanan jaringan >> Load Balancing >> Buat Load Balancer >> Load Balancer HTTP >> Internet ke VM saya >> Load Balancer HTTP(S) Klasik

Pertama, beri nama untuk load balancer yang akan dibuat.

Membuat bucket backend

Buat bucket backend baru yang merupakan bucket Anda yang baru saja Anda buat, lalu pilih CDN yang Diaktifkan dan Cache Static Content. Klik Buat.

ed392a56538d499e.png

Membuat aturan host dan jalur

Buka Aturan host dan jalur di sebelah kiri. Kita akan menggunakan aturan host/jalur sederhana dan mengirimkan permintaan apa pun ke bucket.

7c1a664e0d1f15b0.pngS

Membuat konfigurasi frontend

Pilih konfigurasi frontend. Untuk konfigurasi frontend, kami akan menggunakan HTTP (meskipun HTTPS juga dapat digunakan jika Anda memiliki sertifikat) serta alamat IP efemeral, serta memastikan bahwa Anda telah memilih jaringan tingkat premium.

2597a5e63d618622.png

Klik Buat

Mendapatkan IP Load Balancer

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

9b757362d806e835.png

Mengkueri Load Balancer

Setelah beberapa menit, coba buat kueri load balancer untuk objek yang Anda upload. Anda memerlukan alamat IP load balancer dan nama image. Perintah ini memiliki struktur seperti ini:

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

Validasi bahwa konten Anda ditayangkan dari CDN melalui CDN atau Load Balancing Monitoring. Anda harus bisa mendekati rasio hit 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 ditayangkan oleh Cloud CDN

Validasi bahwa Anda melayani traffic dari CDN dengan membuka Layanan Jaringan >> CDN

a52d0ba4c084aa05.png

6. Menghapus Objek dari GCS

Setelah cache terisi, mari kita hapus objek tersebut dari bucket, yang menegaskan bahwa kita akan menerapkan kebijakan ke cache dan bukan backend.

Buka Cloud Storage >> %nama bucket% >> objek

Pilih gambar dan hapus.

a1cc1bb9a0ff41df.png

7. Membuat Kebijakan Keamanan Edge untuk Cache CDN Anda

Buka Keamanan Jaringan >> Cloud Armor lalu klik Buat kebijakan

Pilih opsi berikut

Jenis Kebijakan: Kebijakan Keamanan Edge

Tindakan Default: Tolak

7a12374be33026fd.pngS

b7c4efc091272358.png

77ddbcddd07b65d2.pngS

Terapkan kebijakan tersebut ke bucket backend Anda.

8. Validasi Kebijakan Keamanan Edge

Sekarang setelah membuat Kebijakan Keamanan Edge di depan bucket back-end, mari kita validasi bahwa kebijakan tersebut berfungsi seperti yang diharapkan.

Memeriksa kebijakan keamanan

Setelah beberapa menit, Anda dapat memeriksa apakah Kebijakan Cloud Armor sudah berjalan atau belum. Menjalankan perintah berikut dari command line akan memberi Anda 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 Operasi >> Pembuatan Log >> Logs Explorer

Masukkan cuplikan di bawah ke dalam kueri, lalu klik run

14972af5ae6c182a.pngS

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 buat kueri objek dari cache.

Buka Keamanan Jaringan >> Cloud Armor >> % NAMA KEBIJAKAN >> target, lalu menghapus bucket target.

350655729a89eb33.pngS

Kebijakan konfirmasi dihapus

Setelah beberapa menit, kirim curl lain ke resource dalam bucket penyimpanan. Anda akan mendapatkan respons 200 kali ini.

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 tentang Kebijakan Keamanan Cloud Armor Edge.

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

9. Pembersihan Lab

Buka Keamanan Jaringan >> Cloud Armor >> %POLICY NAME% dan pilih hapus

21eefb5f375e8fee.pngS

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

ef2fa8d45c1d3452.png

Buka Jaringan >> Layanan jaringan >> Load Balancing. Pilih load balancer yang Anda buat, lalu klik hapus.

ee2e78c10f4104eb.png

10. Selamat!

Anda telah menyelesaikan codelab Defending Edge dengan Cloud Armor.

Yang telah kita bahas

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

Langkah berikutnya

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