Menandatangani Permintaan - Amazon S3 Glacier

Halaman ini hanya untuk pelanggan lama dari layanan S3 Glacier menggunakan Vaults dan asli dari 2012. REST API

Jika Anda mencari solusi penyimpanan arsip, kami sarankan untuk menggunakan kelas penyimpanan S3 Glacier di Amazon S3, Pengambilan Instan Gletser S3, Pengambilan Fleksibel Gletser S3, dan S3 Glacier Deep Archive. Untuk mempelajari lebih lanjut tentang opsi penyimpanan ini, lihat Kelas penyimpanan S3 Glacier dan Penyimpanan data jangka panjang menggunakan kelas penyimpanan S3 Glacier di Panduan Pengguna Amazon S3. Kelas penyimpanan ini menggunakan Amazon S3API, tersedia di semua wilayah, dan dapat dikelola dalam konsol Amazon S3. Mereka menawarkan fitur seperti Analisis Biaya Penyimpanan, Lensa Penyimpanan, fitur enkripsi opsional canggih, dan banyak lagi.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menandatangani Permintaan

S3 Glacier mengharuskan Anda mengautentikasi setiap permintaan yang Anda kirim dengan menandatangani permintaan. Untuk menandatangani permintaan, Anda menghitung tanda tangan digital menggunakan fungsi hash kriptografi. Hash kriptografi adalah fungsi yang mengembalikan nilai hash unik berdasarkan input. Input ke fungsi hash termasuk teks permintaan Anda dan secret access key Anda. Fungsi hash mengembalikan nilai hash yang Anda sertakan dalam permintaan sebagai tanda tangan Anda. Tanda tangan adalah bagian header Authorization dari permintaan Anda.

Setelah menerima permintaan Anda, S3 Glacier menghitung ulang tanda tangan menggunakan fungsi hash yang sama dan input yang Anda gunakan untuk menandatangani permintaan. Jika tanda tangan yang dihasilkan sesuai dengan tanda tangan dalam permintaan, S3 Glacier memproses permintaan. Jika tidak, permintaan ditolak.

S3 Glacier mendukung autentikasi menggunakan AWS Signature Versi 4. Proses untuk menghitung tanda tangan dapat dibagi menjadi tiga tugas:

  • Tugas 1: Membuat Permintaan Kanonik

    Atur ulang HTTP permintaan Anda ke dalam format kanonik. Menggunakan bentuk kanonik diperlukan karena S3 Glacier menggunakan bentuk kanonik yang sama ketika menghitung ulang tanda tangan untuk dibandingkan dengan yang Anda kirim.

  • Tugas 2: Membuat String to Sign

    Buat string yang akan Anda gunakan sebagai salah satu nilai input untuk fungsi hash kriptografi Anda. String, yang disebut string to sign, adalah rangkaian dari nama algoritme hash, tanggal permintaan, string cakupan kredensial, dan permintaan kanonikalisasi dari tugas sebelumnya. String lingkup kredensi itu sendiri adalah rangkaian tanggal, AWS Wilayah, dan informasi layanan.

  • Tugas 3: Membuat tanda tangan

    Buat tanda tangan untuk permintaan Anda menggunakan fungsi hash kriptografi yang menerima dua string input: string to sign dan kunci turunan. Kunci turunan dihitung dengan memulai dengan kunci akses rahasia Anda dan menggunakan string cakupan kredensi untuk membuat serangkaian kode otentikasi pesan berbasis hash (). HMACs Perhatikan bahwa fungsi hash yang digunakan dalam langkah penandatanganan ini bukanlah algoritma hash pohon yang digunakan di S3 Glacier yang mengunggah data. APIs

Contoh Perhitungan Tanda Tangan

Contoh berikut memandu Anda melalui detail pembuatan tanda tangan untuk Membuat Vault (PUT vault). Contoh dapat digunakan sebagai referensi untuk memeriksa metode perhitungan tanda tangan Anda. Untuk informasi selengkapnya, lihat Menandatangani AWS API permintaan di Panduan IAM Pengguna.

Contoh tersebut mengasumsikan sebagai berikut:

  • Stempel waktu permintaan adalah Fri, 25 May 2012 00:24:53 GMT.

  • Titik akhir adalah Wilayah US East (N. Virginia) us-east-1.

Sintaks permintaan umum (termasuk JSON isi) adalah:

PUT /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Fri, 25 May 2012 00:24:53 GMT Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

Bentuk kanonik permintaan yang dihitung untuk Tugas 1: Membuat Permintaan Kanonik adalah:

PUT /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-date:20120525T002453Z x-amz-glacier-version:2012-06-01 host;x-amz-date;x-amz-glacier-version e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Baris terakhir dari permintaan kanonik adalah hash dari isi permintaan. Selain itu, perhatikan baris ketiga kosong dalam permintaan kanonik. Ini karena tidak ada parameter kueri untuk iniAPI.

