AWS DotNet 核心凭证

时间:2021-05-05 17:05:23

标签: amazon-web-services .net-core aws-sdk-net

我有一个现有的 dotnet 核心 Web 应用程序,当我在本地开发时,我需要使用 [default] 以外的配置文件。

我遇到了一个问题,凭证文件的位置似乎尚未默认为 ~/.aws/credentials。如果我在创建 SSM 客户端之前设置了 AWSConfigs.AWSProfileName 的值,则基于 credential lookup sequence 检查 2 应该可以工作,但它不会并且只是通过剩余的流并抛出一个错误说它找不到EC2 元数据。检查 3 的情况也是如此。当凭据在 [default] 定义中时,检查 4 将成功,如果尚未初始化默认值,我预计也会失败。我有多个 AWS 账户,我根据配置文件从 SSO 系统获取临时安全令牌,由于临时令牌要求,我无法使用 [default] 配置文件,因为我需要能够在它们之间切换以运行相同的代码库。

我已经能够通过显式访问凭证存储并生成一组凭证传递给 SSM 客户端的构造函数来解决这个问题。

Amazon.Runtime.CredentialManagement.CredentialProfile developerProfile;
AmazonSimpleSystemsManagementClient ssmClient;
if (new Amazon.Runtime.CredentialManagement.SharedCredentialsFile().TryGetProfile(Configuration["AWS:Profile"], out developerProfile)) //Test to determine if we have local credentials file with a profile
{
     AWSCredentials credentials = new Amazon.Runtime.SessionAWSCredentials(developerProfile.Options.AccessKey, developerProfile.Options.SecretKey, developerProfile.Options.Token);
     ssmClient = new AmazonSimpleSystemsManagementClient(credentials, developerProfile.Region);
}
else
{
     ssmClient = new AmazonSimpleSystemsManagementClient(Region);
}
   

上述代码段旨在允许使用特定的配置文件和文件位置在本地运行,如果不存在,则假定它在 EC2 或 ECS 环境中运行,并且可以从元数据中获取凭据。

需要访问 AWS Parameter Store 中的代码的位置位于 Startup 方法中,因此可以在运行 ConfigureServices 方法之前初始化其他属性。我有额外的 AWS 服务,可以在 ConfigureServices 运行后按预期为该工作初始化客户端。在运行 ConfigureServices 方法之前,我不应该期望凭据提供程序正确初始化吗?

0 个答案:

没有答案