View a markdown version of this page

Perhitungan Tanda Tangan untuk Header Otorisasi: Mentransfer Payload dalam Satu Potongan (AWS Versi Tanda Tangan 4) - Amazon Simple Storage Service

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

Perhitungan Tanda Tangan untuk Header Otorisasi: Mentransfer Payload dalam Satu Potongan (AWS Versi Tanda Tangan 4)

Saat menggunakan Authorization header untuk mengotentikasi permintaan, nilai header termasuk, antara lain, tanda tangan. Perhitungan tanda tangan bervariasi tergantung pada pilihan yang Anda buat untuk mentransfer payload (Gambaran umum). Bagian ini menjelaskan perhitungan tanda tangan saat Anda memilih untuk mentransfer payload dalam satu potongan. Bagian contoh (lihatContoh: Perhitungan Tanda Tangan) menunjukkan perhitungan tanda tangan dan Authorization header hasil yang dapat Anda gunakan sebagai rangkaian pengujian untuk memverifikasi kode Anda.

penting

Saat mentransfer payload dalam satu potongan, Anda dapat secara opsional memilih untuk menyertakan hash payload dalam perhitungan tanda tangan, disebut sebagai payload yang ditandatangani (jika Anda tidak memasukkannya, payload dianggap tidak ditandatangani). Prosedur penandatanganan yang dibahas di bagian berikut berlaku untuk keduanya, tetapi perhatikan perbedaan berikut:

  • Opsi payload yang ditandatangani — Anda menyertakan hash payload saat membangun permintaan kanonik (yang kemudian menjadi bagian dari StringToSign, seperti yang dijelaskan di bagian perhitungan tanda tangan). Anda juga menentukan nilai yang sama dengan nilai x-amz-content-sha256 header saat mengirim permintaan ke S3.

  • Opsi payload yang tidak ditandatangani — Anda menyertakan string literal UNSIGNED-PAYLOAD saat membuat permintaan kanonik, dan menetapkan nilai yang sama dengan nilai x-amz-content-sha256 header saat mengirim permintaan ke Amazon S3.

Saat Anda mengirim permintaan ke Amazon S3, nilai x-amz-content-sha256 header memberi tahu Amazon S3 apakah payload ditandatangani atau tidak. Amazon S3 kemudian dapat membuat tanda tangan yang sesuai untuk verifikasi.

Dalam kedua kasus, karena nilai x-amz-content-sha256 header sudah menjadi bagian dari AndaHashedPayload, Anda tidak diharuskan untuk menyertakan x-amz-content-sha256 header sebagai header kanonik.

Menghitung Tanda Tangan

Untuk menghitung tanda tangan, pertama-tama Anda memerlukan string untuk ditandatangani. Anda kemudian menghitung HMAC-SHA256 hash string untuk ditandatangani dengan menggunakan kunci penandatanganan. Diagram berikut menggambarkan proses, termasuk berbagai komponen string yang Anda buat untuk penandatanganan

Ketika Amazon S3 menerima permintaan yang diautentikasi, ia menghitung tanda tangan dan kemudian membandingkannya dengan tanda tangan yang Anda berikan dalam permintaan. Untuk alasan itu, Anda harus menghitung tanda tangan dengan menggunakan metode yang sama yang digunakan oleh Amazon S3. Proses menempatkan permintaan dalam bentuk yang disepakati untuk penandatanganan disebut kanonikalisasi.

AWS4-HMAC-SHA256 diagram proses tanda tangan yang menunjukkan permintaan kanonik, StringToSign, dan langkah-langkah tanda tangan.

Tabel berikut menjelaskan fungsi yang ditunjukkan dalam diagram. Anda perlu menerapkan kode untuk fungsi-fungsi ini.

Fungsi Deskripsi
Lowercase() Ubah string menjadi huruf kecil.
Hex() Pengkodean huruf kecil 16.
SHA256Hash() Fungsi hash kriptografi Secure Hash Algorithm (SHA).
HMAC-SHA256() Menghitung HMAC dengan menggunakan algoritma SHA256 dengan kunci penandatanganan yang disediakan. Ini adalah tanda tangan terakhir.
Trim() Hapus spasi kosong di depan atau di belakang.
UriEncode()

