На моем сервере я создаю предварительно назначенный URL-адрес S3 следующим образом:
// Initialize a session in us-east-1 that the SDK will use to load
// credentials from the shared credentials file ~/.aws/credentials.
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-east-1")},
)
if err != nil {
// ...
}
// Create S3 service client.
svc := s3.New(sess)
// Create the S3 PutObject request.
resp, _ := svc.PutObjectRequest(&s3.PutObjectInput{
Bucket: aws.String("REDACTED"),
Key: aws.String(key),
})
// Pre-sign the request to get a URL.
url, err := resp.Presign(20 * time.Second)
if err != nil {
// ...
}
В браузере я выполняю PutObject
вызов S3 с использованием предварительно назначенного URL-адреса, например, (обратите внимание, что я изменяюREDACTED.s3.amazonaws.com
URL-адрес https://cdn.REDACTED.com
, который является моей конечной точкой CloudFront:
http.get(`/get-presigned-url`).subscribe(
(url: string) => {
const s3Url = 'https://REDACTED.s3.amazonaws.com/';
const cloudfrontUrl = 'https://cdn.REDACTED.com/';
http.put(url.replace(s3Url, cloudfrontUrl), file).subscribe(...);
}
);
Браузер выдает мне эту ошибку в ответ, 400 неверных запросов:
"InvalidArgument
Разрешен только один механизм аутентификации, должен быть указан только параметр запроса X-Amz-Algorithm, параметр строки запроса Signature или заголовок Authorization. АвторизацияAWS REDACTED = REDACTED + REDACTED / REDACTED = "
Любые идеи, чтодо