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

Ansible amazon.aws.ec2模块boto未读取~/.aws/config无法跨账户角色扮演

解决方案

旧版本boto(即boto2,旧版amazon.aws.ec2模块依赖的SDK)本身不支持读取~/.aws/config中的role_arn、credential_source这类自动角色扮演配置,这类配置是AWS CLI和boto3才支持的特性,因此boto2只会直接拉取EC2实例元数据中的第一账号凭证,导致实例创建在第一账号下。

  • 方案1:Playbook内先调用STS获取跨账号临时凭证,再传入EC2模块(最稳妥,无需调整依赖)
    先使用STS角色扮演模块获取第二账号的临时访问凭证,再将凭证参数显式传给EC2创建模块,示例如下:

    - name: 获取第二账号角色临时凭证
      community.aws.aws_sts_assume_role:
        role_arn: "arn:aws:iam::123:role/assume_role"
        role_session_name: "cross_account_ec2_create"
      register: assumed_creds
    
    - name: 在第二账号创建EC2实例
      amazon.aws.ec2:
        aws_access_key: "{{ assumed_creds.sts_creds.access_key }}"
        aws_secret_key: "{{ assumed_creds.sts_creds.secret_key }}"
        security_token: "{{ assumed_creds.sts_creds.session_token }}"
        # 以下补充你原本的EC2配置参数
        instance_type: t2.micro
        image: ami-xxxxxx
        key_name: your_key_pair
        region: cn-northwest-1
    

    注意需要提前确保:第一账号EC2绑定的IAM角色具备sts:AssumeRole权限,且第二账号的assume_role角色的信任策略允许第一账号的EC2角色扮演。

  • 方案2:通过环境变量注入临时凭证(无需修改Playbook内容)
    运行Playbook前先调用AWS CLI获取跨账号凭证,导出为boto2支持的凭证环境变量后再执行Playbook,示例命令如下:

    # 安装依赖jq(若未安装)
    yum install -y jq
    # 调用STS获取临时凭证
    CREDS=$(aws sts assume-role --role-arn arn:aws:iam::123:role/assume_role --role-session-name ec2_create_session)
    # 导出凭证环境变量
    export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r '.Credentials.AccessKeyId')
    export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r '.Credentials.SecretAccessKey')
    export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r '.Credentials.SessionToken')
    # 执行Ansible Playbook
    ansible-playbook your_playbook.yml
    
  • 方案3:替换为新版EC2模块(长期适配方案)
    旧版amazon.aws.ec2模块已被废弃,替换为新版amazon.aws.ec2_instance模块即可,该模块基于boto3开发,原生支持~/.aws/config中的自动角色扮演配置,仅需将你现有Playbook中的EC2参数适配新版模块即可,大部分参数和旧版兼容,改造成本很低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:24:01