AnsiblePlaybookでの特権昇格を理解する
ターミナルで実行する通常のコマンドと同様に、一部のタスクでは、Ansibleがリモートノードで正常に実行するために特別な特権が必要になります。
Ansibleで特権昇格がどのように機能するかを理解して、適切なアクセス許可でタスクを実行できるようにすることが重要です。 デフォルトでは、タスクは接続ユーザーとして実行されます。これは、 root か、インベントリファイル内のリモートノードにSSHアクセスできる通常のユーザーのいずれかです。
必要なコマンドなど、拡張された権限でコマンドを実行するには sudo、を含める必要があります become ディレクティブをに設定 yes あなたの演劇で。 これは、そのプレイ内のすべてのタスクに有効なグローバル設定として、またはタスクごとに適用される個別の命令として実行できます。 どのようにあなたの sudo ユーザーがリモートノード内に設定されている場合は、ユーザーの sudo パスワード。 次の例では、 apt キャッシュ、root権限を必要とするタスク。
と呼ばれる新しいファイルを作成します playbook-07.yml あなたの中で ansible-practice ディレクトリ:
- nano ~/ansible-practice/playbook-07.yml
次に、新しいプレイブックファイルに次の行を追加します。
---
- hosts: all
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
完了したら、ファイルを保存して閉じます。
このプレイブックを実行するには、 -K 内のオプション ansible-playbook 指図。 これにより、Ansibleは sudo 指定されたユーザーのパスワード。
- ansible-playbook -i inventory playbook-07.yml -u sammy -K
タスクやプレイの実行中に切り替えるユーザーを変更することもできます。 これを行うには、 become_user 切り替えたいリモートユーザーの名前へのディレクティブ。 これは、プレイブックに依存するタスクがいくつかある場合に便利です。 sudo、だけでなく、通常のユーザーとして実行する必要があるいくつかのタスク。
次の例では、このプレイのすべてのタスクが次のように実行されることを定義しています。 sudo デフォルトでは。 これは、プレイレベルで設定されます。 hosts 意味。 最初のタスクはでファイルを作成します /tmp を使用して root これがデフォルトであるため、特権 became_user 価値。 ただし、最後のタスクは独自のタスクを定義します become_user.
と呼ばれる新しいファイルを作成します playbook-08.yml あなたの中で ansible-practice ディレクトリ:
- nano ~/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
終了したら、ファイルを保存して閉じます。
The ansible_env.USER factには、接続ユーザーのユーザー名が含まれます。これは、実行時に定義できます。 ansible-playbook とのコマンド -u オプション。 このガイド全体を通して、私たちは次のように接続しています 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
プレイブックの実行が終了したら、リモートノードにログオンして、2つの新しいファイルが作成されたことを確認できます。 /tmp、それぞれ異なる所有権情報を持つ:
- ssh sammy@203.0.113.10
- 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での特権昇格の詳細については、公式ドキュメントを参照してください。