[英]How to fix access denied issue on aws S3 with API deployed on port 443 trying to read the s3 objects
我在EC2实例上部署了一个Restful API(asp .net 4.5.2),并且EC2实例具有IAM角色,用于访问S3存储桶(对存储桶的完全访问)。 现在,当我尝试读取存储桶中的对象时,它会返回Access Denied(403)作为响应,而当我尝试通过预签名的URL上传任何附件时,它会在部署我的API时返回AWS签名不匹配在端口443上,但是当API部署在任何其他端口(例如80/81)上并且可以通过aws-cli访问bucket时,它工作正常。 知道为什么会发生吗?
我的用于读取对象的代码段:
using (var s3Client = new AmazonS3Client(bucketRegion))
{
ListObjectsV2Request request = new ListObjectsV2Request
{
BucketName = bucketName,
MaxKeys = 10
};
ListObjectsV2Response response;
response = s3Client.ListObjectsV2Async(request).Result;
// Process the response.
foreach (S3Object entry in response.S3Objects)
{
keyValuePairs.Add(entry.Key, entry.Size);
}
}
我需要在实例化s3Client对象时传递InstanceProfileAWSCredentials配置文件,它解决了我的问题。
var profile = new InstanceProfileAWSCredentials();
using (var s3Client = new AmazonS3Client(profile, bucketRegion))
{
ListObjectsV2Request request = new ListObjectsV2Request
{
BucketName = bucketName,
MaxKeys = 10
};
ListObjectsV2Response response;
response = s3Client.ListObjectsV2Async(request).Result;
// Process the response.
foreach (S3Object entry in response.S3Objects)
{
keyValuePairs.Add(entry.Key, entry.Size);
}
}
这可能是与您的EC2实例上的安全组有关的问题。 您必须打开端口443(HTTPS)。 如果这不起作用,则问题与另一个应用程序正在使用的端口有关。 检查所有使用端口443的服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.