Как установить учетные данные в 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?

5 ответов

Решение

Файл 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'.

Может быть, это слишком поздно для вас, но если вы используете Docker или у вас есть другая среда / настройки, где невозможно / просто использовать профили 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 для реалов - это нормально, потому что вы должны использовать роль, но если вы используете docker для dev, тогда настройка профиля в контейнере - это PITA.

AWS SDK для .NET использует следующий порядок загрузки учетных данных:

1. свойство

      AWSOptions awsOptions = new AWSOptions
{
    Credentials = new BasicAWSCredentials("yourAccessKey", "yourAccessSecret")
};
builder.Services.AddDefaultAWSOptions(awsOptions);

2. имущество

      AWSOptions awsOptions = new AWSOptions
{
    Profile = "custom",
    ProfilesLocation = @"c:\temp\credentials"
};
builder.Services.AddDefaultAWSOptions(awsOptions);

Если расположение профиля не указано, будет использоваться расположение по умолчанию.

3. Сеть магазинов учетных данных

Если оба AWSOptions.Credentialsа также AWSOptions.Profileне поставляются или AWSOptionsсам объект нулевой. В этом случае имя профиля учетных данных будет загружено из переменной окружения.

  • Имя профиля : Если такого нет AWS_PROFILEпеременная окружения, затем defaultбудет использоваться в качестве имени профиля.
  • Расположение профиля : C:\Users\.aws\credentials

4. Переменные среды Учетные данные AWS

Если SDK все еще не получил учетные данные, он проверяет следующие переменные среды, чтобы загрузить учетные данные AWS.

      ENVIRONMENT_VARIABLE_ACCESSKEY = "AWS_ACCESS_KEY_ID";     
ENVIRONMENT_VARIABLE_SECRETKEY = "AWS_SECRET_ACCESS_KEY";        
ENVIRONMENT_VARIABLE_SESSION_TOKEN = "AWS_SESSION_TOKEN";

5. Профиль экземпляра EC2 / Профиль задачи ECS

Наконец, это самое важное место, где SDK ищет учетные данные. Это лучшее место для приложений, работающих в среде AWS. В этом случае SDK загружает учетные данные AWS из профиля экземпляра EC2 или роли задачи ECS.

Я также написал блог на ту же тему, вы можете проверить это здесь — Понимание загрузки учетных данных в AWS SDK для .NET.

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

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

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

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

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

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

Другие вопросы по тегам