この記事は、カサレアル 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後のクレデンシャル情報等を使用します。