安装AWS CLI v2后出现无法从EC2实例元数据服务获取IAM安全凭证问题
问题原因分析
该报错的本质是AWS .NET SDK的默认凭证提供链走完所有前置凭证获取逻辑都未拿到有效凭证,最终尝试从EC2实例元数据服务(Amazon Workspace本身属于托管EC2实例)获取凭证失败导致。安装AWS CLI后触发问题,通常是以下几个原因导致:
- AWS Explorer(AWS Toolkit for Visual Studio)的凭证默认存储在Windows凭据管理器中,和.NET SDK默认读取的
%USERPROFILE%\.aws\credentials文件相互独立,因此AWS Explorer可正常访问服务不代表本地凭证文件配置符合SDK读取要求 - 凭证文件的路径、文件名或内容格式不符合SDK要求
- 安装AWS CLI时修改了
AWS_SHARED_CREDENTIALS_FILE等全局环境变量,导致SDK读取凭证的路径被篡改 - 你的凭证配置未放在
[default]节点下,代码未指定自定义profile名称的情况下SDK无法识别对应凭证
排查方案
- 首先确认凭证文件的基础配置:文件必须存放在当前Windows用户的根目录下,即
%USERPROFILE%\.aws\路径,文件名必须为credentials(无后缀,拼写带s,不是你提到的credential),Windows下AWS SDK默认不会读取根目录下的/.aws/路径下的文件 - 运行
aws configure list命令,查看输出中Credentials File一行指向的路径是否和你存放凭证的路径一致,如果不一致,检查系统环境变量中是否存在AWS_SHARED_CREDENTIALS_FILE或AWS_CONFIG_FILE配置,要么删除该环境变量恢复默认路径,要么将你的凭证文件移动到环境变量指向的路径 - 打开
credentials文件,确认你使用的凭证配置是在[default]节点下;如果是自定义命名的profile,需要在项目调试配置中添加AWS_PROFILE环境变量,值为你自定义的profile名称 - 可添加临时测试代码打印凭证来源,进一步定位问题:
var credentials = Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(); Console.WriteLine(credentials.GetType().FullName);
- 可以新增系统环境变量
AWS_EC2_METADATA_DISABLED,值设为true,强制SDK跳过EC2元数据服务的查询,此时的报错信息会直接提示SDK找不到凭证的具体原因,方便定位 - 检查
%USERPROFILE%\.aws文件夹和内部credentials文件的权限,确认你运行Visual Studio的用户账号对该文件有读取权限 - 检查Lambda测试工具的调试配置,确认是否有额外指定的凭证相关参数覆盖了全局配置
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

