【问题标题】:Why can't the AWS SDK find my credentials?为什么 AWS 开发工具包找不到我的凭证?
【发布时间】:2026-02-12 01:20:07
【问题描述】:

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

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

其他信息:找不到凭据

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

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

..但是在以下行崩溃并显示错误消息:

AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(REGION);

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

<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 为 2.3.55.2 和 .NET 4.6.1)。

【问题讨论】:

  • 不应该AWSProfilesLocation指向一个文件,而不是一个文件夹?
  • 马克关于位置是文件而不是文件夹的评论是正确的。如果这是 EC2 实例,还可以使用 IAM 角色作为凭证而不是应用程序硬编码。
  • 您是在 Amazon EC2 实例还是本地服务器上运行代码?
  • @JohnRotenstein EC2,我承认我没有看过 IAM 角色,所以我打算研究一下。
  • @MarkB 道歉,当我更改示例代码的路径时错过了文件名。固定。

标签: c# amazon-web-services


【解决方案1】:

如果您在 Amazon EC2 实例上运行应用程序并且这些应用程序需要 AWS 凭证,最佳实践建议是:

  • 切勿将凭据放入您的代码中
  • 为实例分配 IAM 角色,SDK 将自动使用这些凭证

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

见:Configuring AWS Credentials for .Net applications

【讨论】: