C# 无法使用.NET Core控制台应用程序从AWS ECS任务访问SSM

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正在尝试获取默认的应用程序配置,并从那

我编写了一个.NET Core 3.0控制台应用程序,该应用程序访问SSM以获取一些加密凭据以运行作业。当我在本地运行它时,它工作正常,我可以从我帐户的SSM访问参数。但是,当我通过docker和ECS Fargate部署它并将其作为任务运行时,它似乎无法访问参数。我得到以下错误: 无法从EC2实例元数据服务获取IAM安全凭据。 这与ParameterNotFound异常相结合

据我所知,
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}的凭据”);
}

事实证明,我需要在任务定义中为实例设置任务角色。我只设置了一个执行角色