Mengunggah objek dengan presigned URLs - Amazon Simple Storage Service

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

Mengunggah objek dengan presigned URLs

Anda dapat menggunakan presigned URLs untuk mengizinkan seseorang mengunggah objek ke bucket Amazon S3 Anda. Menggunakan URL yang telah ditetapkan sebelumnya akan memungkinkan unggahan tanpa mengharuskan pihak lain memiliki kredensyal atau izin AWS keamanan. URL yang telah ditandatangani sebelumnya dibatasi oleh izin pengguna yang membuatnya. Artinya, jika Anda menerima URL yang telah ditandatangani sebelumnya untuk mengunggah suatu objek, Anda dapat mengunggah objek hanya jika pembuat URL tersebut memiliki izin yang diperlukan untuk mengunggah objek tersebut.

Saat seseorang menggunakan URL untuk mengunggah sebuah objek, Amazon S3 membuat objek dalam bucket yang ditentukan. Jika objek dengan kunci yang sama yang ditentukan dalam URL yang telah ditandatangani sebelumnya sudah ada di bucket, Amazon S3 akan menggantikan objek yang ada dengan objek yang diunggah. Setelah diunggah, pemilik bucket akan memiliki objek tersebut.

Untuk informasi umum tentang presigned URLs, lihatUnduh dan unggah objek dengan presigned URLs.

Anda dapat membuat URL yang telah ditandatangani sebelumnya untuk mengunggah objek tanpa menulis kode apa pun dengan menggunakan AWS Explorer for Visual Studio. Anda juga dapat membuat URL presigned secara terprogram dengan menggunakan. AWS SDKs

catatan

Saat ini, AWS Toolkit for Visual Studio tidak mendukung Visual Studio untuk Mac.

  1. Instal AWS Toolkit for Visual Studio menggunakan petunjuk berikut, Menginstal dan menyiapkan Toolkit for Visual Studio di AWS Toolkit for Visual Studio Panduan Pengguna.

  2. Connect untuk AWS menggunakan langkah-langkah berikut, Connecting to AWS di Panduan AWS Toolkit for Visual Studio Pengguna.

  3. Di panel sisi kiri berlabel AWS Explorer, klik kanan bucket yang Anda inginkan untuk mengunggah objek.

  4. Pilih Buat URL Pra-Tanda Tangan... .

  5. Di jendela pop-up, atur tanggal kedaluwarsa dan waktu untuk URL yang telah ditetapkan sebelumnya.

  6. Untuk Object Key, atur nama file yang akan diunggah. File yang Anda unggah harus sama persis dengan nama ini. Jika objek dengan kunci objek yang sama sudah ada di bucket, Amazon S3 akan mengganti objek yang ada dengan objek yang baru diunggah.

  7. Pilih PUT untuk menentukan bahwa URL yang telah ditandatangani sebelumnya ini akan digunakan untuk mengunggah objek.

  8. Pilih tombol Hasilkan.

  9. Untuk menyalin URL ke clipboard, pilih Salin.

  10. Untuk menggunakan URL ini, Anda dapat mengirim permintaan PUT dengan perintah curl. Sertakan path lengkap ke file Anda dan URL presigned itu sendiri.

    curl -X PUT -T "/path/to/file" "presigned URL"

Anda dapat membuat URL presigned yang dapat melakukan tindakan S3 untuk waktu yang terbatas.

catatan

Jika Anda menggunakan AWS CLI atau AWS SDKs, waktu kedaluwarsa untuk presigned URLs dapat diatur setinggi 7 hari. Untuk informasi selengkapnya, lihat Waktu kedaluwarsa untuk presigned. URLs

Python

Skrip Python berikut menghasilkan URL yang PUT telah ditetapkan sebelumnya untuk mengunggah objek ke bucket tujuan umum S3.

  1. Salin isi skrip dan simpan sebagai file “put-only-url.py”. Untuk menggunakan contoh berikut, ganti user input placeholders dengan informasi Anda sendiri (seperti nama file Anda).

    import argparse import boto3 from botocore.exceptions import ClientError def generate_presigned_url(s3_client, client_method, method_parameters, expires_in): """ Generate a presigned Amazon S3 URL that can be used to perform an action. :param s3_client: A Boto3 Amazon S3 client. :param client_method: The name of the client method that the URL performs. :param method_parameters: The parameters of the specified client method. :param expires_in: The number of seconds the presigned URL is valid for. :return: The presigned URL. """ try: url = s3_client.generate_presigned_url( ClientMethod=client_method, Params=method_parameters, ExpiresIn=expires_in ) except ClientError: print(f"Couldn't get a presigned URL for client method '{client_method}'.") raise return url def main(): parser = argparse.ArgumentParser() parser.add_argument("bucket", help="The name of the bucket.") parser.add_argument( "key", help="The key (path and filename) in the S3 bucket.", ) parser.add_argument( "--region", help="The AWS region where the bucket is located.", default="us-east-1" ) parser.add_argument( "--content-type", help="The content type of the file to upload.", default="application/octet-stream" ) args = parser.parse_args() # Create S3 client with explicit region configuration s3_client = boto3.client("s3", region_name=args.region) # Optionally set signature version if needed for older S3 regions # s3_client.meta.config.signature_version = 's3v4' # The presigned URL is specified to expire in 1000 seconds url = generate_presigned_url( s3_client, "put_object", { "Bucket": args.bucket, "Key": args.key, "ContentType": args.content_type # Specify content type }, 1000 ) print(f"Generated PUT presigned URL: {url}") if __name__ == "__main__": main()
  2. Untuk menghasilkan URL yang PUT telah ditetapkan sebelumnya untuk mengunggah file, jalankan skrip berikut dengan nama bucket dan jalur objek yang diinginkan.

    Perintah berikut menggunakan nilai contoh. Ganti user input placeholders dengan informasi Anda sendiri.

    python put-only-url.py amzn-s3-demo-bucket <object-path> --region us-east-1 --content-type application/octet-stream

    Script akan menampilkan URL PUT presigned:

    Generated PUT presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWS AccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
  3. Anda sekarang dapat mengunggah file menggunakan URL presigned yang dihasilkan dengan curl. Pastikan untuk menyertakan jenis konten yang sama yang digunakan saat membuat URL:

    curl -X PUT -T "path/to/your/local/file" -H "Content-Type: application/octet-stream" "generated-presigned-url"

    Jika Anda menentukan jenis konten yang berbeda saat membuat URL, pastikan untuk menggunakan jenis konten yang sama dalam perintah curl.

Untuk lebih banyak contoh penggunaan AWS SDKs untuk menghasilkan URL yang telah ditetapkan sebelumnya untuk mengunggah objek, lihat Membuat URL yang telah ditetapkan sebelumnya untuk Amazon S3 menggunakan SDK. AWS

Memecahkan masalah kesalahan SignatureDoesNotMatch

Jika Anda mengalami SignatureDoesNotMatch kesalahan saat menggunakan presigned URLs, periksa hal berikut:

  • Verifikasi waktu sistem Anda disinkronkan dengan server waktu yang andal

  • Pastikan Anda menggunakan URL persis seperti yang dihasilkan, tanpa modifikasi apa pun

  • Periksa apakah URL telah kedaluwarsa dan buat yang baru jika diperlukan

  • Pastikan jenis konten dalam permintaan upload Anda cocok dengan jenis konten yang ditentukan saat membuat URL

  • Konfirmasikan bahwa Anda menggunakan wilayah yang benar untuk bucket

  • Saat menggunakan curl, lampirkan URL dalam tanda kutip untuk menangani karakter khusus dengan benar