Jenkins执行AWS Assume Role报错:无法定位凭证
问题分析:Jenkins执行AWS Assume Role时提示无法找到凭证
核心错误原因
1. 信任关系配置逻辑错误
你设置的信任关系中,Principal是目标角色terraform-jenkinsrole自己的ARN。AWS AssumeRole操作要求调用方(比如Jenkins的运行身份)必须被目标角色的信任关系允许,而非让角色自己信任自己。这种配置没有任何合法的调用方可以触发AssumeRole请求。
2. 执行AssumeRole时缺少初始身份凭证
错误提示Unable to locate credentials说明Jenkins运行命令的环境中没有有效的AWS初始凭证。AssumeRole不是无凭证调用的操作,必须先通过一个合法的AWS身份(EC2实例角色、IAM用户凭证等)发起请求,这个初始身份需要被目标角色的信任关系允许,同时拥有sts:AssumeRole权限。
3. 附加策略冗余且逻辑无效
- 目标角色已经附加了
AdministratorAccess策略,该策略已包含所有AWS操作权限(包括sts:AssumeRole),额外添加的Policy2完全冗余。 - Policy2允许角色自己Assume自己,这种配置在实际场景中没有意义,只会混淆权限逻辑。
解决步骤
1. 修正目标角色的信任关系
根据Jenkins的部署方式,调整信任关系中的Principal:
- 如果Jenkins部署在AWS EC2上:使用EC2实例角色的ARN作为信任主体
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::202533537610:role/[你的EC2实例角色ARN]" }, "Action": "sts:AssumeRole" } ] } - 如果Jenkins使用IAM用户凭证:使用IAM用户的ARN作为信任主体
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::202533537610:user/[Jenkins使用的IAM用户名称]" }, "Action": "sts:AssumeRole" } ] }
2. 确保Jenkins环境拥有初始凭证
- EC2部署场景:给Jenkins所在的EC2实例附加一个IAM角色,该角色需要具备
sts:AssumeRole权限,资源指定为目标角色arn:aws:iam::202533537610:role/terraform-jenkinsrole。 - 其他部署场景:在Jenkins流水线中通过凭证管理工具注入IAM用户的
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量(禁止硬编码在代码中)。
3. 清理冗余IAM策略
删除附加在terraform-jenkinsrole上的Policy2,保留AdministratorAccess即可,避免权限配置混乱。
内容的提问来源于stack exchange,提问作者sutterhome1996
相关产品推荐
相关产品推荐

