我使用here中的示例,以便使用c#代码从AWS SecretsManager中检索秘密。
我已经通过AWS CLI在本地设置了凭据,并且能够使用AWS CLI命令“ aws secretsmanager list-secrets”检索机密列表。
但是c#控制台应用程序失败并出现错误:
> Unhandled exception. System.AggregateException: One or more errors occurred. (Unable to get IAM security credentials from EC2 Instance Metadata Service.)
---> Amazon.Runtime.AmazonServiceException: Unable to get IAM security credentials from EC2 Instance Metadata Service.
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.FetchCredentials()
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentials()
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentialsAsync()
at Amazon.Runtime.Internal.CredentialsRetriever.InvokeAsync[T](IExecutionContext executionContext)
at Amazon.Runtime.Internal.RetryHandler.InvokeAsync[T](IExecutionContext executionContext)
at Amazon.Runtime.Internal.RetryHandler.InvokeAsync[T](IExecutionContext executionContext)
at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
at Amazon.Runtime.Internal.ErrorCallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
at Amazon.Runtime.Internal.MetricsHandler.InvokeAsync[T](IExecutionContext executionContext)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task`1.get_Result()
at AWSConsoleApp2.GetSecretValueFirst.GetSecret() in D:\Work\Projects\Training\AWSConsoleApp2\AWSConsoleApp2\GetSecretValueFirst.cs:line 53
at AWSConsoleApp2.Program.Main(String[] args) in D:\Work\Projects\Training\AWSConsoleApp2\AWSConsoleApp2\Program.cs:line 11
当我更改原始构造函数调用
IAmazonSecretsManager客户端=新的AmazonSecretsManagerClient();
添加了类型为AWSCredentials的继承参数
IAmazonSecretsManager客户端= new AmazonSecretsManagerClient(new StoredProfileAWSCredentials());
它工作正常。
StoredProfileAWSCredentials类已过时,但可以使用它。我使用的库可以在其他计算机上正常运行,并且无法更改它们。
我为属于Administrators组且对SecretsMnager拥有完全访问权限的用户使用凭据。在C#代码中正确设置了地区,默认是配置文件。
有什么想法吗?感谢前进
答案 0 :(得分:3)
我遇到了同样的问题,这是我如何在开发环境中修复它
这里需要注意的是,访问密钥管理器的用户个人资料应为“秘密”管理器分配一个有效的安全组。
尝试一下,让我知道如何进行。
答案 1 :(得分:3)
同一问题,已通过删除$ HOME / .aws / config和凭证文件并使用AWS CLI重新创建来解决。
就我而言,我是将笔记本电脑从Windows切换到新的MBP。我已经通过复制.aws目录文件来设置新环境,并确认AWS CLI可以正常工作。令人困惑的是dotnet SDK失败,出现相同的错误。
答案 2 :(得分:0)
问题不完全是我的问题,但这是google上的首个热门产品,因此我认为我会筹码以防万一。
我在发布时遇到了上述确切错误
dotnet lambda list-layers
dotnet cli似乎使用AWS_PROFILE
变量,而不默认为AWS_DEFAULT_PROFILE
。在我的公司中,AWS_DEFAULT_PROFILE
被映射到身份提供者,因此我没有使用不同的配置文件来管理不同的访问,并且default
配置文件为空。解决方法是,像这样运行命令
AWS_PROFILE=$AWS_DEFAULT_PROFILE dotnet lambda list-layers
通过这种方式,CLI将使用正确的凭据。
答案 3 :(得分:0)
运行以下命令并使用 AWS 提供的数据按照提示进行操作:
aws configure
答案 4 :(得分:0)
这个问题我遇到过很多次,但都无法使用上述解决方案来解决。
对我有用的是使用 AWS_PROFILE
环境变量明确设置我的 AWS 配置文件并将其设置为我想要使用的配置文件。
今天我再次遇到了这个问题,即使那也不起作用。最终解决它的是设置 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
环境变量。
我害怕有一天我没有其他方法可以向 AWS 提供凭证。
答案 5 :(得分:0)
确保您安装了最新版本的 EC2config https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_Install.html
谢谢
答案 6 :(得分:0)
只需在控制面板 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 中添加环境变量。 两者的实际值都不重要。我已将它们都设置为空格 (' ')。 不知道为什么它有效,但它有效。登录似乎需要更长的时间。 似乎 SDK 并没有进入有问题的流程,而是尝试使用环境变量,但失败了,大约在 30 秒左右后按要求登录。
在两台未安装 AWS CLI 或配置任何 AWS 配置文件的不同 Win10 PC 上对其进行了测试。该问题已 100% 重现,并且已修复该问题。