Mengautentikasi konten

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

  • Dengan URL bertanda tangan, Anda dapat menyajikan respons dari cache Google Cloudyang terdistribusi secara global saat Anda memerlukan otorisasi permintaan. Siapa pun yang memiliki URL bertanda tangan dapat mengakses resource untuk waktu terbatas.
  • Cookie bertanda tangan juga dapat Anda gunakan untuk mengakses resource untuk waktu terbatas. Metode ini berguna saat Anda perlu menandatangani puluhan atau ratusan URL untuk tiap pengguna.
  • Autentikasi server asal pribadi dapat Anda gunakan untuk membatasi koneksi ke bucket Amazon Simple Storage Service (Amazon S3) atau penyimpanan objek kompatibel lainnya dan mencegah pengguna mengaksesnya secara langsung.

URL bertanda tangan

URL bertanda tangan adalah URL yang memberikan izin berbatas waktu untuk membuat permintaan.

Kasus penggunaan

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

Cara umum untuk mengatasi kasus penggunaan ini adalah dengan memberikan URL bertanda tangan kepada pengguna, sehingga pengguna tersebut dapat membaca, menulis, atau menghapus akses ke resource tersebut selama waktu terbatas. Anda perlu menentukan waktu habis masa berlaku saat membuat URL bertanda tangan. Siapa saja yang memiliki URL ini dapat mengakses resource hingga waktu habis masa berlaku untuk URL tercapai atau kunci yang digunakan untuk menandatangani URL dirotasikan.

Gunakan URL bertanda tangan 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 bertanda tangan

URL bertanda tangan memberikan akses sementara kepada klien ke resource pribadi tanpa memerlukan otorisasi tambahan. Untuk melakukannya, elemen permintaan yang dipilih akan di-hash dan ditandatangani secara kriptografis menggunakan kunci acak kuat yang Anda buat.

Saat suatu permintaan menggunakan URL bertanda tangan yang Anda berikan, permintaan tersebut dianggap diizinkan untuk menerima konten yang diminta. Jika Cloud CDN menerima permintaan dengan tanda tangan yang tidak valid untuk layanan diaktifkan, permintaan tersebut akan ditolak dan tidak akan pernah masuk ke backend Anda untuk ditangani.

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

Cara URL ditandatangani

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

Penanganan URL bertanda tangan

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

  • Metode HTTP-nya adalah GET, HEAD, OPTIONS, atau TRACE.
  • 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 ke backend atau disajikan dari cache. Permintaan OPTIONS dan TRACE akan selalu di-proxy ke backend secara langsung dan tidak akan disajikan dari cache. Semua permintaan bertanda tangan yang valid untuk URL dasar tertentu (bagian sebelum parameter Expires) akan menggunakan entri cache yang sama. Respons terhadap permintaan bertanda tangan dan tidak bertanda tangan tidak akan menggunakan entri cache yang sama. Respons akan di-cache dan disajikan hingga waktu akhir masa berlaku yang Anda tetapkan.

Konten yang memerlukan permintaan bertanda tangan sering ditandai sebagai tidak dapat di-cache 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 bertanda tangan yang valid. Cloud CDN akan memperlakukan konten sebagai dapat di-cache dan menggunakan parameter max-age yang ditetapkan dalam konfigurasi Cloud CDN Anda. Respons yang disajikan 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 tandatangani hanya URL HTTPS karena HTTPS akan menyediakan transportasi aman yang mencegah penyadapan komponen tanda tangan dari URL bertanda tangan. Demikian pula, Anda harus mendistribusikan URL bertanda tangan melalui protokol transportasi yang aman seperti TLS/HTTPS.

Untuk mengetahui petunjuk penggunaan URL bertanda tangan dengan Cloud CDN, baca bagian Menggunakan URL bertanda tangan.

Cookie bertanda tangan

Cookie bertanda tangan adalah cookie yang memberikan izin dan waktu terbatas guna membuat permintaan untuk sekumpulan file.

Kasus penggunaan

Gunakan cookie bertanda tangan dalam kasus berikut:

  • Untuk memberikan akses ke beberapa file yang dibatasi.

  • Untuk menghindari perubahan URL saat ini.

  • Untuk menghindari pembaruan URL tiap kali Anda memperbarui otorisasi untuk mengakses konten.

Streaming media menggunakan HLS dan DASH

