使用预签名 URL 和标头将文件 PUT 到 S3:x-amz-checksum-sha256 返回 403

问题描述 投票:0回答:0

我们正在尝试使用 SHA256 校验和对 S3 PUT 操作实施对象完整性检查。对于分段上传请求,如果我们在 CompleteMultipartUploadAsync 方法中传递 SHA256 校验和,则此功能似乎有效

 var completeRequest = new CompleteMultipartUploadRequest
        {
            BucketName = bucketName,
            Key = key,
            UploadId = uploadId,
            ChecksumSHA256 = sha56ofFile
        };
completeRequest.AddPartETags(parts.Select(p => new PartETag(p.PartNumber, p.ETag)).ToArray());
await amazonS3Client.CompleteMultipartUploadAsync(completeRequest);

我们使用以下代码上传小文件

public async Task SimplePutAsync(string presignedURL , ByteArrayContent content , string sha56Value)
    {
        var  httpClient = new HttpClient();
        content.Headers.Add("x-amz-checksum-sha256", sha56Value);
        var response =  await httpClient.PutAsync(presignedURL, content);
        response.EnsureSuccessStatusCode();
    }

如果我们指定标头:“x-amz-checksum-sha256”和 SHA256 值,我们会得到错误:403 Forbidden

还找到了下面AWS rePost的帖子

https://repost.aws/questions/QUgivVIUn6QrGVpETR1wQ4KQ/s-3-sha-256-checksum-for-presigned-url-in-file-upload

它提到了将校验和标头添加到预签名 url 的方法,但是在 .NET SDK 的 AmazonS3Client 类中,

  1. 我找不到 generate_presigned_post 的等效方法
  2. GetPreSignedUrlRequest 中的元数据属性似乎是只读的。所以不能在 GetPreSignedURL 方法中使用它
  3. GeneratePreSignedURL 中有一个名为additionalProperties 的参数,但没有适当的文档

感谢任何帮助

.net amazon-s3 put sha256 pre-signed-url
© www.soinside.com 2019 - 2024. All rights reserved.