web-dev-qa-db-ja.com

指定した認証メカニズムはサポートされていません。 AWS4-HMAC-SHA256を使用してください

新しいフランクフルト地域のS3バケットにファイルをアップロードしようとすると、エラーAWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.が表示されます。すべてが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)

修正方法

ありがとうございました。

101
Alexey

AWS4-HMAC-SHA256は、署名バージョン4( "V4")とも呼ばれ、S3でサポートされている2つの認証スキームの1つです。

すべてのリージョンは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でV4を有効にする方法を説明しています(その機能を備えたSDKを使用している場合)。

一部の古いバージョンのSDKはこのオプションをサポートしていない可能性があるため、上記の方法で解決しない場合は、使用しているSDKの新しいリリースが必要になる可能性があります。


¹US Standardは、us-east-1リージョンに基づくS3リージョン展開の以前の名前です。この回答が最初に書かれた時から "Amazon S3は、AWSの地域の命名規則と一致するように、US Standard RegionをUS East(N. Virginia)Regionに改名しました。 すべての実用的な目的のために、名前の変更のみです。

136

ノードで、試してください

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

新しい変数バージョンを使用するには、configsignatureVersion: 'v4'を設定する必要があります。

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

JS SDKで機能します。

25
Denis Rizun

boto3Python 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')
)
18
Penkey Suresh

PHP SDKの同様の問題、これは機能します:

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

重要なビットはsignatureregionです

11
Pascal

私は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"
5
SuperNova

Javaでプロパティを設定する必要がありました

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

領域をs3Clientインスタンスに追加します。

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

Boto configを使用したthumb-awsの場合、これを$AWS_CONFIG_FILEに配置する必要がありました

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

そのため、ボトを変更せずに直接使用したものはすべて、これが役立つ場合があります

2
higuita

Boto3では、これがコードです:

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

そして

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

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");
1
Ian Darke

いつかデフォルトバージョンは更新されません。このコマンドを追加

AWS_S3_SIGNATURE_VERSION = "s3v4"

settings.py

0
gokul krishna

基本的にエラーは、古いバージョンのaws-sdkを使用していて、バージョンを更新してこのエラーが発生したためです。

私の場合、ノードjsでは、次のようにparmasオブジェクトでsignatureVersionを使用していました。

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'
});
0
Salahudin Malik