AWS SDK for .NET无法使用IIS访问凭据

时间:2014-08-29 01:48:00

标签: c# asp.net iis amazon-web-services amazon-s3

我在SDK Store中访问AWS凭据时遇到了一些问题,但在IIS下运行时似乎只是一个问题。如果我通过使用ReSharper调用NUnit测试来执行相同的代码,则依赖项注入将起作用,并且S3客户端可以进行身份​​验证。

IAmazonS3 s3Client = new AmazonS3Client();

还有其他人遇到过这个问题吗?你是如何让依赖注入工作的?

[编辑]

建议将凭据文件方法用于IIS,因为SDK Store会为每个用户以不同方式加密凭据。如果我在appSettings中硬编码我不想做的路径,我只能获得一个凭证文件。

除了以下路径之外,SDK会在哪里查找凭证文件?

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

2 个答案:

答案 0 :(得分:9)

这个问题在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();

答案 1 :(得分:6)

SDK Store将凭据保存在C:\Users\<username>\AppData\Local\AWSToolkit文件夹下,因此除非在与NUnit测试相同的帐户下运行IIS,否则IIS将无法访问相同的凭据。

This blog讨论了存储和使用凭据的各种选项。在您的情况下,看起来更好的选择是使用凭证文件。