C# 无法使用.NET Core控制台应用程序从AWS ECS任务访问SSM
我编写了一个.NET Core 3.0控制台应用程序,该应用程序访问SSM以获取一些加密凭据以运行作业。当我在本地运行它时,它工作正常,我可以从我帐户的SSM访问参数。但是,当我通过docker和ECS Fargate部署它并将其作为任务运行时,它似乎无法访问参数。我得到以下错误: 无法从EC2实例元数据服务获取IAM安全凭据。 这与ParameterNotFound异常相结合 据我所知,C# 无法使用.NET Core控制台应用程序从AWS ECS任务访问SSM,c#,amazon-web-services,asp.net-core,.net-core,aws-ssm,C#,Amazon Web Services,Asp.net Core,.net Core,Aws Ssm,我编写了一个.NET Core 3.0控制台应用程序,该应用程序访问SSM以获取一些加密凭据以运行作业。当我在本地运行它时,它工作正常,我可以从我帐户的SSM访问参数。但是,当我通过docker和ECS Fargate部署它并将其作为任务运行时,它似乎无法访问参数。我得到以下错误: 无法从EC2实例元数据服务获取IAM安全凭据。 这与ParameterNotFound异常相结合 据我所知,AmazonSimpleSystemsManagementClient正在尝试获取默认的应用程序配置,并从那
AmazonSimpleSystemsManagementClient
正在尝试获取默认的应用程序配置,并从那里使用aws凭据访问其他aws资源。这在本地运行时效果很好,因为我配置了AWS CLI,并且可以访问我的凭据。当它通过ECS运行时,我猜它找不到这个配置,所以它会尝试查找EC2元配置,它可能不存在于ECS中
我已经将SSM完全访问策略附加到任务定义的角色,甚至是AdministratorFullAccess角色,但似乎仍然没有修复异常。我错过什么了吗
public static async Task<Login> GetCredentialsAsync(string parameterName)
{
var request = new GetParameterRequest()
{
Name = $"/credentials/{parameterName}",
WithDecryption = true
};
using (var client = new AmazonSimpleSystemsManagementClient())
{
try
{
var response = await client.GetParameterAsync(request);
var responseObject = JsonConvert.DeserializeObject<Login>(response.Parameter.Value);
return responseObject;
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error occurred: {ex.Message}");
}
}
throw new ParameterNotFoundException($"Could not find credentials for {parameterName}");
}
公共静态异步任务GetCredentialsAsync(字符串参数名称)
{
var request=new GetParameterRequest()
{
名称=$“/credentials/{parameterName}”,
WithDecryption=true
};
使用(var client=new AmazonSimpleSystemsManagementClient())
{
尝试
{
var response=wait client.GetParameterAsync(请求);
var responseObject=JsonConvert.DeserializeObject(response.Parameter.Value);
返回响应对象;
}
捕获(例外情况除外)
{
Console.Error.WriteLine($”发生错误:{ex.Message}”);
}
}
抛出新的ParameterNotFoundException($“找不到{parameterName}的凭据”);
}
事实证明,我需要在任务定义中为实例设置任务角色。我只设置了一个执行角色