Saya mendapatkan kesalahan AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
ketika saya mencoba mengunggah file ke ember S3 di wilayah Frankfurt baru. Semua berfungsi dengan baik dengan US Standard
wilayah.
Naskah:
backup_file = '/media/db-backup_for_dev/2014-10-23_02-00-07/slave_dump.sql.gz'
s3 = AWS::S3.new(
access_key_id: AMAZONS3['access_key_id'],
secret_access_key: AMAZONS3['secret_access_key']
)
s3_bucket = s3.buckets['test-frankfurt']
# Folder and file name
s3_name = "database-backups-last20days/#{File.basename(File.dirname(backup_file))}_#{File.basename(backup_file)}"
file_obj = s3_bucket.objects[s3_name]
file_obj.write(file: backup_file)
aws-sdk (1.56.0)
Bagaimana memperbaikinya?
Terima kasih.
Jawaban:
AWS4-HMAC-SHA256, juga dikenal sebagai Signature Version 4, ("V4") adalah salah satu dari dua skema otentikasi yang didukung oleh S3.
Semua wilayah mendukung V4, tetapi AS-Standar¹, dan banyak - tetapi tidak semua - wilayah lain, juga mendukung yang lain, skema yang lebih lama, Signature Version 2 ("V2").
Menurut http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html ... daerah S3 baru yang digunakan setelah Januari, 2014 hanya akan mendukung V4.
Karena Frankfurt diperkenalkan pada akhir 2014, itu tidak mendukung V2, yang merupakan kesalahan ini menyarankan Anda gunakan.
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html menjelaskan cara mengaktifkan V4 di berbagai SDK, dengan asumsi Anda menggunakan SDK yang memiliki kemampuan itu.
Saya berspekulasi bahwa beberapa versi SDK yang lebih lama mungkin tidak mendukung opsi ini, jadi jika hal di atas tidak membantu, Anda mungkin memerlukan rilis SDK yang Anda gunakan.
¹
US Standard
adalah nama lama untuk penyebaran regional S3 yang berbasis dius-east-1
wilayah tersebut. Sejak saat jawaban ini awalnya ditulis, "Amazon S3 mengubah nama Wilayah Standar AS menjadi Wilayah Timur AS (N. Virginia) agar konsisten dengan konvensi penamaan wilayah AWS." Untuk semua tujuan praktis, itu hanya perubahan dalam penamaan.sumber
AWS4-HMAC-SHA256
menerapkan: github.com/s3tools/s3cmd/issues/402Dengan simpul, coba
sumber
Anda harus menetapkan
signatureVersion: 'v4'
diconfig
untuk menggunakan versi tanda baru:Bekerja untuk
JS
SDK.sumber
Untuk orang yang menggunakan
boto3
(Python SDK
) gunakan kode di bawah inisumber
AuthorizationQueryParametersErrorError parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'us-east-2
Jadi saya menambahkanregion_name='us-east-2'
kode di atasMasalah serupa dengan PHP SDK, ini berfungsi:
Bit penting adalah
signature
danregion
sumber
Saya telah menggunakan Django, dan saya harus menambahkan variabel konfigurasi tambahan ini untuk membuatnya berfungsi. (selain pengaturan yang disebutkan dalam https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html ).
Atau sebelumnya ke boto3 versi 1.4.4:
sumber
Di Jawa saya harus mengatur properti
dan tambahkan region ke instance s3Client.
sumber
Dengan boto3, ini adalah kodenya:
atau
sumber
Untuk thumbor-aws, yang menggunakan konfigurasi boto, saya harus meletakkan ini ke
$AWS_CONFIG_FILE
Jadi apapun yang digunakan boto langsung tanpa perubahan, ini mungkin bermanfaat
sumber
ini juga menghemat waktu saya setelah berselancar selama 24 jam ..
sumber
Untuk Android SDK, setEndpoint menyelesaikan masalah, meskipun sudah usang.
sumber
Pada dasarnya kesalahannya adalah karena saya menggunakan aws-sdk versi lama dan saya memperbarui versi sehingga kesalahan ini terjadi.
dalam kasus saya dengan simpul js yang saya gunakan
signatureVersion
di objek parmas seperti ini:Lalu saya menaruh tanda tangan dari objek params dan bekerja seperti pesona:
sumber
Periksa AWS S3 Bucket Region Anda dan Pass Region yang tepat dalam Permintaan Koneksi.
Di My Senario saya telah menetapkan ' APSouth1 ' untuk Asia Pasifik (Mumbai)
sumber
Untuk Boto3, gunakan kode ini.
sumber
Dalam kasus saya, jenis permintaan salah. Saya menggunakan GET (bisu) Pasti PUT.
sumber
Kadang versi default tidak akan diperbarui. Tambahkan perintah ini
di
settings.py
sumber
Coba kombinasi ini.
sumber
Kode untuk Flask (boto3)
Jangan lupa untuk mengimpor Config. Juga Jika Anda memiliki kelas konfigurasi Anda sendiri, maka ubah namanya.
sumber