如何在 C# .NET core 控制台程序中指定 AWS 凭证

2024-04-11

我正在尝试测试 .NET Core 控制台程序以将消息发布到 SNS。由于我在尝试让它在 Lambda 中工作时遇到问题,因此我想在非 Lambda 环境中尝试一下。在 Lambda 中,安全性由角色负责,但在控制台程序中,我认为我必须以某种方式指定我的访问密钥和秘密。

我读过这一页:http://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html#net-dg-config-creds-sdk-store http://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html#net-dg-config-creds-sdk-store,但仍然完全困惑。

我在本地开发计算机上运行,​​而不是 EC2 实例。无意将其投入生产,只是尝试测试一些代码。

我使用的是 Visual Studio 2015,.NET Core 1.0。我使用 Nuget 获得以下内容: "AWSSDK.Extensions.NETCore.Setup": "3.3.3", "AWSSDK.SimpleNotificationService": "3.3.0.23",

根据以下问题的答案如何在 NET Core 上的 AWS SDK 上设置凭证? https://stackoverflow.com/questions/43053495/how-to-set-credentials-on-aws-sdk-on-net-core我创建了 /user/.aws/credentials 文件(假设凭证是文件名而不是目录名)。

但该问题/答案并未解决如何实际使用该文件。我正在运行的代码如下。

    public static void Main(string[] args)
    {
        Console.WriteLine("Started");
        //var awsCredentials = new Amazon.Runtime.AWSCredentials()
        var client = new Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest2);
        //var client = new Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceClient(awsCredentials, Amazon.RegionEndpoint.EUWest2);
        //Amazon.SimpleNotificationService.Model.PublishResponse publishResp = null;
        SendMessage(client).Wait();
        Console.WriteLine("Completed call to SendMessage: Press enter to end:");
        Console.ReadLine(); 
    }

我在新客户端上遇到的错误是:

An unhandled exception of type 'Amazon.Runtime.AmazonServiceException' occurred in AWSSDK.Core.dll

Additional information: Unable to find credentials

我看到有一种方法可以将 AWSCredentials 对象传递给该构造函数,但我不明白如何构建它。 Amazon.Runtime.AWSCredentials 是一个抽象类,因此我无法在“new”语句中使用它。


根据 Dan Pantry 的回答,这是一个简单的简短答案,其中突出显示了代码(请注意第二行中的区域枚举):

var awsCredentials = new Amazon.Runtime.BasicAWSCredentials("myaccesskey", "mysecretkey"); 
var client = new Amazon.SimpleNotificationService.AmazonSimpleNotificationSer‌​viceClient(
                              awsCreden‌​tials, Amazon.RegionEndpoint.EUWest2);

如果可能的话使用角色,但上面的方法在需要时有效。那么问题就是访问密钥/秘密密钥存放在哪里;可能是环境变量、配置文件、提示用户或任何常见的嫌疑对象。

AWS-CLI 和 Python 使用此处的凭证:c:\Users\username\.aws\credentials,因此 C# 只能读取该文件,而不会将代码放入 C# 程序本身中。但是运行该程序的每个用户/开发人员都需要在那里设置他们的凭据。

现在还有一个在本地机器上运行 Lambda 的概念,但我还没有尝试过:。 所以重点是,如果您打算使用 Lambda,但需要先在本地进行测试,那么这可能值得尝试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# .NET core 控制台程序中指定 AWS 凭证 的相关文章

随机推荐