Подпись не соответствует 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 на моем сервере.

1 ответ

Решение

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

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

Другие вопросы по тегам