mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Ansible] Assume Roleモジュールを使う

この記事は、カサレアル Advent Calendar 2022 の18日目のエントリです。

はじめに

最近、AnsibleのAWSコレクションにamazon.awsとcommunity.awsの2つがあることを知りました。
community.awsのほうにAssume Roleモジュールがあったので、それを試してみます。

なお、AssumeRoleってなに?という方は、記憶に残しやすい記事がありますのでご参照ください。


環境

  • ansible core: 2.13.7
  • community.aws: 5.0.0

community.awsの最新版は、Ansible Core 2.11.0以前のバージョンをサポートしていません。

Ansible version compatibility Tested with the Ansible Core 2.12, and 2.13 releases, and the current development version of Ansible. Ansible Core versions before 2.11.0 are not supported. In particular, Ansible Core 2.10 and Ansible 2.9 are not supported.


AssumeRole する Playbook

sts_assume_roleモジュールの実行前後で、ARNやクレデンシャル情報等を出力します。

---
- hosts: localhost
  gather_facts: no

  tasks:
    - shell:
        cmd: aws sts get-caller-identity
      register: result

    - name: before
      debug:
        msg: "{{ result.stdout }}"

    - name: set assume_role
      sts_assume_role:
        role_arn: "arn:aws:iam::*******:role/********"  #引き継ぎたいRoleを指定
        role_session_name: "Test_Role"
      register:  assumed_role

    - name: after
      debug:
        msg: "{{ assumed_role }}"


Playbook の実行結果

sts_assume_roleモジュールにより、ARNや一時的なクレデンシャル情報等が設定されました(ほぼ伏字ですが)。

$ ansible-playbook assume_role.yml 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] ********************************************************************

TASK [shell] ************************************************************************
changed: [localhost]

TASK [before] ***********************************************************************
ok: [localhost] => {
    "msg": {
        "Account": "***********",
        "Arn": "arn:aws:iam::***********:user/***********",
        "UserId": "***********"
    }
}

TASK [set assume_role] **************************************************************
changed: [localhost]

TASK [after] ************************************************************************
ok: [localhost] => {
    "msg": {
        "changed": true,
        "failed": false,
        "sts_creds": {
            "access_key": "***********",
            "expiration": "2022-12-17T17:31:46+00:00",
            "secret_key": "**********************",
            "session_token": "*********************************"
        },
        "sts_user": {
            "arn": "arn:aws:sts::***********:assumed-role/***********/Test_Role",
            "assumed_role_id": "***********:Test_Role"
        }
    }
}

PLAY RECAP **************************************************************************
localhost : ok=4  changed=2  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   

$ 


以降のタスクでaws_access_key: "{{ assumed_role.sts_creds.access_key }}"のように指定し、AssumeRole後のクレデンシャル情報等を使用します。