You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在未配置AWS凭证的情况下通过IAM角色运行Jar文件?

解决Rundeck运行Jar文件时的AWS IAM角色访问问题

排查与解决步骤

  • 检查Jar的AWS SDK版本
    确保Jar依赖的AWS SDK版本支持自动获取EC2实例IAM角色的临时凭证。旧版本SDK可能需要显式配置默认凭证链,避免代码中硬编码凭证或自定义凭证提供者,否则会跳过实例角色的凭证获取流程。

  • 验证实例元数据访问权限
    确认运行Jar的Rundeck进程(通常是rundeck用户)能访问EC2实例元数据服务(IMDS,地址169.254.169.254)。检查是否有防火墙规则、SELinux策略限制了该地址的访问,或者进程的网络权限被限制。

  • 确认默认凭证链优先级
    Jar代码不能显式设置AWS凭证,需让SDK遵循默认凭证链:环境变量→系统属性→实例元数据(IAM角色)。可添加JVM调试参数追踪凭证获取流程:

    java -Daws.sdk.debug=true -jar your-app.jar <EC2实例ID> <堆栈名称>
    

    查看日志是否走到实例元数据获取步骤。

  • 清理Rundeck任务的AWS环境变量
    检查Rundeck任务配置的“环境变量”部分,确保没有设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY这类变量,它们会覆盖实例角色的凭证。

  • 验证IAM角色权限
    确认Rundeck使用的IAM角色拥有Jar所需的全部权限(如ec2:RunInstances、cloudformation:CreateStack等)。可在EC2实例上用AWS CLI模拟Jar操作,验证权限是否足够:

    aws ec2 run-instances --image-id <镜像ID> --instance-type t2.micro
    aws cloudformation create-stack --stack-name <测试堆栈名> --template-body file://<测试模板路径>
    
  • 适配Rundeck 2.6.9的临时解决方案
    由于该版本较旧,可能存在子进程无法继承实例角色的问题,可手动获取临时凭证后运行Jar:

    # 获取实例角色的临时凭证
    CREDS=$(curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/<你的IAM角色名>)
    export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r '.AccessKeyId')
    export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r '.SecretAccessKey')
    export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r '.Token')
    # 执行Jar文件
    java -jar your-app.jar <EC2实例ID> <堆栈名称>
    

    替换<你的IAM角色名>为实际角色名称,并确保实例已安装jq工具。

内容的提问来源于stack exchange,提问作者Vanaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:12:46