asp.net - AWS AmazonSimpleSystemsManagementClient 无法读取 .NET Framework 应用程序中的凭证
问题描述
我有 .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
解决方案
只要您在 .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);
}
}
}
推荐阅读
- python - 为什么我的 python 代码在 Visual Studio 上运行完美但在终端中中断?
- java - Spring Batch CommandLineJobRunner Config 类被忽略
- python - Pygame-太空侵略者子弹
- c++ - 从 QT 的 MainWindow 中的另一个函数更新标签
- javascript - Safari 中的 SVG 错误(使用 iframe 加载)
- reactjs - 使用酶设置 redux 连接反应组件的状态
- python - 重复调用 multiprocessing.Pool 实例
- monaco-editor - 如何添加sql提示提示
- css - 您将如何在 reactjs 应用程序中设置多个页面的“正文”而不使它们相互重叠?
- elasticsearch - 在 Elasticsearch 中,有没有办法获取字段超过 2 个值的文档