为什么AWS SDK无法找到我的凭据?

时间:2017-10-20 11:23:08

标签: c# amazon-web-services

我有一台利用AWS SES发送通知电子邮件的服务器,但我一直收到以下消息:

  

“Amazon.Runtime.AmazonServiceException”类型的未处理异常   发生在AWSSDK.dll

     

其他信息:无法找到凭据

我有一个完全可由服务器用户访问的凭证文件,我使用以下内容告诉AWS SDK文件所在的位置和配置文件名称:

AWSConfigs.AWSProfileName = "example-user";
AWSConfigs.AWSProfilesLocation = Environment.CurrentDirectory + "/example-dir/credentials";

..然而在以下行崩溃并显示错误消息:

AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(REGION);

我在this answer上检查了Amazon.Runtime.AmazonServiceException: Unable to find credentials,这表明配置文件应该在应用程序的配置文件中,如下所示:

<appSettings>
    <add key="AWSProfilesLocation" value="C:\awsfile\credentials" />
    <add key="AWSRegion" value="us-east-1" />
</appSettings>

...这导致完全相同的错误。

我做错了什么? AWSConfigs.*代码现在已经工作了大约六个月没有问题,当我的项目中断并且我从Git存储库中恢复它时,这种情况就开始发生了。我不记得我之前使用过哪个版本的Visual Studio,但我目前正在使用2015(更新3)。

做了但是通过将凭据添加为系统环境变量来实现此功能,但出于安全原因,这不是永久解决方案。

如果我下载早期的提交,构建它们并运行它们,我会得到完全相同的错误。我认为这与我正在使用的Visual Studio版本有关,但是不能想出为什么会这样。

AWS SDK和.NET版本始终相同,因此不应该是不兼容的(AWS SDK和.NET 4.6.1为2.3.55.2)。

1 个答案:

答案 0 :(得分:-1)

如果您在Amazon EC2实例上运行应用程序且这些应用程序需要AWS凭据,那么最佳做法建议是:

  • 从不在您的代码中放置凭据
  • 为实例分配 IAM角色,SDK会自动使用这些凭据

即使您在非EC2实例上运行应用程序,也要避免在代码中放置凭据。相反,将它们放在环境变量或配置文件中。

请参阅:Configuring AWS Credentials for .Net applications