AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
새로운 프랑크푸르트 지역의 S3 버킷에 파일을 업로드하려고 하면 오류가 발생 합니다. 모든 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)
AWS SDK (1.56.0)
고치는 방법?
감사합니다.
답변
서명 버전 4 ( “V4”)라고도하는 AWS4-HMAC-SHA256은 S3에서 지원하는 두 가지 인증 체계 중 하나입니다.
모든 리전은 V4를 지원하지만 US-Standard¹을 지원하지만 다른 리전은 대부분 다른 지역을 지원하며 다른 오래된 구성표 인 서명 버전 2 ( “V2”)도 지원합니다.
http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html … 에 따르면 2014 년 1 월 이후에 배포 된 새로운 S3 리전은 V4 만 지원합니다.
프랑크푸르트는 2014 년 말에 소개되었으므로 V2를 지원하지 않으므로이 오류가 사용 중임을 나타냅니다.
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html 은 해당 기능이있는 SDK를 사용한다고 가정 할 때 다양한 SDK에서 V4를 활성화하는 방법을 설명합니다.
일부 이전 버전의 SDK는이 옵션을 지원하지 않을 수 있으므로 위의 방법으로 도움이되지 않으면 사용중인 최신 SDK 릴리스가 필요할 수 있습니다.
¹ US Standard
는 해당 지역을 기반으로하는 S3 지역 배포의 이전 이름입니다 us-east-1
. 이 답변이 처음 작성된 이후
“Amazon S3는 AWS 표준 명명 규칙과 일치하도록 미국 표준 지역의 이름을 미국 동부 (버지니아 북부) 지역으로 변경했습니다.” 모든 실질적인 목적을 위해, 그것은 이름의 변화 일뿐입니다.
답변
노드로 시도해보십시오
var s3 = new AWS.S3( {
endpoint: 's3-eu-central-1.amazonaws.com',
signatureVersion: 'v4',
region: 'eu-central-1'
} );
답변
당신은 설정해야합니다 signatureVersion: 'v4'
에 config
신규 가입 버전을 사용하려면 :
AWS.config.update({
signatureVersion: 'v4'
});
JS
SDK에서 작동합니다 .
답변
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')
)
답변
PHP SDK와 비슷한 문제로 작동합니다.
$s3Client = S3Client::factory(array('key'=>YOUR_AWS_KEY, 'secret'=>YOUR_AWS_SECRET, 'signature' => 'v4', 'region'=>'eu-central-1'));
중요한 비트는 것입니다 signature
과를region
답변
Django를 사용하고 있으며이 작업을 수행하기 위해 이러한 추가 구성 변수를 추가해야했습니다. (설정에 추가로 언급 https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html ).
AWS_S3_REGION_NAME = "ap-south-1"
또는 boto3 버전 1.4.4 이전 :
AWS_S3_REGION_NAME = "ap-south-1"
AWS_S3_SIGNATURE_VERSION = "s3v4"
답변
Java에서는 속성을 설정해야했습니다.
System.setProperty(SDKGlobalConfiguration.ENFORCE_S3_SIGV4_SYSTEM_PROPERTY, "true")
s3Client 인스턴스에 영역을 추가하십시오.
s3Client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1))
