제공 한 인증이 지원되지 않습니다. AWS4-HMAC-SHA256을 사용하십시오.
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를 지원하지만 미국 표준 ¹을 지원하지만 다른 리전은 전부는 대부분의 다른 리전은 이전 버전 인 버전 서명 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'
});
JSSDK에서 작동합니다 .
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"
AWS_S3_SIGNATURE_VERSION = "s3v4"
Java에서는 속성을 설정해야했습니다.
System.setProperty(SDKGlobalConfiguration.ENFORCE_S3_SIGV4_SYSTEM_PROPERTY, "true")
s3Client 인스턴스에 지역을 추가합니다.
s3Client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1))
boto3의 코드는 다음과 같습니다.
s3_client = boto3.resource('s3', region_name='eu-central-1')
또는
s3_client = boto3.client('s3', region_name='eu-central-1')
boto 구성을 사용하는 thumbor-aws의 경우 이것을 $AWS_CONFIG_FILE
[default]
aws_access_key_id = (your ID)
aws_secret_access_key = (your secret key)
s3 =
signature_version = s3
따라서 boto를 변경하지 않고 직접 사용한 모든 것이 유용 할 수 있습니다.
Android SDK의 경우 setEndpoint는 더 이상 사용되지 않지만 문제를 해결합니다.
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
context, "identityPoolId", Regions.US_EAST_1);
AmazonS3 s3 = new AmazonS3Client(credentialsProvider);
s3.setEndpoint("s3.us-east-2.amazonaws.com");
때때로 기본 버전이 업데이트되지 않습니다. 이 명령 추가
AWS_S3_SIGNATURE_VERSION = "s3v4"
에 settings.py
기본적으로 오류는 이전 버전의 aws-sdk를 사용하고 있었기 때문에 버전을 업데이트하여이 오류가 발생했습니다.
내 경우에는 노드 js signatureVersion에서 다음과 같이 parmas 객체에서 사용 했습니다.
const AWS_S3 = new AWS.S3({
params: {
Bucket: process.env.AWS_S3_BUCKET,
signatureVersion: 'v4',
region: process.env.AWS_S3_REGION
}
});
그런 다음 params 객체에서 서명을 넣고 매력처럼 작동했습니다.
const AWS_S3 = new AWS.S3({
params: {
Bucket: process.env.AWS_S3_BUCKET,
region: process.env.AWS_S3_REGION
},
signatureVersion: 'v4'
});
'IT' 카테고리의 다른 글
| Java에서 데이터베이스 연결 닫기 (0) | 2020.08.05 |
|---|---|
| 잘못된 인증서로 https 요청을 수행하는 방법은 무엇입니까? (0) | 2020.08.05 |
| 자바 불변의 컬렉션 (0) | 2020.08.05 |
| 선택하십시오. (0) | 2020.08.05 |
| 라이브러리를 정적으로 링크하도록 gcc에 직접 알리기 (0) | 2020.08.05 |