2014-08-29 91 views
3

我在访问SDK存储中的AWS凭证时遇到了一些问题,但在IIS下运行时似乎只是一个问题。如果我通过使用ReSharper调用NUnit测试来实现相同的代码,则依赖注入工作并且S3客户端能够进行身份验证。适用于.NET的AWS开发工具包无法使用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还将在inetpub \ wwwroot中查找web.config文件。 – 2015-09-30 18:11:08

回答

6

这个问题在Pavel的回答下得到了回答,但我会发布一个答案让信息更易于使用。您可以在webLocal.config中指定凭据文件的位置(如果没有,我无法使其工作)。部署应用程序时,凭证文件位置将是无效路径,SDK将故障转移到EC2实例使用IAM角色。

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 2017-10-16 14:56:44

6

的SDK商店保存C:\Users\<username>\AppData\Local\AWSToolkit文件夹下的凭证,所以除非IIS正在相同的帐户作为NUnit的测试下运行,IIS将无法访问相同的凭据。

This blog讨论了存储和使用凭证的各种选项。就你而言,看起来更好的选择是使用凭证文件。

+0

我曾尝试在IIS用户的文件夹下添加一个凭证文件,并且在那里没有运气(C:\ Users \ \。aws \ credentials)。出于好奇,我也试着为IIS用户复制AWSToolkit文件夹(C:\ Users \ \ AppData \ Local \ AWSToolkit),我仍然收到相同的错误。在这一点上,我很难过。我希望我能看到哪些搜索路径在错误消息中失败。 – tponthieux 2014-08-29 22:36:11

+0

SDK Store具有与凭证文件不同的文件格式:它是JSON并加密。 因此,您的第一次尝试将无法正常工作,因为SDK Store(在IIS下)正在查找JSON文件,而不是aws \ credentials。 您的第二次尝试将不起作用,因为每个用户对凭据进行不同的加密,所以IIS用户无法解密您的凭证文件。 您需要创建aws \ credentials文件,然后在代码或配置中指向它,如链接的博客文章中所示。 – 2014-08-29 23:17:43

+0

Pavel,如果证书对每个用户的加密方式不同,那么SDK存储选项将不起作用,这很有意义,所以我很高兴知道这一点。如果我在webLocal.config中硬编码路径,我只能够获得凭证文件的工作。在AWSProfilesLocation应用程序设置中使用'%HOMEDRIVE %% HOMEPATH%\。aws \ credentials'不适用于我。我在我的用户文件夹和IIS应用程序用户文件夹中有凭据文件。除了'C:\ Users \ \之外,还可以在哪里搜索凭据文件。aws \ credentials'如果我不指定路径? – tponthieux 2014-09-02 23:03:42

相关问题