Melakukan autentikasi konten

Cloud CDN menawarkan tiga cara untuk membantu Anda mengontrol akses ke konten yang di-cache:

  • URL yang ditandatangani memungkinkan Anda menayangkan respons dari cache Google Cloud yang didistribusikan secara global saat Anda memerlukan permintaan untuk diotorisasi. Siapa pun yang memiliki URL yang ditandatangani dapat mengakses resource tersebut untuk waktu terbatas.
  • Cookie yang ditandatangani juga memungkinkan Anda mengakses resource untuk waktu terbatas. URL ini berguna 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 berbatas waktu untuk membuat permintaan.

Kasus penggunaan

Dalam beberapa skenario, sebaiknya jangan mengharuskan pengguna memiliki Akun Google untuk dapat mengakses konten Cloud CDN. Namun, sebaiknya tetap kontrol akses menggunakan logika khusus aplikasi.

Cara umum untuk mengatasi kasus penggunaan ini adalah dengan memberikan URL yang ditandatangani kepada pengguna, sehingga pengguna tersebut dapat membaca akses ke resource tersebut selama waktu yang terbatas. Anda perlu menentukan waktu habis masa berlaku saat membuat URL yang ditandatangani. Siapa saja yang mengetahui URL ini 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 setiap file, seperti download penginstalan.

  • Untuk menayangkan pengguna dengan aplikasi klien yang tidak mendukung cookie.

Cara kerja URL bertanda tangan

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 yang sangat kuat yang Anda buat.

Jika permintaan menggunakan URL yang ditandatangani 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 akan ditolak dan tidak pernah dikirim ke backend Anda untuk ditangani.

Umumnya, URL bertanda tangan dapat digunakan oleh siapa saja yang memilikinya. Namun, URL bertanda tangan biasanya hanya dimaksudkan untuk digunakan oleh klien yang diberi URL. Untuk mengurangi risiko URL digunakan oleh klien lain, URL yang ditandatangani akan berakhir masa berlakunya pada waktu yang Anda pilih. Untuk meminimalkan risiko URL yang ditandatangani dibagikan, tetapkan agar URL tersebut berakhir sesegera mungkin.

Cara URL ditandatangani

Sebelum dapat menandatangani URL, Anda harus membuat satu atau beberapa kunci kriptografis di layanan backend, bucket backend, atau keduanya. Kemudian, Anda menandatangani dan melakukan hashing kriptografis pada URL menggunakan Google Cloud CLI atau kode Anda sendiri.

Penanganan URL yang ditandatangani

Jika penanganan URL yang ditandatangani diaktifkan di backend, Cloud CDN akan memberikan penanganan khusus untuk permintaan dengan URL yang ditandatangani. Secara khusus, permintaan dengan parameter kueri Signature dianggap ditandatangani. Saat permintaan tersebut diterima, Cloud CDN akan memverifikasi hal berikut:

  • Metode HTTP adalah GET, HEAD, OPTIONS, atau TRACE.
  • Parameter Expires disetel ke waktu mendatang.
  • Tanda tangan permintaan cocok dengan tanda tangan yang dihitung menggunakan kunci yang dinamai.

Jika salah satu pemeriksaan ini gagal, respons 403 Forbidden akan ditayangkan. Jika tidak, permintaan akan di-proxy ke backend atau ditayangkan dari cache. Permintaan OPTIONS dan TRACE selalu di-proxy ke backend secara langsung dan tidak ditayangkan dari cache. Semua permintaan yang ditandatangani dan valid untuk URL dasar tertentu (bagian sebelum parameter Expires) memiliki entri cache yang sama. Respons untuk permintaan bertanda tangan dan tidak bertanda tangan tidak berbagi entri cache. Respons 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 dengan menggunakan header Cache-Control. Agar objek tersebut kompatibel dengan Cloud CDN tanpa memerlukan perubahan backend, Cloud CDN akan mengganti header Cache-Control saat merespons permintaan yang memiliki URL yang ditandatangani dan valid. Cloud CDN memperlakukan konten sebagai konten yang dapat di-cache dan menggunakan parameter max-age yang ditetapkan dalam konfigurasi Cloud CDN Anda. Respons yang ditayangkan masih memiliki header Cache-Control yang dihasilkan backend.

URL yang ditampilkan dari gcloud CLI atau dihasilkan oleh kode kustom Anda dapat didistribusikan sesuai kebutuhan Anda. Sebaiknya hanya tanda tangani URL HTTPS karena HTTPS menyediakan transpor aman yang mencegah komponen tanda tangan URL yang ditandatangani disadap. Demikian pula, Anda harus mendistribusikan URL yang ditandatangani melalui protokol transpor aman seperti TLS/HTTPS.

Untuk petunjuk cara menggunakan URL yang ditandatangani dengan Cloud CDN, lihat Menggunakan URL yang ditandatangani.

Cookie bertanda tangan

Cookie yang ditandatangani adalah cookie yang memberikan izin dan waktu terbatas untuk membuat permintaan sekumpulan file.

Kasus penggunaan

Gunakan cookie yang ditandatangani dalam kasus berikut:

  • Untuk memberikan akses ke beberapa file yang dibatasi.

  • Untuk menghindari perubahan URL saat ini.

  • Untuk menghindari pembaruan URL setiap kali Anda memuat ulang otorisasi untuk mengakses konten.

Streaming media menggunakan HLS dan DASH

