Cloud CDN menawarkan tiga cara untuk membantu Anda mengontrol akses ke konten yang disimpan dalam cache:
- URL yang ditandatangani memungkinkan Anda melayani respons dari cache Google Cloud yang didistribusikan secara global saat Anda memerlukan permintaan untuk diotorisasi. Siapa pun dengan URL yang ditandatangani dapat mengakses referensi untuk waktu yang terbatas.
- Cookie yang ditandatangani juga memungkinkan Anda mengakses resource untuk waktu yang terbatas. URL ini sangat membantu saat Anda perlu menandatangani puluhan atau ratusan URL untuk setiap pengguna.
- Autentikasi origin pribadi memungkinkan Anda membatasi koneksi ke bucket Amazon Simple Storage Service (Amazon S3) atau penyimpanan objek lain yang kompatibel dan mencegah pengguna mengaksesnya secara langsung.
URL yang Ditandatangani
URL yang ditandatangani adalah URL yang memberikan izin dan waktu terbatas untuk membuat permintaan.
Kasus penggunaan
Dalam beberapa skenario, Anda mungkin tidak ingin mengharuskan pengguna memiliki Akun Google untuk mengakses konten Cloud CDN. Namun, Anda tetap ingin mengontrol akses dengan menggunakan logika khusus aplikasi.
Cara umum untuk mengatasi kasus penggunaan ini adalah dengan menyediakan URL yang ditandatangani kepada pengguna, yang memberi pengguna akses baca ke resource tersebut untuk waktu yang terbatas. Anda menentukan waktu habis masa berlaku saat membuat URL yang ditandatangani. Siapa pun yang mengetahui URL dapat mengakses resource hingga waktu habis masa berlaku untuk URL tercapai atau kunci yang digunakan untuk menandatangani URL diputar.
Gunakan URL yang ditandatangani dalam kasus berikut:
Untuk membatasi akses ke file individual, seperti download penginstalan.
Untuk melayani pengguna dengan aplikasi klien yang tidak mendukung cookie.
Cara kerja URL yang ditandatangani
URL yang ditandatangani memberi klien akses sementara ke resource pribadi tanpa memerlukan otorisasi tambahan. Untuk mencapai hal ini, elemen permintaan yang dipilih akan di-hash dan ditandatangani secara kriptografis menggunakan kunci acak kuat yang Anda buat.
Jika permintaan menggunakan URL bertanda tangan yang Anda berikan, permintaan tersebut dianggap diotorisasi untuk menerima konten yang diminta. Saat Cloud CDN menerima permintaan dengan tanda tangan yang buruk untuk layanan yang diaktifkan, permintaan tersebut akan ditolak dan tidak pernah dikirimkan ke backend Anda untuk ditangani.
Secara umum, URL bertanda tangan dapat digunakan oleh siapa saja yang memilikinya. Namun, URL yang ditandatangani biasanya hanya dimaksudkan untuk digunakan oleh klien yang akan menerima URL tersebut. Untuk mengurangi risiko penggunaan URL oleh klien yang berbeda, masa berlaku URL yang ditandatangani akan berakhir pada waktu yang Anda pilih. Untuk meminimalkan risiko dibagikannya URL yang ditandatangani, tetapkan masa berlaku URL tersebut sesegera mungkin.
Cara URL ditandatangani
Agar dapat menandatangani URL, Anda harus membuat satu atau beberapa kunci kriptografis pada layanan backend, bucket backend, atau keduanya. Anda kemudian menandatangani dan melakukan hashing secara kriptografis pada URL menggunakan Google Cloud CLI atau kode Anda sendiri.
Penanganan URL yang ditandatangani
Saat penanganan URL bertanda tangan diaktifkan di backend, Cloud CDN memberikan penanganan khusus untuk permintaan yang berisi URL bertanda tangan. Secara khusus, permintaan dengan parameter kueri Signature
dianggap bertanda tangan. Saat permintaan tersebut diterima, Cloud CDN akan memverifikasi hal-hal berikut:
- Metode HTTP adalah
GET
,HEAD
,OPTIONS
, atauTRACE
. - Parameter
Expires
disetel ke waktu mendatang. - Tanda tangan permintaan cocok dengan tanda tangan yang dihitung menggunakan kunci bernama.
Jika salah satu pemeriksaan ini gagal, respons 403 Forbidden
akan ditampilkan. Jika tidak,
permintaan akan di-proxy-kan ke backend atau disalurkan dari cache.
Permintaan OPTIONS
dan TRACE
selalu di-proxy-kan ke backend secara langsung
dan tidak disalurkan dari cache. Semua permintaan bertanda tangan yang valid untuk URL dasar tertentu (bagian sebelum parameter Expires
) memiliki entri cache yang sama. Respons terhadap permintaan yang ditandatangani dan tidak
ditandatangani tidak akan membagikan entri cache. Respons akan di-cache dan ditayangkan hingga
waktu habis masa berlaku yang Anda tetapkan.
Konten yang memerlukan permintaan bertanda tangan sering kali ditandai sebagai tidak dapat di-cache menggunakan header Cache-Control
. Agar objek tersebut kompatibel dengan Cloud CDN tanpa memerlukan perubahan backend, Cloud CDN mengganti header Cache-Control
saat merespons permintaan yang memiliki URL bertanda tangan yang valid. Cloud CDN memperlakukan konten sebagai dapat di-cache dan menggunakan parameter max-age
yang ditetapkan dalam konfigurasi Cloud CDN Anda. Respons
yang disalurkan masih memiliki header Cache-Control
yang dihasilkan backend.
URL yang ditampilkan dari gcloud CLI atau yang dihasilkan oleh kode kustom Anda dapat didistribusikan sesuai dengan kebutuhan Anda. Sebaiknya hanya tanda tangani URL HTTPS karena HTTPS menyediakan transmisi aman yang mencegah gangguan komponen tanda tangan dari URL yang ditandatangani. Demikian pula, Anda harus mendistribusikan URL yang ditandatangani melalui protokol transportasi aman seperti TLS/HTTPS.
Untuk petunjuk penggunaan URL bertanda tangan dengan Cloud CDN, lihat Menggunakan URL bertanda tangan.
Cookie bertanda tangan
Cookie yang ditandatangani adalah cookie yang memberikan izin dan waktu terbatas untuk membuat permintaan atas sekumpulan file.
Kasus penggunaan
Gunakan cookie yang ditandatangani dalam kasus berikut:
Untuk memberikan akses ke beberapa file yang dibatasi.
Untuk menghindari mengubah URL saat ini.
Untuk menghindari pembaruan URL setiap kali Anda memperbarui otorisasi untuk mengakses konten.
Streaming media dengan menggunakan HLS dan DASH
Jika menayangkan konten video dan audio menggunakan protokol HTTP Live Streaming (HLS) atau Dynamic Adaptive Streaming over HTTP (DASH), biasanya Anda akan membuat manifes yang berisi daftar URL ke segmen video dan audio. Anda mungkin memiliki beberapa instance dari setiap segmen untuk memberikan encoding yang berbeda (codec, kecepatan bit, resolusi) ke klien.
Meskipun Anda dapat menggunakan URL yang ditandatangani Cloud CDN untuk menandatangani dan mengizinkan akses ke setiap URL ini, membuat semua kemungkinan kombinasi secara dinamis per pengguna akan membebani serta meningkatkan beban origin dan kompleksitas aplikasi.
Cookie yang ditandatangani dirancang untuk mengatasi masalah ini. Anda dapat memberi pengguna
cookie bertanda tangan yang memberi mereka otorisasi untuk mengakses konten apa pun yang cocok dengan
kebijakan (awalan URL dan tanggal habis masa berlaku) tanpa harus membuat atau
menandatangani manifes media satu per satu. Anda dapat memperbarui akses pengguna secara berkala melalui
JavaScript fetch()
API pada navigasi halaman atau mekanisme latar belakang lainnya dalam
aplikasi native. Kemampuan untuk memperbarui akses pengguna juga memungkinkan Anda menggunakan waktu habis masa berlaku yang
singkat, sehingga mempersulit pengguna untuk membagikan konten yang dilindungi.
Anda dapat memberikan cookie ini kepada pengguna dengan beberapa klien browser dan klien yang menggunakan HTTP lainnya, seperti ExoPlayer Google dan AVPlayer iOS.
Download biner (game)
Mirip dengan streaming media, jika menyediakan download klien game, Anda dapat membagi patch besar multi-gigabyte atau data game menjadi potongan-potongan yang lebih kecil untuk mendukung cache yang lebih mendetail, pembatalan validasi, dan serentak.
Potongan ini biasanya tercantum dalam sebuah manifes. Cookie yang ditandatangani memungkinkan Anda mengizinkan akses ke download tersebut hanya kepada pengguna terautentikasi tanpa memerlukan modifikasi pada manifes, dan (seperti dengan URL yang ditandatangani) tanpa manfaat sebelumnya dari penyimpanan Cloud CDN.
Cara kerja cookie yang ditandatangani
Mengonfigurasi dan mengeluarkan cookie yang ditandatangani memerlukan tiga langkah:
- Membuat kunci penandatanganan untuk layanan backend yang ditentukan.
- Buat nilai cookie dengan awalan URL, masa berlaku, nama kunci, dan tanda tangan kriptografi yang diizinkan.
- Terbitkan cookie di kode aplikasi Anda.
Cloud CDN memvalidasi cookie yang ditandatangani ini saat cookie tersebut disertakan dengan permintaan.
Anda dapat mencegah pengguna agar tidak mengakali kontrol cookie yang ditandatangani saat menggunakan bucket Cloud Storage. Untuk melakukannya, batasi akses ke bucket pokok dengan menghapus peran allUsers
dan memberi akun layanan Cloud CDN akses baca ke bucket.
Demikian pula, instance mesin virtual (VM) Anda harus memvalidasi tanda tangan pada setiap permintaan bertanda tangan yang dilayaninya.
Untuk petunjuk penggunaan cookie bertanda tangan dengan Cloud CDN, lihat Menggunakan cookie bertanda tangan.
Autentikasi origin pribadi
Autentikasi asal pribadi memberi Cloud CDN akses jangka panjang ke bucket Amazon S3 pribadi atau penyimpanan objek yang kompatibel. Cloud CDN kemudian dapat menyajikan konten dari asal ini tanpa menggunakan akses baca publik.
Autentikasi origin pribadi mengarah ke origin, sedangkan URL bertanda tangan dan cookie bertanda tangan ditampilkan kepada klien. Anda dapat mengaktifkan keduanya untuk konten yang sama. Autentikasi origin pribadi membatasi akses non-CDN ke origin dan konten Anda. URL dan cookie yang ditandatangani mengontrol pengguna yang dapat mengakses Cloud CDN.
Autentikasi asal pribadi didukung untuk Cloud CDN dengan Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi klasik.
Untuk mengetahui petunjuk cara menggunakan autentikasi asal pribadi dengan Cloud CDN, lihat Mengonfigurasi autentikasi asal pribadi.
Peringatan dan batasan
Anda bertanggung jawab sepenuhnya atas setiap izin dan kepatuhan privasi yang diperlukan untuk cookie yang ditandatangani. Cookie yang ditandatangani dikeluarkan dan dikelola oleh Anda, bukan Google.
Jika Anda menggunakan URL bertanda tangan dan cookie yang ditandatangani untuk mengontrol akses ke file yang sama, dan pelihat menggunakan URL bertanda tangan untuk meminta file, Cloud CDN akan menentukan apakah akan menampilkan file kepada penampil hanya berdasarkan URL yang ditandatangani. Cloud CDN hanya mempertimbangkan cookie yang ditandatangani jika URL tidak ditandatangani.
Jika Anda telah mengonfigurasi layanan untuk permintaan yang ditandatangani, dan URL Anda menyertakan
Signature
sebagai parameter kueri, Cloud CDN akan mencoba menafsirkan URL Anda sebagai URL yang ditandatangani. Jika Cloud CDN mencoba memperlakukan URL Anda sebagai URL yang ditandatangani pada saat Anda tidak memintanya, URL tersebut mungkin bukan URL bertanda tangan yang valid, sehingga Cloud CDN akan menolaknya.Browser dan klien lainnya biasanya menerapkan batas ukuran cookie (4 KB per cookie) dan jumlah total 50 per domain, sesuai RFC 6265. Pertimbangkan total payload cookie yang dikirim dari domain mereka.
Batas dan pembatasan Cloud CDN berlaku, termasuk maksimum tiga kunci permintaan yang ditandatangani per backend.
Permintaan yang ditandatangani tidak dikenai biaya secara berbeda dari permintaan Cloud CDN yang ada. Namun, permintaan yang gagal (ditolak), seperti permintaan dengan tanda tangan yang sudah tidak berlaku atau tidak valid, masih akan dikenai biaya pencarian cache.
Langkah selanjutnya
- Untuk mempelajari praktik terbaik lainnya, lihat Praktik terbaik keamanan web.