【问题标题】:Switching role works from Console (AWS GUI), but not from Ansible Script切换角色可以从控制台(AWS GUI)工作,但不能从 Ansible 脚本
【发布时间】:2018-07-25 18:53:05
【问题描述】:

问题:我需要通过脚本切换角色。 sts:AssumeRole 权限是否足够?

阐述: 我通过控制台登录到启用 MFA 的 AWS 账户。我默认登录的这个角色没有执行任何操作的权限。 为了旋转 EC2,我需要切换角色。 我转到“切换角色”,并使用帐户和角色切换到有权创建 EC2 实例的不同角色。 我想通过 Ansible 脚本实现同样的目的。

我的 yml 脚本的 sn-p 如下所示:

    tasks:
  - sts_assume_role:
      role_arn: "{{role_arn}}"
      role_session_name: "{{role_session_name}}"
      region: "{{app_region}}"
      aws_access_key: "{{ aws_access_key_id }}"
      aws_secret_key: "{{ aws_secret_access_key }}"
    register: assumed_role
  - debug:
      msg: "aws_access_key: {{ assumed_role.sts_creds.access_key }} ,
            aws_secret_key: {{ assumed_role.sts_creds.secret_key }},
            security_token: {{ assumed_role.sts_creds.session_token }}"

但是,这会导致类似于以下的错误:

调用 AssumeRole 时发生客户端错误 (AccessDenied) 操作:用户:arn:aws:iam:::user/ 不是 授权执行: sts:AssumeRole 对资源: arn:aws:iam:::role/

这也是我从 aws cli 得到的错误。

虽然我知道我没有 sts:AssumeRole 权限来完成此操作,但我已向我公司的内部团队提出了这个问题。然而,由于某些未知的原因,即使有多次跟进,他们也花费了太长时间。

我只想知道获得此权限就足够了,还是我需要更多权限?当然,这是假设 sts:AssumeRole 是正确的特权。 另外,通过脚本执行此操作时,我是否需要在任何地方进行 MFA?我仅在第一次从控制台登录到我的默认帐户时手动使用 MFA。

提前感谢您的帮助,如果这听起来太简单了,我深表歉意,但我只是想在时间紧迫的情况下启动并运行。

【问题讨论】:

    标签: amazon-web-services ansible


    【解决方案1】:

    如果没有角色的信任策略或 IAM 用户的权限策略,我只能猜测,要么 IAM 用户附加了 enforce MFA policy,即拒绝任何事情,除非 MFAed 或您尝试承担的角色需要 you to use MFA

    因此,您可以通过传递 MFA 令牌来使用 GetSessionToken 来获取临时凭证并制作 AssumeRole API,或者在您是 calling the AssumeRole API 时传递 MFA 令牌。

    【讨论】:

      【解决方案2】:

      所以我想问题不在于权限,而是因为 boto2 (https://github.com/ansible/ansible-modules-extras/issues/2532) 存在问题。

      我不得不为 sts_assume_role 添加额外的参数:

       tasks:
        - sts_assume_role:
            role_arn: "{{role_arn}}"
            mfa_serial_number: "{{mfa_serial}}"
            mfa_token: "{{ lookup('env', 'MFA') }}"
            role_session_name: "{{role_session_name}}"
            region: "{{app_region}}"
            aws_access_key: "{{ aws_access_key_id }}"
            aws_secret_key: "{{ aws_secret_access_key }}"
      

      @Sudo 在强制执行 MFA 策略的意义上是正确的,但损坏的 boto2 插件是造成痛苦的主要原因,因为即使在输入 MFA 详细信息后,CLI 仍然无法为我工作(避风港) t 尝试修复它,因为我的最终目标是通过 ansible 切换角色。

      我从 aws docs 获得的一个 python 代码证明权限不是问题,但是一些插件被破坏了,导致了这个发现。(https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sample-code.html)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2019-08-10
        • 2019-01-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        相关资源
        最近更新 更多