Jika Anda menyajikan konten video dan audio menggunakan protokol HTTP Live Streaming (HLS) atau Dynamic Adaptive Streaming over HTTP (DASH), biasanya Anda membuat manifes yang berisi daftar URL ke segmen video dan audio. Anda mungkin memiliki beberapa instance dari tiap segmen untuk memberikan encoding yang berbeda (codec, bitrate, resolusi) kepada klien.

Meskipun Anda dapat menggunakan URL bertanda tangan Cloud CDN untuk menandatangani dan mengizinkan akses ke tiap URL ini, pembuatan semua kemungkinan kombinasi secara dinamis berdasarkan pengguna akan merepotkan dan meningkatkan beban server asal serta kompleksitas aplikasi.

Cookie bertanda tangan dirancang untuk mengatasi masalah ini. Anda dapat memberi cookie bertanda tangan kepada pengguna, dan cookie ini akan mengizinkan pengguna mengakses konten apa pun yang cocok dengan kebijakan (awalan URL dan tanggal habis masa berlaku) tanpa harus membuat atau menandatangani manifes media Anda satu per satu. Anda dapat memperbarui akses pengguna secara berkala melalui JavaScript fetch() API pada navigasi halaman atau mekanisme latar belakang lainnya di aplikasi bawaan. Dengan kemampuan memperbarui akses ini, Anda juga dapat menggunakan waktu habis masa berlaku yang singkat, sehingga akan menyulitkan pengguna untuk membagikan konten yang dilindungi.

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

Download program biner (gaming)

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

Bagian-bagian kecil ini biasanya dicantumkan dalam manifes. Dengan cookie bertanda tangan, Anda dapat mengizinkan akses ke download tersebut hanya untuk pengguna yang diautentikasi tanpa memerlukan modifikasi pada manifes, dan (seperti URL bertanda tangan) tanpa mengorbankan manfaat caching Cloud CDN.

Cara kerja cookie bertanda tangan

Konfigurasi dan pemberian cookie bertanda tangan memerlukan tiga langkah:

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

Cloud CDN memvalidasi cookie bertanda tangan 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 tiap permintaan bertanda tangan yang mereka layani.

Untuk mengetahui petunjuk penggunaan cookie bertanda tangan dengan Cloud CDN, baca bagian Menggunakan cookie bertanda tangan.

Autentikasi server asal pribadi

Autentikasi server asal pribadi memberi Cloud CDN akses jangka panjang ke bucket Amazon S3 pribadi atau penyimpanan objek yang kompatibel. Kemudian, Cloud CDN dapat menyajikan konten dari server asal ini tanpa menggunakan akses baca publik.

Autentikasi server asal pribadi berorientasi ke server asal, sedangkan URL bertanda tangan dan cookie bertanda tangan berorientasi ke klien. Anda dapat mengaktifkan keduanya untuk konten yang sama. Autentikasi origin pribadi membatasi akses non-CDN ke origin dan konten Anda. URL dan cookie bertanda tangan mengontrol pengguna yang dapat mengakses Cloud CDN.

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

Untuk mengetahui petunjuk penggunaan autentikasi server asal pribadi dengan Cloud CDN, baca bagian Mengonfigurasi autentikasi server asal pribadi.

Peringatan dan batasan

  • Anda bertanggung jawab sepenuhnya atas izin dan kepatuhan privasi yang diperlukan untuk cookie bertanda tangan Anda. Cookie bertanda tangan diberikan dan dikelola oleh Anda, bukan Google.

  • Jika Anda menggunakan URL bertanda tangan dan cookie bertanda tangan untuk mengontrol akses ke file yang sama, dan pengguna menggunakan URL bertanda tangan untuk meminta file, Cloud CDN akan menentukan apakah akan menampilkan file kepada pengguna atau tidak hanya berdasarkan URL bertanda tangan. Cloud CDN hanya akan mempertimbangkan cookie bertanda tangan jika URL tidak bertanda tangan.

  • Jika Anda telah mengonfigurasi layanan untuk permintaan bertanda tangan, dan URL Anda menyertakan Signature sebagai parameter kueri, Cloud CDN akan mencoba menafsirkan URL Anda sebagai URL bertanda tangan. Jika Cloud CDN mencoba memperlakukan URL Anda sebagai URL bertanda tangan padahal Anda tidak menginginkannya, kemungkinan URL Anda bukan URL bertanda tangan yang valid, sehingga Cloud CDN akan menolaknya.

  • Browser dan klien lain 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.

  • Berlaku batasan dan pembatasan Cloud CDN, termasuk maksimum tiga kunci permintaan bertanda tangan per backend.

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

Langkah berikutnya