Dot-Net

AWS DotNet SDK 錯誤:無法從 EC2 實例元數據服務獲取 IAM 安全憑證

  • February 24, 2022

我使用此處的範例以使用 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 客戶端 = 新 AmazonSecretsManagerClient(new StoredProfileAWSCredentials());

它工作正常。

類 StoredProfileAWSCredentials 已過時,但可以使用它。我使用在其他機器上正常工作的庫,我無法更改它們。

我使用屬於管理員組的使用者的憑據,並且對 SecretsMnager 具有完全訪問權限。區域已在 c# 程式碼中正確設置,配置文件為預設值。

有任何想法嗎?感謝提前

我有同樣的問題,這是我在開發環境中修復它的方法

  1. 我使用適用於 Visual Studio 的 AWS 擴展創建了一個 AWS 配置文件
  2. 設置配置文件後,使用配置文件傳遞憑據,對我來說效果很好

這裡需要注意的是,訪問密鑰管理器的使用者配置文件應該為 Secrets 管理器分配一個有效的安全組。

試一試告訴我,結果如何。

通過刪除 $HOME/.aws/config 和憑證文件並使用 AWS CLI 重新創建相同的問題並得到解決。

就我而言,我正在將筆記型電腦從 Windows 切換到新的 MBP。我通過複製 .aws 目錄文件設置了我的新環境,並確認 AWS CLI 工作正常。令人困惑的是,dotnet SDK 因相同的錯誤而失敗。

引用自:https://stackoverflow.com/questions/60815037