AnsiblePlaybookでの特権昇格を理解する
ターミナルで実行する通常のコマンドと同様に、一部のタスクでは、Ansibleがリモートノードで正常に実行するために特別な特権が必要になります。
Ansibleで特権昇格がどのように機能するかを理解して、適切なアクセス許可でタスクを実行できるようにすることが重要です。 デフォルトでは、タスクは接続ユーザーとして実行されます。これは、 root か、インベントリファイル内のリモートノードにSSHアクセスできる通常のユーザーのいずれかです。
sudo
を必要とするコマンドなど、拡張された権限を持つコマンドを実行するには、become
ディレクティブをyes
に設定してプレイに含める必要があります。 これは、そのプレイ内のすべてのタスクに有効なグローバル設定として、またはタスクごとに適用される個別の命令として実行できます。 sudo
ユーザーがリモートノード内でどのように設定されているかによっては、ユーザーのsudo
パスワードも提供する必要がある場合があります。 次の例では、root権限を必要とするタスクであるapt
キャッシュを更新します。
ansible-practice
ディレクトリにplaybook-07.yml
という名前の新しいファイルを作成します。
nano ~/ansible-practice/playbook-07.yml
次に、新しいプレイブックファイルに次の行を追加します。
〜/ ansible-practice / playbook-07.yml
--- - hosts: all become: yes tasks: - name: Update apt cache apt: update_cache: yes
完了したら、ファイルを保存して閉じます。
このプレイブックを実行するには、ansible-playbook
コマンド内に-K
オプションを含める必要があります。 これにより、Ansibleは指定されたユーザーのsudo
パスワードの入力を求めます。
ansible-playbook -i inventory playbook-07.yml -u sammy -K
タスクやプレイの実行中に切り替えるユーザーを変更することもできます。 これを行うには、become_user
ディレクティブを切り替え先のリモートユーザーの名前に設定します。 これは、sudo
に依存するプレイブックにいくつかのタスクがある場合に役立ちますが、通常のユーザーとして実行する必要があるいくつかのタスクもあります。
次の例では、このプレイのすべてのタスクがデフォルトでsudo
で実行されることを定義しています。 これは、hosts
定義の直後のプレイレベルで設定されます。 最初のタスクは、root
特権を使用して/tmp
にファイルを作成します。これは、デフォルトのbecame_user
値であるためです。 ただし、最後のタスクは独自のbecome_user
を定義します。
ansible-practice
ディレクトリにplaybook-08.yml
という名前の新しいファイルを作成します。
nano ~/ansible-practice/playbook-08.yml
次のコンテンツを新しいプレイブックファイルに追加します。
〜/ ansible-practice / playbook-08.yml
--- - hosts: all become: yes vars: user: "{{ ansible_env.USER }}" tasks: - name: Create root file file: path: /tmp/my_file_root state: touch - name: Create user file become_user: "{{ user }}" file: path: /tmp/my_file_{{ user }} state: touch
終了したら、ファイルを保存して閉じます。
ansible_env.USER
ファクトには、接続しているユーザーのユーザー名が含まれています。これは、-u
オプションを指定してansible-playbook
コマンドを実行するときに実行時に定義できます。 このガイド全体を通して、sammy
として接続しています。
ansible-playbook -i inventory playbook-08.yml -u sammy -K
OutputBECOME password: PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.10] TASK [Create root file] ********************************************************************************* changed: [203.0.113.10] TASK [Create user file] ********************************************************************************* changed: [203.0.113.10] PLAY RECAP ********************************************************************************************** 203.0.113.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
プレイブックの実行が終了したら、リモートノードにログオンして、/tmp
にそれぞれ異なる所有権情報を持つ2つの新しいファイルが作成されたことを確認できます。
ssh [email protected]
ls -la /tmp/my_file*
Output-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root -rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy
Ansibleでの特権昇格の詳細については、公式ドキュメントを参照してください。