URI mengkodekan setiap byte. UriEncode() harus menegakkan aturan berikut:

  • URI mengkodekan setiap byte kecuali karakter tanpa syarat: 'A'-'Z', 'a'-'z', '0'-'9', '-', ' . ',' _ ', dan '~'.

  • Karakter spasi adalah karakter yang dicadangkan dan harus dikodekan sebagai “%20" (dan bukan sebagai “+”).

  • Setiap byte yang dikodekan URI dibentuk oleh '%' dan nilai heksadesimal dua digit byte.

  • Huruf dalam nilai heksadesimal harus huruf besar, misalnya “%1A”.

  • Enkode karakter garis miring ke depan, '/', di mana-mana kecuali dalam nama kunci objek. Misalnya, jika nama kunci objek adalahphotos/Jan/sample.jpg, garis miring ke depan dalam nama kunci tidak dikodekan.

penting

UriEncode Fungsi standar yang disediakan oleh platform pengembangan Anda mungkin tidak berfungsi karena perbedaan dalam implementasi dan ambiguitas terkait dalam RFC yang mendasarinya. Kami menyarankan Anda menulis UriEncode fungsi kustom Anda sendiri untuk memastikan bahwa pengkodean Anda akan berfungsi.

Berikut ini adalah contoh fungsi UriEncode () di Java.

