2014-08-29 5 views
3

У меня возникли проблемы с доступом к учетным данным AWS в хранилище SDK, но, похоже, это проблема только при работе в IIS. Если я нажму тот же код, вызвав тест NUnit с ReSharper, работа над зависимостями будет работать, и клиент S3 сможет аутентифицироваться.AWS SDK для .NET не может получить доступ к учетным данным с помощью IIS

IAmazonS3 s3Client = new AmazonS3Client(); 

Неужели кто-нибудь еще сталкивается с этой проблемой? Как вы могли заставить инъекцию зависимости работать?

[Редактировать]

верительного подхода файла был рекомендован для использования с IIS, поскольку SDK магазин шифрует учетные данные по-разному для каждого пользователя. Я могу получить только файл учетных данных, если я жестко программирую путь в appSettings, который я не хочу делать.

Куда SDK ищет файл учетных данных, кроме указанных ниже путей?

C:\Users\<IIS_app_name>\.aws\credentials 
C:\Users\<my_domain_user>\.aws\credentials 
+0

SDK также будет искать файл web.config в inetpub \ wwwroot. –

ответ

6

Вопрос был ответ на ответ Павла, но я отправлю ответ, чтобы сделать информацию легче потреблять. Вы можете указать местоположение файла учетных данных в файле webLocal.config (я не смог заставить его работать без этого). Когда приложение будет развернуто, расположение файла учетных данных будет недопустимым путем, и SDK перестанет использовать роль IAM для экземпляра EC2.

webLocal.config

<?xml version="1.0"?> 
<appSettings> 
    <!-- AWS --> 
    <add key="AWSProfilesLocation" value="C:\Users\<IIS_app_name>\.aws\credentials" /> 
    <add key="AWSRegion" value="us-west-2" /> 
    <add key="S3Bucket" value="bucket." /> 
</appSettings> 

Инъекция зависимость будет работать при создании экземпляра клиента без аргументов.

IAmazonS3 s3Client = new AmazonS3Client(); 
+0

Кажется, не работает для меня - или, может быть, я использую неправильное 'IIS_app_name'. Как получить ''? Благодарю. – zed

6

В SDK магазин сохраняет учетные данные для этой папки C:\Users\<username>\AppData\Local\AWSToolkit, так что если IIS не запускаются под той же учетной записи, как тесты NUnit, IIS не будет иметь возможность доступа те же учетные данные.

This blog обсуждает различные варианты хранения и использования учетных данных. В вашем случае, похоже, лучшим вариантом будет использование файла учетных данных.

+0

Я попытался добавить файл учетных данных в папку пользователя IIS и не повезло там (C: \ Users \ \. Aws \ credentials). Из любопытства я также попытался дублировать папку AWSToolkit (C: \ Users \ \ AppData \ Local \ AWSToolkit) для пользователя IIS, и я все равно получаю ту же ошибку. На данный момент я в тупике. Мне жаль, что я не вижу, какие пути поиска выходят из строя в сообщении об ошибке. – tponthieux

+0

SDK Store имеет другой формат файла, чем файл учетных данных: он JSON и зашифрован. Итак, ваша первая попытка не будет работать, так как SDK Store (под IIS) ищет файлы JSON, а не aws \ credentials. Ваша вторая попытка не будет работать, поскольку учетные данные будут зашифрованы по-разному для каждого пользователя, поэтому пользователь IIS не сможет расшифровать ваши файлы учетных данных. Вам необходимо создать файл aws \ credentials, а затем указать на него либо в коде, либо в конфиге, как показано в сообщении в блоге, которое я связал. –

+0

Pavel. Имеет смысл, что опция сохранения SDK не будет работать, если учетные данные будут зашифрованы по-разному для каждого пользователя, поэтому я рад это знать. Мне удалось получить файл учетных данных, если я жестко закодирую путь в файле webLocal.config. Использование '% HOMEDRIVE %% HOMEPATH% \. Aws \ credentials' в настройке приложения AWSProfilesLocation не работает для меня. У меня есть учетные файлы в папке пользователя и папке пользователя приложения IIS. Где еще он мог искать файл учетных данных, кроме 'C: \ Users \ \.aws \ credentials', если я не укажу путь? – tponthieux

Смежные вопросы