如何配置IAM角色为新创建的EC2实例启用SSM功能?
故障根因确认
从你提供的SSM Agent日志中的错误信息EC2RoleRequestError: no EC2 instance role found可直接判定,核心问题是创建EC2实例时未绑定带SSM访问权限的IAM实例配置文件,导致SSM Agent无法从EC2元数据服务获取权限凭证,无法与AWS SSM服务端建立连接,因此SSM接口识别不到该实例,发送命令时提示InstanceId无效。
正确配置IAM角色与实例配置文件步骤
1. 创建SSM专用IAM角色
首先创建信任EC2服务的IAM角色,附加AWS托管的SSM基础权限策略AmazonSSMManagedInstanceCore,CLI操作命令如下:
# 创建角色信任策略文件 cat > ssm-trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] } EOF # 创建IAM角色 aws iam create-role --role-name EC2SSMRole --assume-role-policy-document file://ssm-trust-policy.json # 附加SSM托管权限策略 aws iam attach-role-policy --role-name EC2SSMRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
2. 创建IAM实例配置文件并关联角色
IAM角色不能直接挂载到EC2,需要先封装为实例配置文件:
# 创建实例配置文件 aws iam create-instance-profile --instance-profile-name EC2SSMInstanceProfile # 将之前创建的角色加入实例配置文件 aws iam add-role-to-instance-profile --instance-profile-name EC2SSMInstanceProfile --role-name EC2SSMRole # 等待配置传播,避免延迟导致挂载失败 sleep 15
3. 挂载实例配置文件到EC2实例
已创建的实例支持动态挂载,不需要重启实例:
# 替换为你实际的实例ID值 aws ec2 associate-iam-instance-profile --instance-id $INSTANCEID --iam-instance-profile Name=EC2SSMInstanceProfile
如果是后续新建EC2实例,直接在run-instances命令中增加--iam-instance-profile Name=EC2SSMInstanceProfile参数即可。
挂载完成后等待2~3分钟,SSM Agent会自动获取权限重新连接服务,此时执行aws ssm describe-instance-information即可查询到实例信息。
其他可能的故障原因排查
你当前日志中无其他致命错误,以下是通用排查点:
- 网络配置:公有子网实例需要有公网IP,安全组出站方向允许443端口访问公网;私有子网实例需要在VPC中配置SSM、ssmmessages、ec2messages三个服务的VPC端点,且安全组允许实例访问端点的443端口。
- 元数据服务配置:确认EC2实例的IMDS服务未被强制禁用,SSM Agent需要访问元数据服务获取角色凭证。
- 日志中的WARN级别错误:
/etc/amazon/ssm目录不存在、seelog.xml配置文件缺失属于非致命警告,不影响SSM Agent正常运行,不需要额外处理。
内容的提问来源于stack exchange,提问作者Vadim Kantorov
相关产品推荐
相关产品推荐

