View a markdown version of this page

Unduh dan unggah objek dengan URL yang ditandatangani sebelumnya - Amazon Simple Storage Service

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

Unduh dan unggah objek dengan URL yang ditandatangani sebelumnya

Anda dapat menggunakan URL yang telah ditandatangani untuk memberikan akses terbatas waktu ke objek di Amazon S3 tanpa memperbarui kebijakan bucket Anda. URL yang telah ditandatangani dapat dimasukkan di dalam browser atau dapat digunakan oleh program untuk mengunduh objek. KredenSIAL yang digunakan oleh URL yang ditandatangani sebelumnya adalah milik prinsi AWS Identity and Access Management pal (IAM) yang membuat URL.

Anda juga dapat menggunakan URL yang telah ditandatangani untuk mengizinkan seseorang mengunggah objek tertentu ke bucket Amazon S3 Anda. Ini memungkinkan unggahan tanpa mengharuskan pihak lain untuk memiliki kredenSIAL atau izin AWS keamanan. Jika sebuah objek dengan kunci yang sama sudah ada di bucket seperti yang ditentukan dalam URL yang telah ditandatangani, Amazon S3 menggantikan objek yang sudah ada dengan objek yang diunggah.

Anda dapat menggunakan URL yang telah ditandatangani beberapa kali, hingga tanggal dan waktu kedaluwarsa.

Operasi API anotasi (PutObjectAnnotation,GetObjectAnnotation,ListObjectAnnotations, danDeleteObjectAnnotation) mendukung URL yang telah ditandatangani sebelumnya.

Saat Anda membuat sebuah URL yang telah ditandatangani, Anda harus memberikan kredensial keamanan Anda, lalu menentukan berikut ini:

  • Bucket Amazon S3

  • Kunci objek (jika mengunduh objek ini akan ada di bucket Amazon S3 Anda, jika mengunggah ini adalah nama file yang akan diunggah)

  • Metode HTTP (GETuntuk mengunduh objek, PUT untuk mengunggah, HEAD untuk membaca metadata objek, dll)

  • Interval waktu kedaluwarsa

Saat menggunakan URL yang telah ditandatangani sebelumnya untuk mengunggah objek, Anda dapat memverifikasi integritas objek menggunakan checksum. Sementara URL yang ditandatangani sebelumnya yang dibuat dengan AWS Tanda Tangan Versi 2 hanya mendukung checksum MD5, URL yang telah ditandatangani sebelumnya yang dibuat dengan T AWS anda Tangan Versi 4 mendukung algoritma checksum tambahan termasukCRC-64/NVME,,,CRC32,CRC32C,,SHA-1, SHA-256MD5, XXHash64 dan. XXHash3 XXHash128 SHA-512 Untuk menggunakan algoritma checksum tambahan ini, pastikan Anda menggunakan AWS Signature Version 4 dan sertakan header checksum yang sesuai dalam permintaan upload Anda. Untuk informasi selengkapnya tentang integritas objek, lihat Memeriksa integritas objek di Amazon S3.

Siapa yang dapat membuat URL yang telah ditandatangani

Siapa pun yang memiliki kredensial keamanan yang valid dapat membuat sebuah URL yang telah ditandatangani. Tetapi untuk seseorang berhasil mengakses objek, URL yang telah ditandatangani harus dibuat oleh seseorang yang memiliki izin untuk melakukan operasi yang menjadi dasar dari URL yang telah ditandatangani.

Berikut ini adalah jenis kredensial yang dapat Anda gunakan untuk membuat URL yang telah ditandatangani:

  • Pengguna IAM - Berlaku hingga 7 hari saat Anda menggunakan Tanda Tangan AWS Versi 4.

    Untuk membuat sebuah URL yang telah ditandatangani yang valid hingga 7 hari, pertama-tama delegasikan kredensial pengguna IAM (kunci akses dan kunci rahasia) ke metode yang Anda gunakan untuk membuat URL yang telah ditandatangani.

  • KredenSIAL keamanan sementara — Tidak dapat valid lebih lama dari kredenSIAL itu sendiri. Kredensibilitas ini meliputi:

    • Kredentif peran IAM — URL yang ditandatangani sebelumnya kedaluwarsa saat sesi peran berakhir, bahkan jika Anda menentukan waktu kedaluwarsa yang lebih lama.

    • KredenSIAL peran IAM yang digunakan oleh instans Amazon EC2 — Berlaku selama durasi kredenSIAL peran (biasanya 6 jam).

    • AWS Security Token Service kredenSIAL — Hanya berlaku selama durasi kredenSIAL sementara.

catatan