String to sign untuk Tugas 2: Membuat String to Sign adalah:

AWS4-HMAC-SHA256 20120525T002453Z 20120525/us-east-1/glacier/aws4_request 5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743

Baris pertama string to sign adalah algoritme, baris kedua adalah stempel waktu, baris ketiga adalah cakupan kredensial, dan baris terakhir adalah hash permintaan kanonik dari Tugas 1: Membuat Permintaan Kanonik. Nama layanan untuk digunakan dalam cakupan kredensial adalah glacier.

Untuk Tugas 3: Membuat tanda tangan, kunci turunan dapat digambarkan sebagai:

derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20120525"),"us-east-1"),"glacier"),"aws4_request")

Jika secret access key, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY , digunakan, tanda tangan yang dihitung adalah:

3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

Langkah terakhir adalah membangun header Authorization. Untuk access key demonstrasi AKIAIOSFODNN7EXAMPLE, header (dengan jeda baris yang ditambahkan untuk keterbacaan) adalah:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-date;x-amz-glacier-version, Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

Menghitung Tanda Tangan untuk Operasi Streaming

Mengunggah Arsip (POST archive) dan Mengunggah Bagian (PUT UploadID) adalah operasi streaming yang mengharuskan Anda menyertakan header tambahan x-amz-content-sha256 saat menandatangani dan mengirim permintaan Anda. Langkah-langkah penandatanganan untuk operasi streaming sama persis dengan operasi lain, dengan penambahan header streaming.

Perhitungan header streaming x-amz-content-sha256 didasarkan pada SHA256 hash dari seluruh konten (payload) yang akan diunggah. Perhatikan bahwa perhitungan ini berbeda dari hash SHA256 pohon (Checksum Komputasi). Selain kasus sepele, nilai hash SHA 256 dari data payload akan berbeda dari hash SHA256 pohon dari data payload.

Jika data payload ditentukan sebagai array byte, Anda dapat menggunakan cuplikan kode Java berikut untuk menghitung hash. SHA256

public static byte[] computePayloadSHA256Hash2(byte[] payload) throws NoSuchAlgorithmException, IOException { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(payload)); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ( (bytesRead = bis.read(buffer, 0, buffer.length)) != -1 ) { messageDigest.update(buffer, 0, bytesRead); } return messageDigest.digest(); }

Demikian pula, dalam C # Anda dapat menghitung SHA256 hash dari data payload seperti yang ditunjukkan pada cuplikan kode berikut.

public static byte[] CalculateSHA256Hash(byte[] payload) { SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(payload); return hash; }

Contoh Perhitungan Tanda Tangan untuk Streaming API

Contoh berikut memandu Anda melalui detail pembuatan tanda tangan untukMengunggah Arsip (POST archive), salah satu dari dua streaming APIs di S3 Glacier. Contoh tersebut mengasumsikan sebagai berikut:

  • Stempel waktu permintaan adalah Mon, 07 May 2012 00:00:00 GMT.

  • Titik akhir adalah Wilayah US East (N. Virginia), us-east-1.

  • Muatan konten adalah string "Selamat datang di S3 Glacier."

Sintaks permintaan umum (termasuk JSON isi) ditunjukkan pada contoh di bawah ini. Perhatikan bahwa header x-amz-content-sha256 disertakan. Dalam contoh sederhana ini, x-amz-sha256-tree-hash dan x-amz-content-sha256 adalah nilai yang sama. Namun, tidak demikian untuk unggahan arsip yang lebih besar dari 1 MB.

POST /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Mon, 07 May 2012 00:00:00 GMT x-amz-archive-description: my archive x-amz-sha256-tree-hash: SHA256 tree hash x-amz-content-sha256: SHA256 payload hash Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

Bentuk kanonik permintaan yang dihitung untuk Tugas 1: Membuat Permintaan Kanonik ditampilkan di bawah ini. Perhatikan bahwa header streaming x-amz-content-sha256 disertakan dengan nilainya. Ini berarti Anda harus membaca payload dan menghitung SHA256 hash terlebih dahulu dan kemudian menghitung tanda tangan.

POST /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-content-sha256:726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628 x-amz-date:20120507T000000Z x-amz-glacier-version:2012-06-01 host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version 726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628

Sisa perhitungan tanda tangan mengikuti langkah-langkah yang diuraikan dalam Contoh Perhitungan Tanda Tangan. Header Authorization yang menggunakan secret access key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY dan access key AKIAIOSFODNN7EXAMPLE ditunjukkan di bawah ini (dengan jeda baris yang ditambahkan untuk keterbacaan):

Authorization=AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120507/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version, Signature=b092397439375d59119072764a1e9a144677c43d9906fd98a5742c57a2855de6