public static String UriEncode(CharSequence input, boolean encodeSlash) { StringBuilder result = new StringBuilder(); for (int i = 0; i < input.length(); i++) { char ch = input.charAt(i); if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') { result.append(ch); } else if (ch == '/') { result.append(encodeSlash ? "%2F" : ch); } else { result.append(toHexUTF8(ch)); } } return result.toString(); }

Tugas 1: Buat Permintaan Kanonik

Bagian ini memberikan gambaran umum tentang membuat permintaan kanonik.

Berikut ini adalah format permintaan kanonik yang digunakan Amazon S3 untuk menghitung tanda tangan. Agar tanda tangan cocok, Anda harus membuat permintaan kanonik dalam format ini:

<HTTPMethod>\n <CanonicalURI>\n <CanonicalQueryString>\n <CanonicalHeaders>\n <SignedHeaders>\n <HashedPayload>

Di mana:

  • HTTPMethodadalah salah satu metode HTTP, misalnya GET, PUT, HEAD, dan DELETE.

  • CanonicalURIadalah URI-encoded versi komponen jalur absolut dari URI — semuanya dimulai dengan “/” yang mengikuti nama domain dan hingga akhir string atau ke karakter tanda tanya ('?') jika Anda memiliki parameter string kueri. URI dalam contoh berikut,/examplebucket/myphoto.jpg, adalah jalur absolut dan Anda tidak mengkodekan “/” di jalur absolut:

    http://s3.amazonaws.com/examplebucket/myphoto.jpg

    catatan

    Anda tidak menormalkan jalur URI untuk permintaan ke Amazon S3. Misalnya, Anda mungkin memiliki bucket dengan objek bernama “my-object//example//photo.user”. Normalisasi jalur mengubah nama objek dalam permintaan menjadi “my- object/example /photo.user”. Ini adalah jalur yang salah untuk objek itu.

  • CanonicalQueryStringmenentukan parameter URI-encoded string kueri. Anda URI-encode nama dan nilai satu per satu. Anda juga harus mengurutkan parameter dalam string kueri kanonik menurut abjad berdasarkan nama kunci. Penyortiran terjadi setelah pengkodean. String kueri dalam contoh URI berikut adalahprefix=somePrefix&marker=someMarker&max-keys=20:

    http://s3.amazonaws.com/examplebucket?prefix=somePrefix&marker=someMarker&max-keys=20

    String kueri kanonik adalah sebagai berikut (jeda baris ditambahkan ke contoh ini untuk keterbacaan):

    UriEncode("marker")+"="+UriEncode("someMarker")+"&"+ UriEncode("max-keys")+"="+UriEncode("20") + "&" + UriEncode("prefix")+"="+UriEncode("somePrefix")

    Ketika permintaan menargetkan subresource, nilai parameter query yang sesuai akan menjadi string kosong (“”). Misalnya, URI berikut mengidentifikasi ACL subresource pada examplebucket bucket:

    http://s3.amazonaws.com/examplebucket?acl

    Dalam hal ini adalah sebagai berikut: CanonicalQueryString

    UriEncode("acl") + "=" + ""

    Jika URI tidak menyertakan '?' , tidak ada string kueri dalam permintaan, dan Anda mengatur string kueri kanonik ke string kosong (“”). Anda masih perlu memasukkan "\ n”.

  • CanonicalHeadersadalah daftar header permintaan dengan nilainya. Nama header individu dan pasangan nilai dipisahkan oleh karakter baris baru (”\ n “). Nama header harus dalam huruf kecil. Anda harus mengurutkan nama header menurut abjad untuk membangun string, seperti yang ditunjukkan dalam contoh berikut:

    Lowercase(<HeaderName1>)+":"+Trim(<value>)+"\n" Lowercase(<HeaderName2>)+":"+Trim(<value>)+"\n" ... Lowercase(<HeaderNameN>)+":"+Trim(<value>)+"\n"

    Trim()Fungsi Lowercase() dan yang digunakan dalam contoh ini dijelaskan di bagian sebelumnya.

    CanonicalHeadersDaftar harus mencakup yang berikut:

    • hostheader HTTP.

    • Jika Content-MD5 header ada dalam permintaan, Anda harus menambahkannya ke CanonicalHeaders daftar.

    • Setiap x-amz-* header yang Anda rencanakan untuk disertakan dalam permintaan Anda juga harus ditambahkan. Misalnya, jika Anda menggunakan kredentif keamanan sementara, Anda harus menyertakan x-amz-security-token dalam permintaan Anda. Anda harus menambahkan header ini dalam daftarCanonicalHeaders.

    catatan
    • x-amz-content-sha256Header diperlukan untuk semua permintaan AWS Signature Version 4. Ini menyediakan hash dari payload permintaan. Namun, Anda tidak diharuskan menyertakan x-amz-content-sha256 sebagai header kanonik karena S3 akan secara otomatis menggunakan nilainya saat menghitung hash payload yang dikirim dalam permintaan.

    • Jika tidak ada payload, Anda harus memberikan hash dari string kosong.

    • Jika Anda tidak ingin S3 memeriksa hash permintaan, Anda dapat menggunakan string literal sebagai gant "UNSIGNED-PAYLOAD" inya.

    Berikut ini adalah contoh CanonicalHeaders string. Nama header dalam huruf kecil dan diurutkan.

    contoh Contoh 1
    host:s3.amazonaws.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130708T220855Z
    contoh Contoh 2
    host:s3.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD x-amz-date:20130708T220855Z
    contoh Contoh 3
    host:s3.amazonaws.com x-amz-date:20130708T220855Z
    catatan

    Untuk tujuan menghitung tanda tangan otorisasi, header host dan semua x-amz-* header, tidak termasukx-amz-content-sha256, diperlukan. Namun, untuk mencegah gangguan data, Anda harus mempertimbangkan untuk memasukkan semua header dalam perhitungan tanda tangan.

    Menandatangani x-amz-content-sha256 header bersifat opsional karena S3 akan menggunakan nilainya saat menghitung hash payload permintaan yang diterima.

  • SignedHeadersadalah daftar nama header permintaan huruf kecil yang diurutkan berdasarkan abjad dan dipisahkan titik koma. Header permintaan dalam daftar adalah header yang sama yang Anda sertakan dalam string. CanonicalHeaders Dalam contoh sebelumnya, nilainya SignedHeaders adalah sebagai berikut:

    contoh Contoh 1 dan 2
    host;x-amz-content-sha256;x-amz-date
    contoh Contoh 3
    host;x-amz-date
  • HashedPayloadadalah nilai heksadesimal dari hash SHA256 dari payload permintaan.

    Hex(SHA256Hash(<payload>)

    Jika tidak ada payload dalam permintaan, Anda menghitung hash dari string kosong sebagai berikut:

    Hex(SHA256Hash(""))

    Hash mengembalikan nilai berikut:

    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

    Misalnya, ketika Anda mengunggah objek dengan menggunakan permintaan PUT, Anda memberikan data objek dalam tubuh. Ketika Anda mengambil objek dengan menggunakan permintaan GET, Anda menghitung hash string kosong.

Tugas 2: Buat String untuk Ditandatangani

Bagian ini memberikan gambaran umum tentang membuat string untuk ditandatangani. Untuk petunjuk langkah demi langkah, lihat Tugas 2: Membuat String untuk Masuk Referensi Umum AWS.

String yang akan ditandatangani adalah gabungan dari string berikut:

"AWS4-HMAC-SHA256" + "\n" + timeStampISO8601Format + "\n" + <Scope> + "\n" + Hex(SHA256Hash(<CanonicalRequest>))

String konstan AWS4-HMAC-SHA256 menentukan algoritma hash yang Anda gunakan, HMAC-SHA256. Ini timeStamp adalah waktu UTC saat ini dalam format ISO 8601 (misalnya,20130524T000000Z).

Scopemengikat tanda tangan yang dihasilkan ke tanggal tertentu Wilayah AWS, sebuah, dan layanan. Dengan demikian, tanda tangan yang dihasilkan hanya akan berfungsi di Wilayah tertentu dan untuk layanan tertentu. Tanda tangan berlaku selama tujuh hari setelah tanggal yang ditentukan.

date.Format(<YYYYMMDD>) + "/" + <region> + "/" + <service> + "/aws4_request"

Untuk Amazon S3, string layanan adalahs3. Untuk daftar region string, lihat Wil ayah dan Titik Akhir di Referensi Umum AWS. Kolom Wilayah dalam tabel ini menyediakan daftar string Wilayah yang valid.

Cakupan berikut membatasi tanda tangan yang dihasilkan ke Wil us-east-1 ayah dan Amazon S3.

20130606/us-east-1/s3/aws4_request

catatan

Scopeharus menggunakan tanggal yang sama yang Anda gunakan untuk menghitung kunci penandatanganan, seperti yang dibahas di bagian berikut.

Tugas 3: Hitung Tanda Tangan

Di AWS Tanda Tangan Versi 4, alih-alih menggunakan kunci AWS akses untuk menandatangani permintaan, pertama-tama Anda membuat kunci penandatanganan yang dicakup ke Wilayah dan layanan tertentu.  Untuk informasi selengkapnya tentang penandatanganan kunci, lihatPengantar Permintaan Penandatanganan.

DateKey = HMAC-SHA256("AWS4"+"<SecretAccessKey>", "<YYYYMMDD>") DateRegionKey = HMAC-SHA256(<DateKey>, "<aws-region>") DateRegionServiceKey = HMAC-SHA256(<DateRegionKey>, "<aws-service>") SigningKey = HMAC-SHA256(<DateRegionServiceKey>, "aws4_request")

catatan

Beberapa kasus penggunaan dapat memproses kunci tanda tangan hingga 7 hari. Untuk informasi selengkapnya, lihat Berbagi Objek dengan Orang Lain.

Untuk daftar string Wilayah, lihat Wil ayah dan Titik Akhir di Referensi Umum AWS.

Menggunakan kunci penandatanganan memungkinkan Anda menyimpan AWS kredensibilitas Anda di satu tempat yang aman. Misalnya, jika Anda memiliki beberapa server yang berkomunikasi dengan Amazon S3, Anda membagikan kunci penandatanganan dengan server tersebut; Anda tidak perlu menyimpan salinan kunci akses rahasia Anda di setiap server. Kunci penandatanganan berlaku hingga tujuh hari. Jadi setiap kali Anda menghitung kunci penandatanganan, Anda perlu membagikan kunci penandatanganan dengan server Anda. Untuk informasi selengkapnya, lihat Permintaan Otentikasi (AWS Versi Tanda Tangan 4).

Tanda tangan terakhir adalah HMAC-SHA256 hash dari string yang akan ditandatangani, menggunakan kunci penandatanganan sebagai kunci.

HMAC-SHA256(SigningKey, StringToSign)

Untuk petunjuk langkah demi langkah tentang membuat tanda tangan, lihat Tugas 3: Membuat Tangan Tangan di Referensi Umum AWS.

Contoh: Perhitungan Tanda Tangan

Anda dapat menggunakan contoh di bagian ini sebagai referensi untuk memeriksa perhitungan tanda tangan dalam kode Anda. Perhitungan yang ditunjukkan dalam contoh menggunakan data berikut:

  • Contoh kunci akses.

    Parameter Nilai
    AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
    AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • Minta stempel waktu 20130524T000000Z (). Fri, 24 May 2013 00:00:00 GMT

  • Nama bucketexamplebucket.

  • Ember diasumsikan berada di Wilayah Timur AS (Virginia Utara). Kredensi Scope dan Signing Key perhitungan digunakan us-east-1 sebagai penentu Wilayah. Untuk informasi tentang Wilayah lain, lihat Wil ayah dan Titik Akhir di Referensi Umum AWS.

  • Anda dapat menggunakan permintaan gaya path atau virtual hosted—style. Contoh berikut menunjukkan cara menandatangani permintaan gaya host virtual, misalnya:

    https://examplebucket.s3.amazonaws.com/photos/photo1.jpg

    Untuk informasi selengkapnya, lihat Hosting Virtual Bucket di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

Contoh: GET Object

Contoh berikut mendapatkan 10 byte pertama dari sebuah objek (test.txt) dariexamplebucket. Untuk informasi selengkapnya tentang tindakan API, lihat GetObject.

GET /test.txt HTTP/1.1 Host: examplebucket.s3.amazonaws.com Authorization: SignatureToBeCalculated Range: bytes=0-9 x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date: 20130524T000000Z

Karena permintaan GET ini tidak menyediakan konten tubuh apa pun, x-amz-content-sha256 nilainya dapat berupa hash dari badan permintaan kosong atau string literal"UNSIGNED-PAYLOAD". Langkah-langkah berikut menunjukkan perhitungan tanda tangan dan konstruksi Authorization header menggunakan hash dari string kosong.

  1. StringToSign
    1. CanonicalRequest

      GET /test.txt host:examplebucket.s3.amazonaws.com range:bytes=0-9 x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130524T000000Z host;range;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

      Dalam string permintaan kanonik, baris terakhir adalah hash dari badan permintaan kosong. Baris ketiga kosong karena tidak ada parameter kueri dalam permintaan.

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 7344ae5b7ee6c3e7e6b0fe0640412a37625d1fbfff95c48bbb2dc43964946972

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Tanda tangan

    f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41

  4. Header otorisasi

    AuthorizationHeader yang dihasilkan adalah sebagai berikut:

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;range;x-amz-content-sha256;x-amz-date,Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41

Contoh: Objek PUT

Contoh permintaan PUT ini membuat objek (test$file.text) diexamplebucket. Contoh tersebut mengasumsikan sebagai berikut:

  • Anda meminta REDUCED_REDUNDANCY sebagai kelas penyimpanan dengan menambahkan header x-amz-storage-class permintaan. Untuk informasi tentang kelas penyimpanan, lihat Kelas Penyimpanan di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

  • Isi file yang diunggah adalah string, "Welcome to Amazon S3." x-amz-content-sha256 Nilai permintaan didasarkan pada string ini.

Untuk informasi tentang tindakan API, lihat PutObject.

PUT test$file.text HTTP/1.1 Host: examplebucket.s3.amazonaws.com Date: Fri, 24 May 2013 00:00:00 GMT Authorization: SignatureToBeCalculated x-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY x-amz-content-sha256: 44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072 <Payload>

Langkah-langkah berikut menunjukkan perhitungan tanda tangan.

  1. StringToSign
    1. CanonicalRequest

      PUT /test%24file.text date:Fri, 24 May 2013 00:00:00 GMT host:examplebucket.s3.amazonaws.com x-amz-content-sha256:44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072 x-amz-date:20130524T000000Z x-amz-storage-class:REDUCED_REDUNDANCY date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class 44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072

      Dalam permintaan kanonik, baris ketiga kosong karena tidak ada parameter kueri dalam permintaan. Header x-amz-content-sha256 kanonik dapat secara opsional ditandatangani karena hash payloadnya sudah disediakan di bagian bawah permintaan. Baris terakhir adalah hash tubuh, yang harus sama dengan x-amz-content-sha256 header nilai yang dikirim ke S3 dalam permintaan HTTP.

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 9e0e90d9c76de8fa5b200d8c849cd5b8dc7a3be3951ddb7f6a76b4158342019d

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Tanda tangan

    98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd

  4. Header otorisasi

    AuthorizationHeader yang dihasilkan adalah sebagai berikut:

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd

Contoh: GET Bucket Lifecycle

Permintaan GET berikut mengambil konfigurasi siklus hidup. examplebucket Untuk informasi tentang tindakan API, lihat GetBucketLifecycleConfiguration.

GET ?lifecycle HTTP/1.1 Host: examplebucket.s3.amazonaws.com Authorization: SignatureToBeCalculated x-amz-date: 20130524T000000Z x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Karena permintaan tidak menyediakan konten tubuh apa pun, nilai x-amz-content-sha256 header adalah hash dari badan permintaan kosong. Langkah-langkah berikut menunjukkan perhitungan tanda tangan.

  1. StringToSign
    1. CanonicalRequest

      GET / lifecycle= host:examplebucket.s3.amazonaws.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130524T000000Z host;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

      Dalam permintaan kanonik, baris terakhir adalah hash dari badan permintaan kosong.

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 9766c798316ff2757b517bc739a67f6213b4ab36dd5da2f94eaebf79c77395ca

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Tanda tangan

    fea454ca298b7da1c68078a5d1bdbfbbe0d65c699e0f91ac7a200a0136783543

  4. Header otorisasi

    AuthorizationHeader yang dihasilkan adalah sebagai berikut:

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=fea454ca298b7da1c68078a5d1bdbfbbe0d65c699e0f91ac7a200a0136783543

Contoh: Dapatkan Bucket (Daftar Objek)

Contoh berikut mengambil daftar objek dari examplebucket bucket. Untuk informasi tentang tindakan API, lihat ListObjects.

GET ?max-keys=2&prefix=J HTTP/1.1 Host: examplebucket.s3.amazonaws.com Authorization: SignatureToBeCalculated x-amz-date: 20130524T000000Z x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Karena permintaan tidak menyediakan badan, nilainya x-amz-content-sha256 adalah hash dari badan permintaan kosong. Langkah-langkah berikut menunjukkan perhitungan tanda tangan.

  1. StringToSign
    1. CanonicalRequest

      GET / max-keys=2&prefix=J host:examplebucket.s3.amazonaws.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130524T000000Z host;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

      Dalam string kanonik, baris terakhir adalah hash dari badan permintaan kosong.

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request df57d21db20da04d7fa30298dd4488ba3a2b47ca3a489c74750e0f1e7df1b9b7

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Tanda tangan

    34b48302e7b5fa45bde8084f4b7868a86f0a534bc59db6670ed5711ef69dc6f7

  4. Header otorisasi

    AuthorizationHeader yang dihasilkan adalah sebagai berikut:

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=34b48302e7b5fa45bde8084f4b7868a86f0a534bc59db6670ed5711ef69dc6f7