আপনি সরবরাহ করেছেন অনুমোদন প্রক্রিয়া সমর্থিত নয়। দয়া করে AWS4-HMAC-SHA256 ব্যবহার করুন


130

আমি AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.নতুন ফ্র্যাঙ্কফুর্ট অঞ্চলে এস 3 বালতিতে ফাইল আপলোড করার চেষ্টা করার সময় আমি একটি ত্রুটি পেয়েছি। সমস্ত US Standardঅঞ্চলের সাথে সঠিকভাবে কাজ করে ।

লিপি:

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)

অ্যাডস-এসডিকে (1.56.0)

কিভাবে ঠিক হবে এটা?

ধন্যবাদ.


1
এই উত্তর আমার সমস্যার সমাধান stackoverflow.com/questions/34483795/...
Bahadir Tasdemir

উত্তর:


151

AWS4-HMAC-SHA256, স্বাক্ষর সংস্করণ 4 নামেও পরিচিত, ("ভি 4") এস 3 দ্বারা সমর্থিত দুটি প্রমাণীকরণ স্কিমগুলির মধ্যে একটি।

সমস্ত অঞ্চল V4 সমর্থন করে, তবে মার্কিন-মানক ¹, এবং অনেকগুলি - তবে সমস্ত নয় - অন্যান্য অঞ্চলগুলিও অন্যান্য, পুরানো স্কিম, স্বাক্ষর সংস্করণ 2 ("ভি 2") সমর্থন করে।

Http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html এর মতে ... জানুয়ারী, 2014 এর পরে মোতায়েন করা নতুন এস 3 অঞ্চল কেবলমাত্র ভি 4 সমর্থন করবে।

যেহেতু ফ্র্যাঙ্কফুর্ট 2014 সালের শেষদিকে প্রবর্তিত হয়েছিল, এটি ভি 2 সমর্থন করে না, যা এই ত্রুটিটি আপনাকে ব্যবহার করার পরামর্শ দেয়।

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html বিভিন্ন SDK- এ কীভাবে V4 সক্ষম করবেন তা ব্যাখ্যা করে, ধরে নিই যে আপনি এমন কোনও SDK ব্যবহার করছেন যা তার সক্ষমতা রয়েছে।

আমি অনুমান করব যে SDKs এর কিছু পুরানো সংস্করণ এই বিকল্পটিকে সমর্থন করবে না, সুতরাং উপরের অংশটি যদি সহায়তা না করে তবে আপনার ব্যবহৃত এসডিকে নতুন রিলিজের প্রয়োজন হতে পারে।


¹ US Standardএস 3 আঞ্চলিক স্থাপনার যে ভিত্তিক হয় জন্য সাবেক নাম us-east-1অঞ্চল। যেহেতু এই উত্তরটি প্রাথমিকভাবে লেখা হয়েছিল, সেই সময় থেকে "অ্যামাজন এস 3 ইউএস স্ট্যান্ডার্ড অঞ্চলটির নাম পরিবর্তন করে ইউএস পূর্ব (এন ভার্জিনিয়া) অঞ্চল এডাব্লুএস আঞ্চলিক নামকরণ কনভেনশনগুলির সাথে সামঞ্জস্য রেখেছিল।" সমস্ত ব্যবহারিক উদ্দেশ্যে, এটি নামকরণের পরিবর্তন।


এই স্টাম্পগুলি s3cmd-1.5.0-0.alpha3.fc20.noarch যা ফেডোরা 20 এর সাথে আসে And এবং স্পষ্টতই 1.5.0-rc1 স্টম্পসও আপাতত সর্বশেষ।
ডেভিড টোনহোফার

1
@ ডেভিডটনহোফার যা সঠিক মনে হয় দেখে মনে হচ্ছে যে এস 3 সিএমডি বিকাশকারীরা AWS4-HMAC-SHA256এখনও কার্যকর করেনি: github.com/s3tools/s3cmd/issues/402
মাইকেল - sqlbot

2
@ "মাইকেল - স্ক্যালবট" ভালভাবে আমি আপাতত "আরএসসিএস্লি" এ চলেছি। তাড়াহুড়োয়দের জন্য: ইয়াম ইনস্টল পাইথন-পিপ; পাইপ ইনস্টল awscli; aws কনফিগার; aws --region = eu-Central-1 s3 ls s3: // U বুকেট ইত্যাদি ...
ডেভিড টোনহোফার

