Веб-API ASP.NET Core 2 AWS .NET SDK S3 Доступ запрещен

Я разрабатываю веб-API с использованием.NET Core 2 на ноутбуке с Windows. Я пытаюсь получить доступ к своей корзине S3 и получаю сообщение об ошибке "Отказано в доступе".

Интересно, что он работает с CLI AWS.

Мой файл 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: доступ запрещен.

Когда я делаю это из интерфейса командной строки AWS, это работает.

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

Мои учетные данные и файлы конфигурации находятся в папке по умолчанию в.aws.

2 ответа

В своем коде попробуйте заменить ваш запуск:

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 пример базового CRUD в ASP.NET CORE для корзин S3.

Проверьте свои разрешения на доступ к записи / чтению файла в своей учетной записи или попробуйте через кодирование

CannedACL = S3CannedACL.BucketOwnerFullControl

Это решило мою проблему, когда я столкнулся с той же проблемой.

  1. Я решил с помощью следующих шагов
  2. Сервис Goto AWS IAM
  3. Выберите пользователей
  4. Нажмите Добавить разрешения.
  5. Дайте доступ к S3 и попробуйте сейчас.

Я попробовал все это, и это работало при развертывании на AWS Lambda, но никогда не работало в моей локальной среде. Я решил это, создав новый S3Client самостоятельно, а не вводя его:

var S3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);
Другие вопросы по тегам