解决AWS EC2实例无法使用IAM角色登录AWS CLI

问题背景

有时,我们希望一台AWS EC2实例,即云服务器,能够使用AWS CLI访问AWS管理控制台资源。

例如,这里,我们想让它能够列出所有IAM用户组。

bash 复制代码
aws iam list-groups

于是,我们使用下面的命令,在AWS CLI中添加某位用户的访问秘钥,作为访问时的认证凭据。

bash 复制代码
aws configure

然而,这并非最佳方法。最佳方法应是给要访问控制台的实例分配一个IAM角色。否则将会有很多问题,例如,当前使用的访问秘钥能直接被以明文列出。

bash 复制代码
cat ~/.aws/credentials

于是,我们新建一个具有我们要分配的权限的IAM角色,并把它分配给这个实例。

问题描述

之后我们在控制台里删除原来使用的访问秘钥。然而,此时,新分配的角色似乎并没有起作用。

复制代码
 [ec2-user@ip-172-31-6-134 ~]$ aws iam list-groups
An error occurred (InvalidClientTokenId) when calling the ListGroups operation: The security token included in the request is invalid.

故障排查

我们怀疑AWS CLI似乎还在尝试使用原来的秘钥进行认证。然而,因为这对秘钥已经从控制台内被删除,所以自然而然,认证失败。

解决方法

事实确实如此。当一个EC2实例被分配了一个IAM角色时,并不会自动抹除之前使用aws configure配置的访问秘钥凭据。不仅如此,当IAM角色凭据和访问秘钥凭据同时存在时,后者具有更高优先级,也就是说AWS CLI会优先使用它们。

既然如此,移除原来使用的访问秘钥应该就能强迫AWS CLI使用角色进行认证。直接删除储存秘钥的文本文件credentials

bash 复制代码
rm ~/.aws/credentials

有人建议再抹除一些环境变量,但尝试下来似乎并不必要。

bash 复制代码
for var in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SECURITY_TOKEN ; do eval unset $var ; done

删除完成后,再次尝试从CLI访问AWS管理控制台。

成功。

bash 复制代码
[ec2-user@ip-172-31-6-134 ~]$ aws iam list-groups
json 复制代码
{
    "Groups": [
        {
            "Path": "/",
--snip--

并且,我们还能确认,我们当前确实在用角色作为凭据访问。

bash 复制代码
[ec2-user@ip-172-31-6-134 ~]$ aws sts get-caller-identity
json 复制代码
{
    "UserId": "AR...KI:i-0f54eeba8022361ec",
    "Account": "5...2",
    "Arn": "arn:aws:sts::5...2:assumed-role/IAMReaderRole/i-0f54eeba8022361ec"
}
bash 复制代码
[ec2-user@ip-172-31-6-134 ~]$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************6TVT         iam-role    
secret_key     ****************RnOE         iam-role    
    region           ap-southeast-1             imds    
[ec2-user@ip-172-31-6-134 ~]$

问题解决。

相关推荐
甲鱼9298 小时前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
Johny_Zhao1 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
NineData1 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
YuMiao1 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
Sinclair4 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Rockbean5 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
蝎子莱莱爱打怪5 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
茶杯梦轩5 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
海天鹰6 天前
【免费】PHP主机=域名+解析+主机
服务器