Jika Anda menayangkan konten video dan audio menggunakan protokol HTTP Live Streaming (HLS) atau Dynamic Adaptive Streaming over HTTP (DASH), Anda biasanya 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) kepada klien.

Meskipun Anda dapat menggunakan URL bertanda tangan Cloud CDN untuk menandatangani dan memberikan otorisasi akses ke setiap URL ini, membuat semua kemungkinan kombinasi secara dinamis berdasarkan pengguna akan membebani dan meningkatkan beban origin serta kompleksitas aplikasi.

Cookie yang ditandatangani dirancang untuk mengatasi masalah ini. Anda dapat memberi pengguna cookie bertanda tangan yang memberi otorisasi kepada mereka untuk mengakses konten apa pun yang cocok dengan kebijakan (awalan URL dan tanggal habis masa berlaku) tanpa harus membuat atau menandatangani manifes media secara terpisah. Anda dapat memuat ulang akses pengguna secara berkala melalui JavaScript fetch() API pada navigasi halaman atau mekanisme latar belakang lainnya di aplikasi bawaan. Kemampuan untuk memuat ulang akses pengguna juga memungkinkan Anda menggunakan waktu habis masa berlaku yang singkat, sehingga mempersulit pengguna untuk membagikan konten yang dilindungi.

Anda dapat menerbitkan cookie ini kepada pengguna dengan beberapa klien browser dan klien yang menggunakan HTTP lainnya, seperti ExoPlayer Google dan AVPlayer iOS.

Download biner (game)

Serupa dengan streaming media, jika Anda menyediakan download klien game, Anda dapat membagi patch multi-gigabyte besar atau data game menjadi bagian yang lebih kecil untuk mendukung cache, pembatalan validasi, dan konkurensi yang lebih terperinci.

Potongan ini biasanya dicantumkan dalam manifes. Cookie yang ditandatangani memungkinkan Anda memberi otorisasi akses ke download tersebut hanya kepada pengguna yang diautentikasi tanpa memerlukan modifikasi pada manifes, dan (seperti dengan URL yang ditandatangani) tanpa mengabaikan manfaat penyimpanan dalam cache Cloud CDN.

Cara kerja cookie yang ditandatangani

Mengonfigurasi dan menerbitkan cookie yang ditandatangani memerlukan tiga langkah:

  1. Buat kunci penandatanganan untuk layanan backend tertentu.
  2. Buat nilai cookie dengan awalan URL yang diizinkan, masa berlaku, nama kunci, dan tanda tangan kriptografis.
  3. Buat cookie di kode aplikasi Anda.

Cloud CDN memvalidasi cookie yang ditandatangani ini saat disertakan dengan permintaan.

Anda dapat mencegah pengguna mengakali kontrol cookie bertanda tangan saat menggunakan bucket Cloud Storage. Untuk melakukannya, batasi akses ke bucket yang mendasarinya dengan menghapus peran allUsers dan memberikan akses baca akun layanan Cloud CDN ke bucket.

Demikian pula, instance virtual machine (VM) Anda harus memvalidasi tanda tangan pada setiap permintaan yang ditandatangani yang ditayangkan.

Untuk petunjuk cara menggunakan cookie yang ditandatangani dengan Cloud CDN, lihat Menggunakan cookie yang ditandatangani.

Autentikasi asal pribadi

Autentikasi origin pribadi memberi Cloud CDN akses jangka panjang ke bucket Amazon S3 pribadi atau penyimpanan objek yang kompatibel. Cloud CDN kemudian dapat menayangkan konten dari origin ini tanpa menggunakan akses baca publik.

Autentikasi origin pribadi bersifat origin-facing, sedangkan URL yang ditandatangani dan cookie yang ditandatangani bersifat client-facing. 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 mana yang dapat mengakses Cloud CDN.

Autentikasi origin pribadi didukung untuk Cloud CDN dengan Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi klasik.

Untuk petunjuk cara menggunakan autentikasi origin pribadi dengan Cloud CDN, lihat Mengonfigurasi autentikasi origin pribadi.

Peringatan dan batasan

  • Anda bertanggung jawab penuh atas kepatuhan izin dan privasi yang diperlukan untuk cookie yang ditandatangani. Cookie yang ditandatangani diterbitkan dan dikelola oleh Anda, bukan Google.

  • Jika Anda menggunakan URL yang ditandatangani dan cookie yang ditandatangani untuk mengontrol akses ke file yang sama, dan pelihat menggunakan URL yang ditandatangani untuk meminta file, Cloud CDN akan menentukan apakah akan menampilkan file kepada pelihat 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 saat Anda tidak menginginkannya, URL Anda mungkin bukan URL yang ditandatangani yang valid, sehingga Cloud CDN akan menolaknya.

  • Browser dan klien lainnya biasanya menerapkan batas pada ukuran cookie (4 KB per cookie) dan jumlah total 50 per domain, sesuai dengan RFC 6265. Pertimbangkan total payload cookie yang dikirim dari domain mereka.

  • Batas dan batasan Cloud CDN berlaku, termasuk maksimum tiga kunci permintaan yang ditandatangani per backend.

  • Permintaan yang ditandatangani tidak dikenai biaya yang berbeda dengan permintaan Cloud CDN yang ada. Namun, permintaan yang gagal (ditolak), seperti permintaan dengan tanda tangan yang sudah tidak berlaku atau tidak valid, tetap dikenai biaya pencarian cache.

Langkah selanjutnya