Jika Anda membuat URL yang telah ditandatangani menggunakan kredensial sementara, URL tersebut akan kedaluwarsa saat kredensial-nya kedaluwarsa. Secara umum, URL yang ditandatangani sebelumnya kedaluwarsa ketika kredensi yang Anda gunakan untuk membuatnya dicabut, dihapus, atau dinonaktifkan. Ini benar terjadi meskipun jika URL dibuat dengan waktu kedaluwarsa yang lebih lama. Untuk masa pakai kredenSIAL keamanan sementara, lihat Membandingkan operasi AWS STS API di Panduan Pengguna IAM.

Waktu kedaluwarsa untuk URL yang telah ditandatangani

URL yang telah ditandatangani tetap valid untuk jangka waktu yang ditentukan saat URL dibuat. Jika Anda membuat URL yang telah ditandatangani dengan konsol Amazon S3, waktu kedaluwarsa dapat diatur antara 1 menit dan 12 jam. Jika Anda menggunakan AWS SDK AWS CLI atau, waktu kedaluwarsa dapat diatur setinggi 7 hari.

Jika Anda membuat URL yang telah ditandatangani sebelumnya dengan menggunakan token sementara, maka URL kedaluwarsa saat token kedaluwarsa. Secara umum, URL yang ditandatangani sebelumnya kedaluwarsa ketika kredensi yang Anda gunakan untuk membuatnya dicabut, dihapus, atau dinonaktifkan. Ini benar terjadi meskipun jika URL dibuat dengan waktu kedaluwarsa yang lebih lama. Untuk informasi selengkapnya tentang bagaimana kredensial yang Anda gunakan memengaruhi waktu kedaluwarsanya, lihat Siapa yang dapat membuat URL yang telah ditandatangani.

Amazon S3 memeriksa tanggal dan waktu kedaluwarsa URL yang ditandatangani pada saat permintaan HTTP. Misalnya, jika klien mulai mengunduh file besar segera sebelum waktu kedaluwarsa, pengunduhan berlanjut meskipun waktu kedaluwarsa berlalu selama pengunduhan. Akan tetapi, jika koneksi menurun dan klien mencoba memulai ulang unduhan setelah waktu kedaluwarsa berlalu, pengunduhan gagal.

Pembatasan kemampuan URL yang telah ditandatangani

Kemampuan URL yang telah ditandatangani dibatasi oleh izin pengguna yang membuatnya. Pada intinya, URL yang telah ditandatangani adalah token pembawa yang memberikan akses kepada mereka yang memilikinya. Oleh karena itu, kami menyarankan agar Anda melindunginya sebagaimana mestinya. Berikut ini adalah beberapa metode yang dapat Anda gunakan untuk membatasi penggunaan URL yang telah ditandatangani Anda.

AWS Tanda Tangan Versi 4 (SigV4)

Untuk menerapkan perilaku tertentu saat permintaan URL yang telah ditandatangani diautentikasi dengan menggunakan AWS Signature Version 4 (SigV4), Anda dapat menggunakan kunci kondisi dalam kebijakan bucket dan kebijakan titik akses. Contoh, kebijakan bucket berikut menggunakan s3:signatureAge kondisi untuk menolak permintaan URL yang telah ditandatangani Amazon S3 pada objek di amzn-s3-demo-bucket bucket jika tanda tangannya sudah lebih dari 10 menit. Untuk menggunakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 min old", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "s3:*", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge": "600000" } } } ] }

Untuk informasi selengkapnya tentang kunci kebijakan terkait Tanda AWS Tangan Versi 4, lihat Autenti AWS kasi Tanda Tangan Versi 4 di Referensi API Layanan Penyimpanan Sederhana Amazon.

Pembatasan jalur jaringan

Jika Anda ingin membatasi penggunaan URL yang telah ditandatangani sebelumnya dan semua akses Amazon S3 ke jalur jaringan tertentu, Anda dapat menulis kebijakan AWS Identity and Access Management (IAM). Anda dapat mengatur kebijakan ini pada pengguna utama IAM yang melakukan panggilan, bucket Amazon S3, atau keduanya.

Pembatasan jalur jaringan pada pengguna utama IAM mengharuskan pengguna kredensial tersebut untuk membuat permintaan dari jaringan yang ditentukan. Pembatasan pada bucket atau titik akses mengharuskan semua permintaan ke sumber daya tersebut berasal dari jaringan tertentu. Pembatasan ini juga berlaku di luar skenario URL yang telah ditandatangani sebelumnya.

Kunci kondisi global IAM yang Anda gunakan bergantung pada jenis titik akhir. Jika Anda menggunakan titik akhir publik untuk Amazon S3, gunakan aws:SourceIp. Jika Anda menggunakan titik akhir cloud privat virtual (VPC) ke Amazon S3, gunakan aws:SourceVpc atau aws:SourceVpce.