aws-sdk v2 AWS4-HMAC-SHA256 "V4" প্রমাণীকরণকে সুন্দরভাবে সমর্থন করেছে বলে মনে হচ্ছে (সম্পর্কিত সমস্যা )
Jeewes

thnx .. এটি আমার জন্য দরকারী
মণীশ ভাদের

68

নোড সহ, চেষ্টা করুন

var s3 = new AWS.S3( {
    endpoint: 's3-eu-central-1.amazonaws.com',
    signatureVersion: 'v4',
    region: 'eu-central-1'
} );

34

আপনি সেট করা উচিত signatureVersion: 'v4'মধ্যে configনতুন সাইন সংস্করণ ব্যবহার করার জন্য:

AWS.config.update({
    signatureVersion: 'v4'
});

JSএসডিকে জন্য কাজ করে ।


3
আমার দিন বাঁচা! এই বিকল্পটি কেন বেশি প্রচারিত হয় না তা নিশ্চিত নন
আন্দ্রে ওয়ার্ল্যাং

26

ব্যবহার মানুষের জন্য boto3( Python SDK) কোড নিচে ব্যবহার

from botocore.client import Config


s3 = boto3.resource(
    's3',
    aws_access_key_id='xxxxxx',
    aws_secret_access_key='xxxxxx',
    config=Config(signature_version='s3v4')
)

4
আমি ত্রুটি AuthorizationQueryParametersErrorError parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'us-east-2 পেয়েছি তাই আমি region_name='us-east-2' উপরের
কোডটিতে

13

পিএইচপি এসডিকে এই জাতীয় সমস্যা, এটি কাজ করে:

$s3Client = S3Client::factory(array('key'=>YOUR_AWS_KEY, 'secret'=>YOUR_AWS_SECRET, 'signature' => 'v4', 'region'=>'eu-central-1'));

গুরুত্বপূর্ণ বিটটি হ'ল signatureএবংregion


অঞ্চল নির্দিষ্ট করা প্রয়োজন?
চিরাগ মেহতা

13

আমি জ্যাঙ্গো ব্যবহার করছি এবং এই কাজটি করার জন্য আমাকে এই অতিরিক্ত কনফিগার ভেরিয়েবলগুলি যুক্ত করতে হয়েছিল। ( https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html এ উল্লিখিত সেটিংস ছাড়াও )।

AWS_S3_REGION_NAME = "ap-south-1"

বা বোটো 3 সংস্করণে পূর্ববর্তী 1.4.4:

AWS_S3_REGION_NAME = "ap-south-1"

AWS_S3_SIGNATURE_VERSION = "s3v4"

3

জাভাতে আমাকে একটি সম্পত্তি সেট করতে হয়েছিল

System.setProperty(SDKGlobalConfiguration.ENFORCE_S3_SIGV4_SYSTEM_PROPERTY, "true")

এবং অঞ্চলটিকে এস 3 ক্লায়েন্ট উদাহরণে যুক্ত করুন।

s3Client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1))

3

বোটো 3 সহ, এটি কোড:

s3_client = boto3.resource('s3', region_name='eu-central-1')

অথবা

s3_client = boto3.client('s3', region_name='eu-central-1')

আপনি s3_client দুইবার আছে?
এমএইচ

2

থাম্ব-আউসের জন্য, যে বোটো কনফিগার ব্যবহার করেছিল, আমি এটিতে রেখেছি $AWS_CONFIG_FILE

[default]
aws_access_key_id = (your ID)
aws_secret_access_key = (your secret key)
s3 =
    signature_version = s3

সুতরাং যে কোনও কিছু পরিবর্তন ছাড়াই সরাসরি বোটো ব্যবহার করেছিল, এটি কার্যকর হতে পারে


2
AWS_S3_REGION_NAME = "ap-south-1"

AWS_S3_SIGNATURE_VERSION = "s3v4"

এটি 24 ঘন্টা সার্ফ করার পরেও আমার সময় সাশ্রয় করেছে ..


এটি দুর্দান্ত কাজ করে, কেবলমাত্র অঞ্চলটির নাম আপনার নিজের অনুসারে পরিবর্তন করতে হবে যদি এটি "এপি-দক্ষিণ-১" না হয়
দেবমান

কোন কোডিং পরিবর্তন প্রয়োজন! এই দুটি
এনভ ভার্স

