Подпись не совпадает с ошибкой 403 при подписании URL-адреса через aws-sdk-go

Я выполнил инструкции по этой проблеме https://github.com/aws/aws-sdk-go/issues/467, в котором четко описано, как создать предварительно подписанный URL-адрес для запроса PUT. Цель состоит в том, чтобы указать URL-адрес, чтобы я мог безопасно загружать изображения прямо из браузера.

ключ и секрет - это, конечно, мои текущие учетные данные, которые работают с прямыми запросами PutObject через SDK

creds := credentials.NewStaticCredentials("key", "secret", "")

cfg := aws.NewConfig().WithRegion("us-west-2").WithCredentials(creds)
srv := s3.New(session.New(), cfg)

params := &s3.PutObjectInput{
    Bucket: aws.String("my-bucket"),
    Key:    aws.String("/local/test/filename"), 
}
req, _ := srv.PutObjectRequest(params)
url, err := req.Presign(15 * time.Hour)
if err != nil {
    fmt.Println("error signing request", err)
}

fmt.Println("URL", url)

```

Затем я беру этот URL и делаю запрос на завиток. Я получаю этот ответ

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>SignatureDoesNotMatch</Code>
    <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
    <AWSAccessKeyId>redacted</AWSAccessKeyId>
    <StringToSign>redacted</StringToSign>
    <SignatureProvided>redacted</SignatureProvided>
    <StringToSignBytes>redacted</StringToSignBytes>
    <CanonicalRequest>PUT
/local/test/filename
X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=redacted%2Fus-west-2%2Fs3%2F%20aws4_request&amp;X-Amz-Date=20161129T012909Z&amp;X-Amz-Expires=54000&amp;X-Amz-SignedHeaders=host
host:redacted.s3-us-west-2.amazonaws.com

host
UNSIGNED-PAYLOAD</CanonicalRequest>
    <CanonicalRequestBytes>redacted</CanonicalRequestBytes>
    <RequestId>redacted</RequestId>
    <HostId>redacted</HostId>
</Error>

есть идеи, почему предварительно подписанный URL-адрес предоставляет мне подпись, которая предположительно не совпадает? Опять же, эти же учетные данные в настоящее время работают для прямых команд PutObject на моем сервере.


person Quest    schedule 29.11.2016    source источник


Ответы (1)


моя политика корзины не была настроена должным образом. Мне пришлось связать свой ключ / секрет с политикой IAM и убедиться, что они указаны в разделе «Принципы» политики.

https://aws.amazon.com/blogs/security/iam-policies-and-bucket-policies-and-acls-oh-my-controlling-access-to-s3-resources/

person Quest    schedule 29.11.2016