Typescript S3使用为S3构建的预签名URL将对象放入CloudFront会导致错误

Typescript S3使用为S3构建的预签名URL将对象放入CloudFront会导致错误,typescript,amazon-web-services,go,amazon-s3,amazon-cloudfront,Typescript,Amazon Web Services,Go,Amazon S3,Amazon Cloudfront,在我的服务器中,我构建了一个预先签名的S3 URL,如下所示: // 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"

在我的服务器中,我构建了一个预先签名的S3 URL,如下所示:

// 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 {
    // ...
}
在浏览器中,我使用预先指定的URL对S3进行
PutObject
调用,如下所示(注意,我将
redact.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查询参数签名 查询字符串参数或授权标头应为 指定授权AWS 编校=编校+编校/编校=”


有什么想法吗?

使用获取请求中需要包含的适当标题,然后在从javascript发送put请求时,确保使用这些标题,可能还会删除任何其他可能由您使用的js LIB设置但与aws s3 put请求无关的标题。当使用这种方法,因此我得到了相同的错误。我相信你正在尝试做一些不受支持的事情,但是你大量编辑的错误消息使其难以精确定位。签名的URL是否包含
签名
X-Amz-Signature
?还要确认你自己没有发送
授权
标题。我已经确认未设置授权标头。我正在采取措施防止出现这种情况,因为这是我以前处理过的问题,所以这不是问题所在。也许你是对的,它可能不受支持。但是,如果你可以执行GET/HEAD/OPTIONS,我不明白为什么,但是即使你启用了所有这些选项,你也不能执行POST/PUTCloudFront行为中的方法,然后出现了一些不一致的情况。同样的问题,问题是我意外地在请求中添加了另一个授权头…使用来获取需要包含在请求中的正确头,然后在从javascript发送put请求时,确保使用这些头,可能是这样的同时删除可能由您使用的任何js LIB设置但与aws s3 put请求无关的任何其他标头。使用该方法时,我没有返回任何标头,因此我会收到相同的错误。我相信您正在尝试执行一些不受支持的操作,但您大量编辑的错误消息很难精确定位。签名的URL包含
Signature
X-Amz-Signature
?还要确认您自己没有发送
授权
头。我已经确认没有设置授权头。我正在做一些事情来防止这样做,特别是因为这是我以前处理过的问题,所以这不是这里的问题。也许您没有是的,它可能不受支持。但是,我不明白为什么,如果你可以执行GET/HEAD/OPTIONS,但是你不能执行POST/PUT,即使你在CloudFront行为中启用了所有这些方法,那么那里有些不一致。同样的问题,问题是我在请求中意外地使用了另一个授权头。。。。