Как установить учетные данные в AWS SDK в NET Core?

Я новичок в AWS SDK и пытаюсь следовать AWS документация, но почти ничего не дает о том, что именно мне нужно настроить.

Официальные документы говорят мне добавить это в appsettings.json:

{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  }
}

А затем создайте клиента:

var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();

Это вызывает исключение, сообщающее, что не удается найти учетные данные. Куда мне поместить Api ID и ключ? Что это за профиль?

Пожалуйста, имейте в виду, что у меня нет предпочтений относительно того, как это настроить. Я просто пытаюсь следовать официальной документации для .NET Core, и их единственный пример не работает. Документы, похоже, подразумевают, что я должен заранее знать многие из их условий и настроек или что я переношу существующее приложение и уже все настроено.

Может ли кто-нибудь указать мне, чего не хватает в этом примере, чтобы API правильно подключался к AWS?


person Natan    schedule 27.03.2017    source источник
comment
docs.aws.amazon.com/ toolkit-for-visual-studio / latest / user-guide / Эта ссылка объясняет самое лучшее!   -  person Shiv    schedule 23.08.2018


Ответы (4)


Файл json - это $ "appsettings. {Env.EnvironmentName} .json", поэтому вы должны назвать его appsettings.Development.json и установить переменную среды.

Вы определили свой профиль "local-test-profile" в файле учетных данных AWS.

Должен быть в C: \ Users \ {USERNAME} \. Aws \ credentials

[local-test-profile]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

Если вы не хотите, чтобы он располагался по умолчанию, вы можете установить файл конфигурации json «ProfilesLocation».

person JAZ    schedule 05.04.2017
comment
Спасибо. Нет, я не определял этот профиль, потому что не знал, что должен. Это вообще не ясно в документации. Так что в документации не хватает того, что этот ini-подобный файл с ключом доступа и секретом должен находиться в определенном месте, чтобы его можно было искать. - person Natan; 06.04.2017
comment
Какую папку {USERNAME} следует использовать для веб-приложения? Самый простой способ найти это - я попробовал администратора, пользователя, указанного в диспетчере задач / Details / w3wp.exe - ничего не работает. Это работает на машине разработчика, не может работать в продакшене. Также не удается заставить ProfilesLocation работать в .NET core mvc 2. - person niico; 16.04.2018
comment
Вы не должны быть обвинены, чтобы узнать, как управлять профилями, вам нужно прыгать по 5 различным статьям, пока не дойдете до нужной. У AWS есть документация, но, на мой взгляд, она очень неинтуитивна почти для каждого сервиса. - person Carlos Jimenez Bermudez; 18.12.2020

Возможно, для вас уже слишком поздно, но если вы используете докер или имеете другую среду / настройку, в которой невозможно / легко использовать профили AWS, вы все равно можете использовать переменные среды. Например:

var awsOptions = Configuration.GetAWSOptions();
awsOptions.Credentials = new EnvironmentVariablesAWSCredentials();
services.AddDefaultAWSOptions(awsOptions);
services.AddAWSService<IAmazonS3>();

Затем установите AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY & AWS_REGION в своей среде.

Похоже, что Amazon усложнила поиск в документации, чем это должно быть.

Запуск в AWS для реальных приложений - это нормально, потому что вы должны использовать роль, но если вы используете докер для разработки, тогда настройка профиля в контейнере - это PITA.

person Jonesie    schedule 18.01.2018
comment
Это действительно полезный ответ, если вы не работаете в Windows. Мы выполняем развертывание в кластере Kubernetes, отличном от Windows, и это подход, который, кажется, работает лучше всего там. - person dougajmcdonald; 30.01.2018
comment
Я действительно хочу одну вещь, которая будет искать все возможные места для учетных данных. Стандартный способ делает это, но не ищет в среде. Грустный! - person Jonesie; 31.01.2018
comment
Да, было бы здорово! Также клиент .net почти предполагает, что вы запускаете его в Windows и можете использовать профили, что довольно непривлекательно, учитывая, что это библиотека, совместимая с ядром PCL / .Net. - person dougajmcdonald; 31.01.2018
comment
следует упомянуть, что используемый здесь метод расширения существует в пакете AWSSDK.Extensions.NETCore.Setup nuget - person MrTristan; 10.02.2020
comment
@Jonesie, что произойдет, если key_id и access_key будут изменены во время работы моего приложения, как мне обновить их в моем коде для доступа к s3. - person kannangokul; 12.01.2021
comment
@kannangokul Если ваш контейнер работает за пределами AWS, вам потребуется перезапуск. Внутри AWS (например, ECS или EC2) вы должны использовать роль, а не ключ / секретный ключ доступа. Я думаю, вы также можете использовать роль вне AWS, но это становится беспорядочным, и вам все равно понадобится профиль или доступ / секретные ключи. - person Jonesie; 12.01.2021
comment
@Jonesie, да, мне было интересно, есть ли другой вариант за пределами среды aws, и, к сожалению, я не смог найти простого решения. Я просто хотел дважды проверить, так как я относительно новичок в AWS, и спасибо, что подтвердили то же самое - person kannangokul; 14.01.2021

Это помогает избежать получения учетных данных из среды с использованием настроек приложения в целях разработки.

var awsOption = Configuration.GetAWSOptions();
    awsOption.Credentials = new BasicAWSCredentials(Configuration["AWS:AccessKey"], Configuration["AWS:SecretKey"]);
    services.AddDefaultAWSOptions(awsOption);
person Vlad Hrona    schedule 01.06.2020

Та же документация также включает раздел для настройки учетных данных. Посмотрите здесь http://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html

В нем не приводится пример настройки учетных данных с помощью файла appSettings.json, потому что они не думают, что это правильный (безопасный) способ сделать это.

Вот из вводной части раздела о настройке учетных данных:

Не помещайте буквальные ключи доступа в свое приложение, включая файл App.config или Web.config проекта. Если вы это сделаете, вы создадите риск случайного раскрытия ваших учетных данных, если, например, вы загрузите проект в общедоступный репозиторий.

person Hasan    schedule 27.03.2017
comment
В этой документации нет ни одного примера того, как это настроить в appsettings.json. - person Natan; 27.03.2017
comment
@ Натан, это потому, что это неправильный способ. - person Hasan; 27.03.2017
comment
На самом деле это не отвечает на вопрос. На самом деле это часть проблемы. Я новичок в этом SDK, приведенный пример не работает, и я понятия не имею, что я делаю не так. Есть ли шанс быть более полезным? Что мне делать? Не могли бы вы привести пример того, как заставить их примерный код работать? На данный момент мне просто нужно понять, как запустить их пример кода. - person Natan; 27.03.2017
comment
Просто чтобы дать обратную связь, по какой-то причине у вас сложилось впечатление, что я хочу добавить идентификатор и ключ в AppSettings. Я не. Мне просто нужно понять, как это настроить с помощью ядра asp.net, и пока я понятия не имею, чего там не хватает. - person Natan; 29.03.2017
comment
В документации упоминаются эти BasicAWSCredentials, которые создаются из значений AWSAccessKey и AWSSecretKey AppConfig, если они доступны. Однако, похоже, это не работает. Также я не вижу проблем с вводом учетных данных в User Secret. Это так же безопасно, как .aws \ credentials - person Snæbjørn; 26.02.2021