我正在运行 Visual Studio 2019,并在 Amazon 工作区上安装了 AWS Explorer 和配置文件。直到今天,我已经能够使用 AWS .NET Core 3.1 模拟 Lambda 测试工具在本地调试 Lambda 项目。今天,我需要做一些 CLI 工作,发现 CLI 没有安装,所以我安装了最新版本。安装后,我的代码在尝试访问任何 AWS 服务时失败并出现错误:
无法从 EC2 实例元数据获取 IAM 安全凭证 服务。
我已验证 /.aws/credential 中的凭证文件是否正确,并且 AWS Explorer 正在选择该文件,并且我可以在 AWS Explorer 中浏览服务和对象。
我已删除凭证文件并使用
aws configure
重新创建。没有变化。
我已删除凭证文件并使用 AWS Explorer 重新创建。没有变化。
我已卸载并重新安装 AWS CLI 和 AWS Explorer,并重新创建了配置文件。没有变化。
我已经为 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 设置了 Windows 环境变量。这有效。
显然,当我创建客户端时,我可以将访问密钥和秘密硬编码到客户端中,这样就可以了。
问题是,为什么我的代码不能从 /.aws/credentials 文件中获取凭证?我还能尝试什么吗?
使用命令提示符在计算机上设置 AWS 默认配置文件。
'aws configure --profile "default"'
'AWS Access Key ID [None]: YOUR_ACCESS_KEY'
'AWS Secret Access Key [None]: YOUR_SECRET_KEY'
'Default region name [None]: YOUR_REGION'
'Default output format [None]: (Leave it blank)'
(这对我来说有效)
否则,请尝试将 IAM 角色设置为 EC2 实例。这将解决该错误。
您需要确认 AWS SDK 使用的凭证文件的“默认”位置。这是 AWS SDK 认为的默认基目录:
var baseDirectory = Environment.GetEnvironmentVariable("HOME");
if (string.IsNullOrEmpty(baseDirectory))
baseDirectory = Environment.GetEnvironmentVariable("USERPROFILE");
只需转储运行时值,然后将 .aws 文件夹的副本放在那里或使用应用程序设置
"AWS": {
"AWSProfilesLocation": "C:\\Users\\YOUR_USER_NAME\\.aws\\credentials",
....
将 SDK 指向凭据文件。
提供 AWS 凭证的最安全方法之一是将它们设置为 IIS 服务器上的环境变量。
打开服务器上的系统属性。强调文本 转到“高级”选项卡,然后单击“环境变量”。 在系统变量下,单击新建并添加以下内容: AWS_ACCESS_KEY_ID:您的 AWS 访问密钥 ID AWS_SECRET_ACCESS_KEY:您的 AWS 秘密访问密钥
并重新启动服务器