Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Otentikasi Permintaan: Menggunakan Parameter Kueri (AWS Versi Tanda Tangan 4)
Seperti dijelaskan dalam ikhtisar otentikasi (lihatMetode Autentikasi), Anda dapat memberikan informasi otentikasi menggunakan parameter string kueri. Menggunakan parameter kueri untuk mengotentikasi permintaan berguna ketika Anda ingin mengungkapkan permintaan sepenuhnya dalam URL. Metode ini juga disebut sebagai penandatanganan URL.
Skenario kasus penggunaan untuk URL yang ditandatangani sebelumnya adalah Anda dapat memberikan akses sementara ke sumber daya Amazon S3 Anda. Misalnya, Anda dapat menyematkan URL yang telah ditandatangani sebelumnya di situs web Anda atau menggunakannya di klien baris perintah (seperti Curl) untuk mengunduh objek.
catatan
Anda juga dapat menggunakan AWS CLI untuk membuat URL yang ditandatangani sebelumnya. Untuk informasi selengkapnya, lihat presign dalam AWS CLI Referensi Perintah.
Berikut ini adalah contoh URL yang ditandatangani sebelumnya.
https://examplebucket.s3.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=<your-access-key-id>/20130721/us-east-1/s3/aws4_request &X-Amz-Date=20130721T201207Z &X-Amz-Expires=86400 &X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>
Dalam contoh URL, perhatikan hal berikut:
-
Umpan baris ditambahkan untuk keterbacaan.
-
X-Amz-CredentialNilai dalam URL menunjukkan karakter “/” hanya untuk keterbacaan. Dalam praktiknya, itu harus dikodekan sebagai%2F. Contoh:&X-Amz-Credential=<your-access-key-id>%2F20130721%2Fus-east-1%2Fs3%2Faws4_request
Tabel berikut menjelaskan parameter kueri di URL yang menyediakan informasi otentikasi.
| Nama Parameter String Kueri | Nilai Contoh |
|---|---|
X-Amz-Algorithm |
Mengidentifikasi versi T AWS anda Tangan dan algoritma yang Anda gunakan untuk menghitung tanda tangan. Untuk AWS Signature Version 4, Anda menetapkan nilai parameter ini ke |
X-Amz-Credential |
Selain ID kunci akses Anda, parameter ini juga menyediakan ruang lingkup (Wilayah AWS dan layanan) yang tanda tangannya valid. Nilai ini harus sesuai dengan cakupan yang Anda gunakan dalam perhitungan tanda tangan, dibahas di bagian berikut. Bentuk umum untuk nilai parameter ini adalah sebagai berikut:
Contoh:
Untuk Amazon S3, |
X-Amz-Date |
Format tanggal dan waktu harus mengikuti standar ISO 8601, dan harus diformat dengan format " |
X-Amz-Expires |
Menyediakan periode waktu, dalam detik, di mana URL yang telah ditandatangani sebelumnya valid. Misalnya, URL yang telah ditandatangani dapat berlaku maksimal tujuh hari karena kunci penandatanganan yang Anda gunakan dalam perhitungan tanda tangan berlaku hingga tujuh hari. |
X-Amz-SignedHeaders |
Daftar header yang Anda gunakan untuk menghitung tanda tangan. Header berikut diperlukan dalam perhitungan tanda tangan:
catatanUntuk keamanan tambahan, Anda harus menandatangani semua header permintaan yang Anda rencanakan untuk disertakan dalam permintaan Anda. |
X-Amz-Signature |
Menyediakan tanda tangan untuk mengotentikasi permintaan Anda. Tanda tangan ini harus sesuai dengan tanda tangan yang dihitung Amazon S3; jika tidak, Amazon S3 menolak permintaan tersebut. Sebagai contoh, Perhitungan tanda tangan dijelaskan di bagian berikut. |
X-Amz-Security-Token |
Parameter kredensi opsional jika menggunakan kredenSIAL yang bersumber dari layanan STS. |
Menghitung Tanda Tangan
Diagram berikut menggambarkan proses perhitungan 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:
pentingUriEncode 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.
|
Untuk informasi selengkapnya tentang proses penandatanganan (detail pembuatan permintaan kanonik, string untuk ditandatangani, dan perhitungan tanda tangan), lihatPerhitungan Tanda Tangan untuk Header Otorisasi: Mentransfer Payload dalam Satu Potongan (AWS Versi Tanda Tangan 4). Prosesnya umumnya sama kecuali bahwa pembuatan CanonicalRequest dalam URL yang telah ditandatangani berbeda sebagai berikut:
-
Anda tidak menyertakan hash payload di Canonical Request, karena ketika Anda membuat URL yang telah ditandatangani sebelumnya, Anda tidak mengetahui konten payload karena URL digunakan untuk mengunggah payload sewenang-wenang. Sebagai gantinya, Anda menggunakan string konstan
UNSIGNED-PAYLOAD. -
Canonical Query String harus menyertakan semua parameter kueri dari tabel sebelumnya kecuali untuk
X-Amz-Signature. -
Untuk S3, Anda harus menyertakan parameter ku
X-Amz-Security-Tokeneri di URL jika menggunakan kredenSIAL yang bersumber dari layanan STS. -
Header kanonik harus menyertakan header HTTP
host. Jika Anda berencana untuk menyertakan salah satux-amz-*header, header ini juga harus ditambahkan untuk perhitungan tanda tangan. Anda dapat secara opsional menambahkan semua header lain yang Anda rencanakan untuk disertakan dalam permintaan Anda. Untuk keamanan tambahan, Anda harus menandatangani header sebanyak mungkin. Jika Anda menambahkan header yang ditandatangani yang juga merupakan parameter kueri yang ditandatangani, dan nilainya berbeda, Anda akan menerimaInvalidRequestkesalahan karena input bertentangan.
Sebuah contoh
Misalkan Anda memiliki objek test.txt di examplebucket ember Anda. Anda ingin berbagi objek ini dengan orang lain untuk jangka waktu 24 jam (86400 detik) dengan membuat URL yang telah ditandatangani sebelumnya.
https://examplebucket.s3.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request &X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>
Langkah-langkah berikut menggambarkan terlebih dahulu perhitungan tanda tangan dan kemudian konstruksi URL yang telah ditandatangani sebelumnya. Contoh membuat asumsi tambahan berikut:
-
Stempel waktu permintaan adalah.
Fri, 24 May 2013 00:00:00 GMT -
Bucket berada di wilayah AS Timur (Virginia Utara), dan kreden
Scopesi sertaSigning Keyperhitungan digunakanus-east-1sebagai penentu wilayah. Untuk informasi selengkapnya, lihat Wilayah dan Titik Ak hir di Referensi Umum AWS.
Anda dapat menggunakan contoh ini sebagai kasus uji untuk memverifikasi tanda tangan yang dihitung kode Anda; namun, Anda harus menggunakan nama bucket yang sama, kunci objek, stempel waktu, dan kredenSIAL contoh berikut:
| Parameter | Nilai |
|---|---|
AWSAccessKeyId |
AKIAIOSFODNN7EXAMPLE |
AWSSecretAccessKey |
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
-
StringToSign
-
CanonicalRequest
GET /test.txt X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host host:examplebucket.s3.amazonaws.com host UNSIGNED-PAYLOAD -
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Tanda tangan
aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404Sekarang Anda memiliki semua informasi untuk membangun URL yang telah ditandatangani sebelumnya. URL yang dihasilkan untuk contoh ini ditampilkan sebagai berikut (Anda dapat menggunakan ini untuk membandingkan URL yang telah ditandatangani sebelumnya):
https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
Contoh 2
Berikut ini adalah contoh (tidak terkait dengan contoh sebelumnya) yang menunjukkan URL yang ditandatangani sebelumnya dengan X-Amz-Security-Token parameter.
https://examplebucket.s3.us-east-1.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request &X-Amz-Date=20200524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host &X-Amz-Security-Token=IQoJb3JpZ2luX2VjEMv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCIBSUbVdj9YGs2g0HkHsOHFdkwOozjARSKHL987NhhOC8AiBPepRU1obMvIbGU0T%2BWphFPgK%2Fqpxaf5Snvm5M57XFkCqlAgjz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDQ3MjM4NTU0NDY2MCIM83pULBe5%2F%2BNm1GZBKvkBVslSaJVgwSef7SsoZCJlfJ56weYl3QCwEGr2F4BmCZZyFpmWEYzWnhNK1AnHMj5nkfKlKBx30XAT5PZGVrmq4Vkn9ewlXQy1Iu3QJRi9Tdod8Ef9%2FyajTaUGh76%2BF5u5a4O115jwultOQiKomVwO318CO4l8lv%2F3HhMOkpdanMXn%2B4PY8lvM8RgnzSu90jOUpGXEOAo%2F6G8OqlMim3%2BZmaQmasn4VYRvESEd7O72QGZ3%2BvDnDVnss0lSYjlv8PP7IujnvhZRnj0WoeOyMe1lL0wTG%2Fa9usH5hE52w%2FYUJccOn0OaZuyROuVsRV4Q70sbWQhUvYUt%2B0tUMKzm8vsFOp4BaNZFqobbjtb36Y92v%2Bx5kY6i0s8QE886jJtUWMP5ldMziClGx3p0mN5dzsYlM3GyiJ%2FO1mWkPQDwg3mtSpOA9oeeuAMPTA7qMqy9RNuTKBDSx9EW27wvPzBum3SJhEfxv48euadKgrIX3Z79ruQFSQOc9LUrDjR%2B4SoWAJqK%2BGX8Q3vPSjsLxhqhEMWd6U4TXcM7ku3gxMbzqfT8NDg%3D &X-Amz-Signature=<signature-value>