2016-12-04 2 views
0

У меня возникают проблемы при создании подписанного URL-адреса для public S3 bucket. Я получаю этот вопрос при выполнении запроса PUT:Проблемы с подписями при создании подписанного URL-адреса для S3

<Error><Code>SignatureDoesNotMatch</Code> 
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message> 

Немного информации - я использую:

  • node версия 5.8
  • aws-sdk версия 2.7.10

I используйте aws-sdk следующим образом:

AWS.config.update({ 
    accessKeyId: ACCESS_KEY, 
    secretAccessKey: SECRET_ACCESS_KEY, 
    region: 'eu-west-1' 
}) 
const s3 = new AWS.S3() 

Я сформировать корректную ссылку таким образом:

const params = { 
    Key: FILE_KEY, 
    Bucket: BUCKET_NAME, 
    ContentType: image/jpeg, 
    Expires: 60, 
    ACL: 'public-read', 
    Metadata: { 
    'Cache-Control': 'max-age=31556926' 
    } 
} 

const signedUrl = s3.getSignedUrl('putObject', params) 

Сгенерированный URL выглядит следующим образом:

https://companyxyz.s3-eu-west-1.amazonaws.com/ 
image/5843df4a15c6fccf4501cab9.jpg? 
AWSAccessKeyId=xxxxxxxxxx& 
Content-Type=image%2Fjpeg& 
Expires=1480843142& 
Signature=YvUEGntDLVUUuyVuDMxF5yXXBnI%3D 
&x-amz-acl=public-read& 
x-amz-meta-cache-control=max-age%3D31556926 
+0

проверьте ключи доступа, как показано здесь: http://stackoverflow.com/a/8002444/2383685. Ваш код выглядит отлично. – xShirase

+0

Благодарим за предложение! Я подробно рассмотрел его, но, похоже, он не разрешает мою проблему – nodesto

ответ

0

Я решил проблему путем изменения region. Я создал новое ведро в eu-central-1, и все сработало. Независимо от того, что я не смог создать рабочий подписанный URL-адрес для eu-west-1.

Хотелось бы услышать какие-либо идеи.

0

Это может быть связано с сиг v2 и v4 значи

Из документации здесь: http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html и здесь http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

отмечают, что в сиг v4,

https://s3.amazonaws.com/examplebucket/test.txt 
?X-Amz-Algorithm=AWS4-HMAC-SHA256 
&X-Amz-Credential=<your-access-key-id>/20130721/us-east-1/s3/aws4_request 

Ваш Access- key-id является частью X-Amz-Credential

, а для sig v2

https://elasticmapreduce.amazonaws.com? 
&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE 

AWSAccessKeyId имеет свой собственный параметр.

Ваш пример показывает, что вы используете значи v2

http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html также упоминает, что некоторые регионы не поддерживают значи v2

ЕС (Франкфурт) Регион ЕС (Лондон) Регион

ЕС (Франкфурт) является eu-central-1 , что странно, потому что sig v2 не должен работать в eu-central-1.

Смежные вопросы