如何修复aws S3上的访问被拒绝问题,在端口443上部署了API,试图读取s3对象

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

我在EC2实例上部署了Restful API(asp .net 4.5.2),EC2实例具有访问S3存储桶的IAM角色(对存储桶的完全访问权限)。现在,当我尝试读取存储桶中的对象时,它会返回拒绝访问(403)作为响应,当我尝试通过预先签名的URL上传任何附件时,它会在我的API部署时返回AWS签名不匹配的响应在端口443上但是当API部署在任何其他端口(如80/81)上并且可以通过aws-cli访问时,它工作正常。知道为什么会这样吗?

我的代码片段用于读取对象:

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);
            }

}
c# amazon-web-services amazon-s3 access-denied
2个回答
0
投票

这可能是与EC2实例上的安全组相关的问题。你必须打开端口443(HTTPS)。如果这不起作用,则问题与另一个应用程序正在使用的端口有关。检查使用端口443的所有服务。


0
投票

我需要在实例化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);
        }

}
© www.soinside.com 2019 - 2024. All rights reserved.