AWS EKS中Pod使用节点组角色而非指定服务账号角色问题咨询
排查与解决步骤
1. 核心原因确认
你使用的aws-java-sdk-core:1.11.505版本不支持IRSA(IAM Roles for Service Accounts,即通过OIDC绑定服务账号的角色方案)的凭证加载逻辑。AWS官方在1.11.704版本才正式将WebIdentity凭证提供者加入SDK默认凭证链,低于该版本的SDK不会读取Pod内注入的OIDC令牌文件,会直接回退到EC2元数据接口获取节点角色凭证,就会出现你遇到的现象。
2. 优先解决方案(推荐)
直接升级aws-java-sdk-core到1.11.704及以上的稳定1.x版本,示例依赖配置(Maven):
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.12.550</version> </dependency>
升级后无需修改业务代码,SDK默认凭证链会自动优先读取Pod内注入的AWS_ROLE_ARN、AWS_WEB_IDENTITY_TOKEN_FILE环境变量,加载服务账号绑定的角色凭证,不会再回退到节点角色。
3. 临时兼容方案(无法升级版本时使用)
如果暂时无法升级SDK版本,可以手动在代码中指定WebIdentity凭证提供者,优先级高于默认的实例元数据凭证:
// 手动构造WebIdentity凭证提供者 AWSCredentialsProvider webIdentityProvider = WebIdentityTokenCredentialsProvider.builder().build(); // 构造AWS客户端时显式传入该凭证提供者 AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(webIdentityProvider) .withRegion(Regions.CN_NORTHWEST_1) .build();
4. 额外排查点
如果升级版本后仍有问题,检查以下配置:
- 确认Pod中已正确注入
AWS_ROLE_ARN和AWS_WEB_IDENTITY_TOKEN_FILE两个环境变量,你在shell中验证正常说明注入配置无问题 - 检查业务代码中构造AWS客户端时,是否手动指定了
InstanceProfileCredentialsProvider等只读取节点角色的凭证提供者,如果有则需要删除或者调整凭证链顺序 - 检查服务账号的annotation是否正确配置了角色ARN,信任策略是否允许OIDC提供商Assume该角色
内容的提问来源于stack exchange,提问作者PSKP
相关产品推荐
相关产品推荐

