EC2上CodeDeploy缺失凭证错误求助
问题排查与解决方案
1. 先解决EC2实例IAM角色关联的不稳定状态
从你提供的实例配置文件关联列表来看,当前实例同时存在disassociating和associating两种状态,说明角色切换操作未完成或出现异常:
- 等待5-10分钟,让AWS完成角色的关联/取消关联流程,之后确认状态是否变为单一的
associated - 如果长时间处于异常状态,手动清理并重关联:
- 执行命令取消旧关联:
aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-RRR - 待旧关联完全取消后,重新关联目标角色:
aws ec2 associate-iam-instance-profile --instance-id i-XXX --iam-instance-profile Name=EC2-Role
- 执行命令取消旧关联:
2. 纠正IAM角色的配置逻辑
你混淆了CodeDeploy服务角色和EC2实例角色的定位:
- CD_Role是给CodeDeploy服务本身使用的角色,仅需信任
codedeploy.amazonaws.com,不需要关联到EC2实例 - EC2-Role是EC2实例专属角色,信任关系只需要允许
ec2.amazonaws.com即可(EC2实例通过该角色获取临时凭证,CodeDeploy Agent借助这些凭证与CodeDeploy服务通信)
EC2-Role的正确配置:
- 权限无需过度开放,附加AmazonEC2RoleforAWSCodeDeploy托管策略即可(已包含CodeDeploy Agent所需的全部权限,含S3访问权限)
- 信任关系修正为:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
3. 验证EC2实例的IAM凭证获取能力
登录EC2实例,执行以下命令检查凭证获取情况:
# 检查当前实例关联的IAM角色名称 curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
如果返回EC2-Role名称,继续执行:
# 获取角色的临时凭证详情 curl http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2-Role
若返回包含AccessKeyId、SecretAccessKey、Token的JSON数据,说明凭证获取正常;若返回错误,需重新检查角色关联操作。
4. 检查CodeDeploy Agent状态
登录EC2实例,重启Agent并查看日志:
# 以Amazon Linux 2为例 sudo systemctl restart codedeploy-agent sudo systemctl status codedeploy-agent # 实时查看Agent日志 sudo tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
确认Agent状态正常且无凭证报错后,重新触发GitHub Actions的部署流程。
内容的提问来源于stack exchange,提问作者Galeej
相关产品推荐
相关产品推荐

