【问题标题】:AWS AmazonSimpleSystemsManagementClient cannot read credentials in .NET Framework applicationAWS AmazonSimpleSystemsManagementClient 无法读取 .NET Framework 应用程序中的凭证
【发布时间】:2021-12-11 20:40:06
【问题描述】:

我有 .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

【问题讨论】:

  • 请说明您是如何配置客户端的
  • @DanielA.White,在帖子中添加了代码
  • Please don't post screenshots of text。它们无法被屏幕阅读器等自适应技术的用户搜索或复制,甚至无法使用。相反,将代码作为文本直接粘贴到您的问题中。如果选中它并单击{}按钮或按Ctrl+K,则代码块将缩进四个空格,这将导致其呈现为代码。

标签: asp.net .net amazon-web-services aws-parameter-store aws-credentials


【解决方案1】:

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

Cred 在名为 credentials 的文件中:

[默认]

aws_access_key_id=Axxxxxxxxxxxxxxxxxxxxxxxxxxx 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);
     }
  }
}

【讨论】:

  • 这是我试图做的,但它不起作用。引发异常“无法从 EC2 实例元数据服务获取 IAM 安全凭证。”
  • 您的问题不可重现。对我来说效果很好。
  • 如果它适合我​​,我不会问任何问题
  • 你是如何创建你的信用的?
  • 凭据是 IAM 用户凭据,然后将其放置在 .AWS 文件夹中名为凭据的文件中。查看我的回复更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2018-03-28
  • 2022-06-29
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多