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

Я разрабатываю веб-API с использованием .NET Core 2 на ноутбуке с Windows. Я пытаюсь получить доступ к своей корзине 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: доступ запрещен.

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

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

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


person CodeWzrd    schedule 12.03.2018    source источник
comment
Это публичное или частное ведро?   -  person marcusturewicz    schedule 13.03.2018
comment
Вы пытались указать ключ доступа и секрет в файле конфигурации, чтобы убедиться, что профиль не импортируется правильно? Ваше ведро в нас-восток-1?   -  person programmerj    schedule 13.03.2018
comment
@ tura08 - Это личное   -  person CodeWzrd    schedule 13.03.2018
comment
Как вы предоставляете свой ключ доступа / секретный ключ?   -  person marcusturewicz    schedule 13.03.2018
comment
@programmerj Итак, я закончил жесткое кодирование учетных данных в самом коде и работает.   -  person CodeWzrd    schedule 13.03.2018
comment
Итак, я закончил жесткое кодирование учетных данных для тестирования и работы. var awsCredentials = новый Amazon.Runtime.BasicAWSCredentials (,); _client = новый Amazon.S3.AmazonS3Client (awsCredentials, Amazon.RegionEndpoint.USEast1); Ключ доступа / секретный ключ хранятся в файле учетных данных в папке .aws. Не уверен, почему его не забирают. Есть ли способ распечатать информацию, полученную с помощью var options = Configuration.GetAWSOptions ()?   -  person CodeWzrd    schedule 13.03.2018
comment
Мне удалось углубиться в объект клиента и увидеть учетные данные. Итак, я обнаружил, что мой домашний каталог, который считается AWS .NET SDK, находится не в том месте, которое используется AWS CLI. Какая-то странная установка с моей рабочей машиной. Как только я скопировал конфигурацию в это другое место, теперь он работает.   -  person CodeWzrd    schedule 13.03.2018


Ответы (4)


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

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.

person Dayán Ruiz    schedule 25.07.2018

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

CannedACL = S3CannedACL.BucketOwnerFullControl

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

person Dennis    schedule 10.01.2019

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

var S3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);
person Ryan Audet    schedule 10.08.2018

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