C# 为什么可以';AWS SDK找不到我的凭据吗?
我有一个利用AWS SES发送通知电子邮件的服务器,但我一直收到以下消息: “Amazon.Runtime.AmazonServiceException”类型的未处理异常 发生在AWSSDK.dll中 其他信息:找不到凭据 我有一个服务器用户完全可以访问的凭据文件,我使用以下命令告诉AWS SDK该文件的位置和配置文件名:C# 为什么可以';AWS SDK找不到我的凭据吗?,c#,amazon-web-services,C#,Amazon Web Services,我有一个利用AWS SES发送通知电子邮件的服务器,但我一直收到以下消息: “Amazon.Runtime.AmazonServiceException”类型的未处理异常 发生在AWSSDK.dll中 其他信息:找不到凭据 我有一个服务器用户完全可以访问的凭据文件,我使用以下命令告诉AWS SDK该文件的位置和配置文件名: AWSConfigs.AWSProfileName = "example-user"; AWSConfigs.AWSProfilesLocation = Environmen
AWSConfigs.AWSProfileName = "example-user";
AWSConfigs.AWSProfilesLocation = Environment.CurrentDirectory + "/example-dir/credentials";
..但是在以下行崩溃,并显示错误消息:
AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(REGION);
我查看了其中的建议,即配置文件应位于应用程序的配置文件中,如下所示:
<appSettings>
<add key="AWSProfilesLocation" value="C:\awsfile\credentials" />
<add key="AWSRegion" value="us-east-1" />
</appSettings>
…这会导致完全相同的错误
我做错了什么?AWSConfigs.*
代码已经工作了大约六个月了,没有问题,这是在我的项目暂停时开始的,我从它的Git存储库中恢复了它。我记不起以前使用过哪个版本的Visual Studio,但我现在正在使用2015(更新3)
不过,我确实通过添加凭据作为系统环境变量来实现这一点,但出于安全原因,这并不是一个永久性的解决方案
如果我下载以前的提交,构建并运行它们,我会得到完全相同的错误。我认为这可能与我使用的VisualStudio版本有关,但想不出任何原因
AWS SDK和.NET版本始终相同,因此不应存在不兼容(AWS SDK和.NET 4.6.1版本为2.3.55.2)。如果您在Amazon EC2实例上运行应用程序,并且这些应用程序需要AWS凭据,则最佳实践建议是:
- 永远不要将凭据放入代码中
- 将IAM角色分配给实例,SDK将自动使用这些凭据
请参阅:如果您在Amazon EC2实例上运行应用程序,并且这些应用程序需要AWS凭据,那么最佳实践建议是:
- 永远不要将凭据放入代码中
- 将IAM角色分配给实例,SDK将自动使用这些凭据
请参阅:不应该
AWSProfilesLocation
指向文件而不是文件夹吗?马克关于位置是文件而不是文件夹的评论是正确的。如果这是EC2实例,也可以使用IAM角色作为凭据,而不是应用程序硬编码。您是在Amazon EC2实例上运行代码,还是在本地服务器上运行代码?@JohnRotenstein EC2,我承认我没有研究过IAM角色,所以我计划对此进行研究。@MarkB抱歉,更改示例代码的路径时遗漏了文件名。已修复。AWSProfilesLocation
不应该指向文件而不是文件夹吗?马克关于位置是文件而不是文件夹的评论是正确的。如果这是EC2实例,也可以使用IAM角色作为凭据,而不是应用程序硬编码。您是在Amazon EC2实例上运行代码,还是在本地服务器上运行代码?@JohnRotenstein EC2,我承认我没有研究过IAM角色,所以我计划对此进行研究。@MarkB抱歉,更改示例代码的路径时遗漏了文件名。固定的。