0

我有 .NET Framework 应用程序,我尝试AmazonSimpleSystemsManagementClient在本地环境中使用 AWS 参数存储读取数据。此外,我还有 AWS CLI 生成的凭证,位于

用户/MyUser/.aws

文件夹。当我尝试使用凭据从 CMD 连接到参数存储时,它工作正常。尽管应用程序中的 AmazonSimpleSystemsManagementClient 具有默认构造函数,但它会引发异常“无法从 EC2 实例元数据服务获取 IAM 安全凭证。 ”当我尝试使用硬编码的工作密钥将 BasicAWSParameters 传递给客户端时,我遇到了另一个异常“安全令牌包含在请求无效”。

我还尝试安装 EC2Config,从 Visual Studio AWS Toolkit 初始化 AWS SDK Store。虽然这并没有改变比赛。我想避免使用环境变量或对密钥进行硬编码,因为密钥是生成的并且仅在 1 小时内有效。然后我应该重新生成,所以每次都在某个地方复制它们对我来说不方便。请建议如何解决该问题。

一些代码

_client = new AmazonSimpleSystemsManagementClient()
public string GetValue(string key)
{
    if (_client == null)
        return null;

    var request = new GetParameterRequest
    {
        Name = $"{_baseParameterPath}/{key}",
        WithDecryption = true,
    };

    try
    {
        var response = _client.GetParameterAsync(request).Result;

        return response.Parameter.Value;
    }
    catch (Exception exc)
    {
        return null;
    }
}

凭据文件如下所示(我删除了不公开的键值):

[default]
aws_access_key_id= KEY VALUE
aws_secret_access_key= KEY VALUE
aws_session_token= KEY VALUE

[MyProfile]
aws_access_key_id= KEY VALUE
aws_secret_access_key= KEY VALUE
aws_session_token= KEY VALUE
4

1 回答 1

1

只要您在 .aws/credentials 中有您的信用,您就可以创建服务客户端,并且信用将被定位和使用。无需创建 BasicAWSParameters 对象。

名为凭据的文件中的凭据:

在此处输入图像描述

[默认]

aws_access_key_id=Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxx aws_secret_access_key=/zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

此 .NET 代码有效。

using System;
using System.Threading.Tasks;
using Amazon.SimpleSystemsManagement;
using Amazon.SimpleSystemsManagement.Model;

  namespace ConsoleApp1 { 
    class Program {

    static async Task Main(string[] args) {

  
      var client = new AmazonSimpleSystemsManagementClient();
      var request = new GetParameterRequest()
      {
           Name = "RDSConnection"
      };

      var response = client.GetParameterAsync(request).GetAwaiter().GetResult();
      Console.WriteLine("Parameter value is " + response.Parameter.Value);
     }
  }
}
于 2021-10-26T13:19:47.840 回答