1

অ্যান্ড্রয়েড এসডিকে জন্য, সেটঅ্যান্ডপয়েন্টটি সমস্যাটি সমাধান করে, যদিও এটি অবমূল্যায়ন করা হয়েছে।

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                context, "identityPoolId", Regions.US_EAST_1);
AmazonS3 s3 = new AmazonS3Client(credentialsProvider);
s3.setEndpoint("s3.us-east-2.amazonaws.com");

1

মূলত ত্রুটিটি কারণ আমি আউস-এসডিকে পুরানো সংস্করণ ব্যবহার করছিলাম এবং আমি এই সংস্করণটি আপডেট করেছি যাতে এই ত্রুটি ঘটে।

নোড signatureVersionজেএস নিয়ে আমার ক্ষেত্রে আমি পরমাস অবজেক্টে এভাবে ব্যবহার করছিলাম:

const AWS_S3 = new AWS.S3({
  params: {
    Bucket: process.env.AWS_S3_BUCKET,
    signatureVersion: 'v4',
    region: process.env.AWS_S3_REGION
  }
});

তারপরে আমি স্বাক্ষরগুলি প্যারামের অবজেক্টের বাইরে রেখে দিলাম এবং কবজির মতো কাজ করেছি:

const AWS_S3 = new AWS.S3({
  params: {
    Bucket: process.env.AWS_S3_BUCKET,
    region: process.env.AWS_S3_REGION
  },
  signatureVersion: 'v4'
});

1

আপনার AWS S3 বালতি অঞ্চলটি পরীক্ষা করুন এবং সংযোগের অনুরোধে যথাযথ অঞ্চলটি পাস করুন।

আমার সেনারিওতে আমি এশিয়া প্যাসিফিক (মুম্বাই) এর জন্য ' এপিউসথ 1 ' সেট করেছি

using (var client = new AmazonS3Client(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.APSouth1))
{
    GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
    {
        BucketName = bucketName,
        Key = keyName,
        Expires = DateTime.Now.AddMinutes(50),
    };
    urlString = client.GetPreSignedURL(request1);
}

1

বোটো 3 এর জন্য, এই কোডটি ব্যবহার করুন।

import boto3
from botocore.client import Config


s3 = boto3.resource('s3',
        aws_access_key_id='xxxxxx',
        aws_secret_access_key='xxxxxx',
        region_name='us-south-1',
        config=Config(signature_version='s3v4')
        )

1

আমার ক্ষেত্রে, অনুরোধের ধরনটি ভুল ছিল। আমি জিইটি (বোবা) ব্যবহার করছিলাম এটি অবশ্যই পুট হবে।


আমার দিন বাঁচিয়েছে, আমার ক্ষেত্রে আমি পোস্ট ব্যবহার করছিলাম।
শহীদ কামাল

0

কখনও কখনও ডিফল্ট সংস্করণ আপডেট হবে না। এই কমান্ড যুক্ত করুন

AWS_S3_SIGNATURE_VERSION = "s3v4"

ভিতরে settings.py


0

এই সমন্বয় চেষ্টা করুন।

const s3 = new AWS.S3({
  endpoint: 's3-ap-south-1.amazonaws.com',       // Bucket region
  accessKeyId: 'A-----------------U',
  secretAccessKey: 'k------ja----------------soGp',
  Bucket: 'bucket_name',
  useAccelerateEndpoint: true,
  signatureVersion: 'v4',
  region: 'ap-south-1'             // Bucket region
});

0

ফ্লাস্কের জন্য কোড (বোটো 3)

কনফিগার আমদানি করতে ভুলবেন না। এছাড়াও যদি আপনার নিজের কনফিগার ক্লাস থাকে তবে এর নামটি পরিবর্তন করুন।

from botocore.client import Config

s3 = boto3.client('s3',config=Config(signature_version='s3v4'),region_name=app.config["AWS_REGION"],aws_access_key_id=app.config['AWS_ACCESS_KEY'], aws_secret_access_key=app.config['AWS_SECRET_KEY'])
s3.upload_fileobj(file,app.config["AWS_BUCKET_NAME"],file.filename)
url = s3.generate_presigned_url('get_object', Params = {'Bucket':app.config["AWS_BUCKET_NAME"] , 'Key': file.filename}, ExpiresIn = 10000)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.