158

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

22 に答える 22

39

新しい署名バージョンを使用するsignatureVersion: 'v4'には、次のように設定する必要があります。config

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

SDKで動作しJSます。

于 2015-03-24T13:28:40.920 に答える
33

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')
)
于 2016-12-22T07:06:09.487 に答える
15

PHP SDK の同様の問題、これは動作します:

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

重要な部分はsignatureとですregion

于 2015-01-30T14:41:40.617 に答える
3

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

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

リージョンを s3Client インスタンスに追加します。

s3Client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1))
于 2016-11-12T00:04:03.137 に答える
0

私は 3 日間立ち往生しましたが、最終的に、大量のブログと回答を読んだ後、Amazon AWS S3 バケットを構成することができました.

AWS側

私はあなたがすでに持っていると仮定しています

  1. s3-bucket を作成しました
  2. IAM でユーザーを作成しました

手順

  1. CORS 設定の構成

    バケット > 権限 > CORS 構成

    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>```
    
    
  2. バケット ポリシーを生成する

バケット > 権限 > バケット ポリシー

これに似ているはずです

 {
     "Version": "2012-10-17",
     "Id": "Policy1602480700663",
     "Statement": [
         {
             "Sid": "Stmt1602480694902",
             "Effect": "Allow",
             "Principal": "*",
             "Action": "s3:GetObject",
             "Resource": "arn:aws:s3:::harshit-portfolio-bucket/*"
         }
     ]
 }
PS: Bucket policy should say `public` after this 
  1. アクセス制御リストの構成

バケット > 権限 > アクセス制御リスト

パブリックアクセスを与える

PS: アクセス制御リストはpublicこの後に言うべきです

  1. 公開アクセスのブロックを解除

バケット > 権限 > パブリック アクセスのブロック

すべてのオプションを編集してオフにする

**ちなみに、django で作業している場合settings.pyは、プロジェクトのファイルに次の行を追加してください **

#S3 BUCKETS CONFIG

AWS_ACCESS_KEY_ID = '****not to be shared*****'
AWS_SECRET_ACCESS_KEY = '*****not to be shared******'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'

AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

# look for files first in aws 
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

# In India these settings work
AWS_S3_REGION_NAME = "ap-south-1"
AWS_S3_SIGNATURE_VERSION = "s3v4"

于 2020-10-13T10:54:04.280 に答える