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 bahwa pengguna Anda tidak mengakses objek di bucket penyimpanan dari geografi yang dibatasi atau memastikan bahwa distribusi media Anda memfilter geografi yang memiliki lisensi untuk melakukannya.

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

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

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

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

30a975d3ad22d33d.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, lalu pilih Aktifkan CDN dan Simpan Konten Statis ke dalam Cache. 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

Buat konfigurasi frontend

Pilih konfigurasi frontend. Untuk konfigurasi frontend, kita akan menggunakan HTTP (meskipun HTTPS juga akan berfungsi jika Anda memiliki sertifikat) dan alamat IP efemeral serta memastikan 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 dalam daftar load balancer untuk project Anda.

9b757362d806e835.png

Mengirim Kueri ke Load Balancer

Setelah beberapa menit, coba kueri load balancer untuk objek yang Anda upload. Anda akan memerlukan alamat IP load balancer dan nama image. 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 ditayangkan dari CDN melalui Pemantauan CDN atau Load Balancing. Anda akan dapat mencapai rasio hit hampir 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

Validasi bahwa Anda menyalurkan traffic dari CDN dengan membuka Network Services >> CDN

a52d0ba4c084aa05.png

6. Menghapus Objek dari GCS

Setelah cache diisi, mari kita hapus objek dari bucket, yang memperkuat 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

Buka Network Security >> Cloud Armor, lalu klik create policy

Pilih opsi berikut

Jenis Kebijakan: Kebijakan Keamanan Edge

Tindakan Default: Tolak

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Terapkan kebijakan ke bucket backend Anda.

8. Memvalidasi Kebijakan Keamanan Edge

Setelah membuat Kebijakan Keamanan Edge di depan bucket backend, mari kita validasi bahwa 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 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 Operations >> Logging >> Logs Explorer

Masukkan cuplikan di bawah ke dalam 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, lalu hapus bucket target.

350655729a89eb33.png

Konfirmasi kebijakan dihapus

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