Pernyataan kebijakan IAM berikut mengharuskan prinsipal untuk mengakses AWS hanya dari rentang jaringan yang ditentukan. Dengan pernyataan kebijakan ini, semua akses harus berasal dari rentang itu. Kebijakan ini juga termasuk kasus seseorang yang menggunakan URL yang telah ditandatangani sebelumnya untuk Amazon S3. Untuk menggunakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }

Pertanyaan yang sering diajukan untuk URL yang ditandatangani sebelumnya

T: Mengapa URL yang ditandatangani sebelumnya kedaluwarsa lebih awal dari waktu kedaluwarsa yang dikonfigurasi?

URL yang telah ditandatangani tetap valid hanya selama kredensialnya yang mendasarinya valid. URL yang ditandatangani sebelumnya kedaluwarsa pada waktu kedaluwarsa yang dikonfigurasi atau saat kredenSIAL terkaitnya kedaluwarsa, mana saja yang terjadi lebih dulu. Untuk tugas atau wadah Amazon Elastic Container Service, kredenSIAL peran biasanya berputar setiap 1-6 jam. Saat menggunakan AWS Security Token Service (AWS STS) AssumeRole, URL yang telah ditandatangani berakhir saat sesi peran berakhir, yang secara default adalah 1 jam. Untuk profil instans Amazon EC2, kredentif metadata berputar secara berkala dengan masa berlaku maksimum sekitar 6 jam.

T: Mengapa saya mendapatkan kesalahan 403 Forbidden saat mengakses URL yang telah ditandatangani sebelumnya?

Sebelum membuat URL yang telah ditandatangani sebelumnya, verifikasi bahwa Anda memiliki izin yang benar dikonfigurasi. Pengguna atau peran IAM yang menghasilkan URL harus memiliki izin yang diperlukan, sepertis3:GetObject, untuk operasi tertentu. Selain itu, periksa apakah kebijakan bucket Amazon S3 tidak secara eksplisit menolak akses ke objek.

T: Mengapa saya mendapatkan AccessDenied kesalahan dengan HeadersNotSigned: if-range?

Ketika Range disertakanX-Amz-SignedHeaders, Amazon S3 mengharuskan itu If-Range juga ditandatangani jika ada dalam permintaan. Tambahkan If-Range ke X-Amz-SignedHeaders saat Anda membuat URL yang telah ditandatangani sebelumnya.

T: Saya mendapatkan SignatureDoesNotMatch kesalahan. Bagaimana cara memperbaikinya?

Jika Anda mengalami SignatureDoesNotMatch kesalahan saat menggunakan URL Amazon S3 yang telah ditandatangani sebelumnya, pertimbangkan beberapa penyebab umum. Pertama, pastikan bahwa jam sistem Anda disinkronkan dengan server Network Time Protocol (NTP), karena bahkan penyimpangan waktu kecil dapat membatalkan tanda tangan. Selanjutnya, ketahuilah bahwa beberapa proxy perusahaan mungkin memodifikasi header atau string kueri, yang berpotensi menyebabkan ketidakcocokan tanda tangan. Untuk memecahkan masalah, coba pengujian tanpa proxy. Terakhir, verifikasi bahwa semua parameter permintaan — termasuk metode HTTP, header, dan string kueri — cocok persis antara pembuatan URL dan penggunaan. Mengatasi masalah ini seringkali dapat menyelesaikan SignatureDoesNotMatch kesalahan.

T: Saya mendapatkan ExpiredToken kesalahan. Apa yang harus saya lakukan?

Ketika Anda menerima ExpiredToken kesalahan saat menggunakan URL yang telah ditandatangani sebelumnya, ini menunjukkan bahwa AWS kredenSIAL yang digunakan untuk menghasilkan URL tidak lagi valid. Untuk mengatasi masalah ini, segarkan AWS kredensi Anda sebelum membuat URL baru yang telah ditandatangani sebelumnya. Untuk aplikasi yang berjalan lama, kami sarankan menerapkan logika penyegaran kredensia untuk mempertahankan akses berkelanjutan. Jika sesuai, Anda dapat menggunakan kredenSIAL yang berumur lebih lama atau menerapkan mekanisme penyegaran token. Jika Anda menggunakan AWS Security Token Service (AWS STS) AssumeRole, verifikasi bahwa durasi sesi yang dikonfigurasi memenuhi persyaratan kasus penggunaan Anda. Ingatlah bahwa URL yang telah ditandatangani tetap valid hanya selama durasi kredenSIAL yang mendasarinya, jadi menerapkan manajemen kredenSIAL yang tepat sangat penting.