Quarkus应用在EKS Pod中使用节点组IAM角色而非指定Pod角色问题
问题原因及解决办法
核心问题
你的Quarkus应用未使用Pod注入的Web Identity角色(AWS_ROLE_ARN指定的角色),而是默认采用了EKS节点组的IAM角色,导致SQS权限不足触发403报错。
可能原因
- AWS SDK凭证链优先级冲突:AWS SDK默认优先从EC2实例元数据服务(IMDS)获取凭证,而EKS节点组的角色凭证正是通过IMDS提供的,这会覆盖Pod中注入的Web Identity环境变量。
- Quarkus AWS扩展未显式配置:若未明确指定Quarkus使用Web Identity认证,扩展会沿用SDK默认的凭证查找逻辑,忽略
AWS_ROLE_ARN等注入的环境变量。
解决步骤
1. 禁用IMDS强制使用Web Identity
在Pod的部署配置中添加环境变量,禁用EC2实例元数据服务,强制SDK读取Web Identity凭证:
env: - name: AWS_EC2_METADATA_DISABLED value: "true"
2. 显式配置Quarkus AWS扩展
在项目的application.properties中添加以下配置,指定使用Web Identity认证:
quarkus.aws.credentials.type=web-identity quarkus.aws.credentials.web-identity.role-arn=${AWS_ROLE_ARN} quarkus.aws.credentials.web-identity.token-file=${AWS_WEB_IDENTITY_TOKEN_FILE} quarkus.aws.region=${AWS_REGION}
此配置会让Quarkus AWS扩展直接读取注入的环境变量,使用指定的执行角色。
3. 验证Pod环境变量
通过kubectl exec进入Pod,检查环境变量是否正确注入:
kubectl exec <你的Pod名称> -- printenv AWS_ROLE_ARN AWS_WEB_IDENTITY_TOKEN_FILE
确保输出的角色ARN与预期一致,排除CI/CD流水线注入错误。
4. 临时排查验证(可选)
若上述方法无效,可临时给节点组角色添加sqs:receivemessage权限,确认是否为凭证链优先级问题,但这仅为临时排查手段,最终仍需切换到指定的执行角色。
内容的提问来源于stack exchange,提问作者framilano
相关产品推荐
相关产品推荐

