ASP.NET Core 2 Web API AWS .NET SDK S3访问被拒绝

时间:2018-03-12 21:23:37

标签: .net amazon-s3 asp.net-core aws-sdk aws-sdk-net

我在Windows笔记本电脑上使用.NET Core 2开发web api。我试图访问我的S3存储桶并收到“拒绝访问”错误。

有趣的是它适用于AWS CLI。

我的appSettings.Development.json文件:

"AWS": {
    "Profile": "my-profile",
    "Region": "us-east-1"
 }

Startup.cs文件:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    var options = Configuration.GetAWSOptions();
    services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
    services.AddAWSService<IAmazonS3>();
}

BucketController.cs文件:

public async Task<IEnumerable<string>> Get()
{
    // List all objects
    ListObjectsRequest listRequest = new ListObjectsRequest
    {
        BucketName = "shel-bucket"
    };

    ListObjectsResponse listResponse;
    do
    {
        // Get a list of objects
        listResponse = await _client.ListObjectsAsync(listRequest);
        foreach (S3Object obj in listResponse.S3Objects)
        {
            Console.WriteLine("Object - " + obj.Key);
            Console.WriteLine(" Size - " + obj.Size);
            Console.WriteLine(" LastModified - " + obj.LastModified);
            Console.WriteLine(" Storage class - " + obj.StorageClass);
        }

        // Set the marker property
        listRequest.Marker = listResponse.NextMarker;
    } while (listResponse.IsTruncated);

    return null;
}

我得到的错误是AmazonS3Exception:Access Denied。

当我从AWS CLI执行此操作时,它可以正常工作。

aws --profile my-profile s3 ls shel-bucket
                              PRE test1/
                              PRE images/
                              PRE projects/
                              PRE test4/

我的凭据和配置文件位于.aws中的默认位置。

4 个答案:

答案 0 :(得分:1)

在您的代码中,尝试将“启动”替换为:

public void ConfigureServices(IServiceCollection services)
{
        services.AddMvc();
        services.AddSingleton<IS3Service, S3Service>();
        services.AddAWSService<IAmazonS3>();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
}

您首先需要安装在Package Manager Console中:

`Install-package AWSSDK.Extensions.NETCORE.Setup`

`Install-package AWSSDK.S3`

然后,您需要在目录中拥有凭据文件:

`C:\Users\username\.aws\credentials`

凭据文件应采用以下格式:

[default]
aws_access_key_id=[Write your access key in here]
aws_secret_access_key=[Write your secret access key in here]
region=[Write your region here]

我在github中上传了一个ASP.NET CORE中针对S3存储桶的基本CRUD示例。

答案 1 :(得分:0)

我尝试了所有这些方法,并且在部署到AWS Lambda时有效,但是从未在本地环境中工作。我通过自己创建一个新的S3Client而不是注入它来解决它:

var S3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);

答案 2 :(得分:0)

检查您对帐户中文件写/读访问的权限,或通过编码尝试操作

CannedACL = S3CannedACL.BucketOwnerFullControl

当我遇到相同的问题时,它解决了我的问题。

答案 3 :(得分:0)

  1. 我已通过以下步骤解决了问题
  2. 转到AWS IAM服务
  3. 选择用户
  4. 点击添加权限
  5. 授予对S3的访问权限,然后立即尝试。