我有一个bucket,我试图从C# SDK应用程序(.Net 4.6.1)上传对象。
这是我的公共访问块:
PublicAccessBlockConfiguration = new PublicAccessBlockConfiguration()
{
IgnorePublicAcls = false,
RestrictPublicBuckets = false,
BlockPublicPolicy = false,
BlockPublicAcls = false
}
存储桶应用了以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Principal": "*",
"Action":[
"s3:*"
],
"Resource":[
"arn:aws:s3:::testbucket2023/*",
"arn:aws:s3:::testbucket2023"
]
}
]
}
调用代码:
var request = new PutObjectRequest()
{
BucketName = @"testbucket2023/testtag",
Key = @"i/file.jpg",
ContentType = contentType,
InputStream = fileData,
CannedACL = S3CannedACL.PublicRead
};
var response = S3Client.PutObject(request);
当我调用PutObject时,我得到这个错误:
{“我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。"}
内部异常:
{“远程服务器返回错误:(403)禁止访问"}
我还需要设置什么才能让它工作?一旦它开始工作,我将把桶锁定到特定的主体。
1条答案
按热度按时间shstlldc1#
AWS SDK使用
ContentType
属性来计算签名。您可以考虑删除该属性,让SDK为您计算它以解决此问题。您可以尝试的另一种方法是检查传递给此属性的值是否与您尝试上载的文件的内容匹配。