Proses Penandatanganan V2

Halaman ini memberikan ringkasan URL yang ditandatangani saat menggunakan proses penandatanganan V2, yang merupakan mekanisme untuk autentikasi string kueri untuk bucket dan objek. URL yang ditandatangani menyediakan cara untuk memberikan akses baca atau tulis dalam waktu terbatas kepada siapa saja yang memiliki URL, terlepas dari apakah mereka memiliki akun pengguna atau tidak.

Komponen string yang memerlukan penandatanganan

Saat membuat URL yang ditandatangani menggunakan program, program Anda akan membuat string yang akan ditandatangani. String ini harus ditentukan dalam program Anda sebagai:

StringToSign = HTTP_Verb + "\n" +
               Content_MD5 + "\n" +
               Content_Type + "\n" +
               Expires + "\n" +
               Canonicalized_Extension_Headers +
               Canonicalized_Resource

Komponen yang membentuk struktur ini dijelaskan dalam tabel berikut:

Komponen String Contoh Deskripsi
HTTP_Verb GET Wajib diisi. Kata kerja HTTP yang akan digunakan dengan URL bertanda tangan.

Catatan: Kata kerja HTTP POST tidak didukung dalam string URL yang ditandatangani, kecuali seperti yang disebutkan di atas. Anda dapat menggunakan POST untuk menentukan dokumen kebijakan yang ditandatangani, yang menentukan karakteristik objek yang dapat diupload ke bucket. Pelajari lebih lanjut di dokumentasi POST Object.

Content_MD5 rmYdCNHKFXam78uCt7xQLw== Opsional. Nilai ringkasan MD5 dalam Base64. Jika Anda memberikannya dalam string, klien (biasanya browser) harus memberikan header HTTP ini dengan nilai yang sama dalam permintaannya.
Content_Type text/plain Sesuai kebutuhan. Jika Anda memberikan content-type, klien (browser) harus memberikan header HTTP ini yang ditetapkan ke nilai yang sama.
Expires 1388534400 Wajib diisi. Ini adalah stempel waktu (diwakili sebagai jumlah detik sejak Epoch Unix 00:00:00 UTC pada 1 Januari 1970) ketika tanda tangan berakhir. Server menolak semua permintaan yang diterima setelah stempel waktu ini, serta semua permintaan yang diterima setelah kunci yang digunakan untuk membuat URL yang ditandatangani dirotasi. Untuk keamanan dan kompatibilitas dengan proses penandatanganan V4, Anda harus menetapkan Expires agar sesuai dengan maksimum 1 minggu (604800 detik) di masa mendatang.
Canonicalized_Extension_Headers x-goog-acl:public-read\nx-goog-meta-foo:bar,baz\n Sesuai kebutuhan. Server memeriksa untuk memastikan klien memberikan nilai yang cocok dalam permintaan menggunakan URL yang ditandatangani. Untuk mengetahui informasi tentang cara membuat header kanonis untuk penandatanganan, lihat Header ekstensi kanonis.
Canonicalized_Resource /bucket/objectname Wajib diisi. Resource yang dirujuk dalam URL. Untuk mengetahui detail selengkapnya, lihat Referensi kanonis.

Menandatangani string dengan layanan App Identity App Engine

Saat membuat URL bertanda tangan menggunakan program, Anda dapat menandatangani string tersebut dari dalam program, atau dari dalam aplikasi App Engine menggunakan layanan App Engine Identity, yang menggunakan kredensial akun layanan App Engine Anda. Misalnya, menggunakan Python App Identity API, Anda dapat:

  • Menggunakan google.appengine.api.app_identity.sign_blob() untuk menandatangani byte dari string yang Anda buat, menyediakan Signature yang Anda perlukan saat menyusun URL yang ditandatangani.

  • Menggunakan google.appengine.api.app_identity.get_service_account_name() untuk mengambil nama akun layanan, yang merupakan GoogleAccessId yang Anda perlukan saat menyusun URL yang ditandatangani.

Untuk mendapatkan dukungan dalam bahasa lain, lihat Ringkasan App Identity API untuk Java, Ringkasan App Identity API untuk PHP, dan Fungsi App Identity dalam lingkungan pengembangan Go.

Layanan Identitas Aplikasi merotasi kunci pribadi saat menandatangani blob. URL yang ditandatangani yang dihasilkan dari layanan Identitas Aplikasi valid selama minimal satu jam, dan paling cocok digunakan untuk akses jangka pendek ke resource.

Header ekstensi kanonis

Saat membuat URL bertanda tangan menggunakan program, Anda harus membuat bagian Header Ekstensi Kanonis dari pesan dengan menyambungkan semua header ekstensi (kustom) yang diawali dengan x-goog-. Namun, Anda tidak dapat melakukan penggabungan sederhana. Ingatlah algoritma berikut saat Anda membuat header:

  1. Gunakan huruf kecil untuk semua nama header kustom.

  2. Mengurutkan semua header kustom berdasarkan nama header menggunakan pengurutan leksikografis menurut nilai poin kode.

  3. Jika ada, hapus header x-goog-encryption-key dan x-goog-encryption-key-sha256. Header ini berisi informasi sensitif yang tidak boleh disertakan dalam string-to-sign; tetapi header ini tetap harus digunakan dalam permintaan apa pun yang menggunakan URL bertanda tangan yang dihasilkan.

  4. Hapus nama header duplikat dengan membuat satu nama header dengan daftar nilai yang dipisahkan koma. Pastikan tidak ada spasi kosong di antara nilai-nilai tersebut, dan pastikan urutan daftar yang dipisahkan koma sesuai dengan urutan header yang muncul dalam permintaan Anda. Untuk mengetahui informasi selengkapnya, lihat RFC 7230 bagian 3.2.

  5. Ganti semua spasi kosong lipat atau baris baru (CRLF atau LF) dengan satu spasi. Untuk informasi selengkapnya tentang spasi kosong lipat, lihat RFC 7230, bagian 3.2.4..

  6. Hapus spasi kosong di sekitar titik dua yang muncul setelah nama header.

  7. Tambahkan baris baru "\n" (U+000A) ke setiap header kustom.

  8. Sambungkan semua header kustom.

Resource kanonis

Ketika membuat URL bertanda tangan menggunakan program, Anda harus membuat bagian Resource yang Dikanonikalisasi dari pesan dengan menyambungkan jalur resource (bucket dan objek serta subresource) yang menjadi target permintaan. Perhatikan hal-hal berikut saat Anda membuat resource:

  • Resource kanonis adalah segala hal setelah nama host. Misalnya, jika URL Cloud Storage adalah https://storage.googleapis.com/example-bucket/cat-pics/tabby.jpeg, resource kanonisnya adalah /example-bucket/cat-pics/tabby.jpeg.

  • Jika permintaan dicakup ke sub-resource, seperti ?cors, tambahkan sub-resource ini, termasuk tanda tanya, ke akhir string.

  • Pastikan untuk menyalin jalur permintaan HTTP secara literal: artinya, Anda harus menyertakan semua encoding URL (tanda persen) dalam string yang Anda buat. Selain itu, pastikan Anda hanya menyertakan parameter string kueri yang menunjukkan subresource (misalnya cors). Anda tidak boleh menyertakan parameter string kueri seperti ?prefix, ?max-keys, ?marker, dan ?delimiter.