20.12. 単一の Ansible タスクで複数の IdM sudo ルールを管理する
ansible-freeipa
モジュールで利用可能な sudorules
オプションを使用すると、1 つの Ansible タスクに複数の Identity Management (IdM)の sudo
ルールが存在するか、または存在させないようにすることができます。このオプションを使用すると、sudo
ルールをより簡単に定義し、より効率的に実行できるようになります。
前提条件
コントロールノードでは、
- Ansible バージョン 2.14 以降を使用している。
- RHEL 9.6 以降を使用している。
-
ansible-freeipa
パッケージがインストールされている。 - ~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名(FQDN)を使用して Ansible インベントリーファイル を作成した(この例の場合)。
-
この例では、secret.yml Ansible vault に
ipaadmin_password
が保存されていること、および secret.yml ファイルを保護するパスワードを格納しているファイルにアクセスできることを前提としています。
-
ターゲットノード (
ansible-freeipa
モジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。
この例ではさらに以下を前提としています。
- IdM に user01 および user02 ユーザーが存在する。
- IdM に、usergroup01 ユーザーグループが存在する。
- IdM に、hostgroup01 および hostgroup02 ホストグループが存在する。
手順
~/MyPlaybooks/ ディレクトリーに移動します。
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! 次の内容を含む ensure-presence-of-multiple-sudorules-in-a-task.yml ファイルを作成します。
--- - name: Playbook to handle sudorules hosts: ipaserver become: true tasks: # Ensure sudo command name: /usr/sbin/dmidecode is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/dmidecode # Ensure sudo command /usr/sbin/reboot is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/reboot # Ensure sudo command /usr/bin/yum is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/bin/yum # Ensure a sudo command group is present - ipasudocmdgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: sudogroup01 sudocmd: - /usr/sbin/dmidecode - /usr/sbin/reboot - name: Ensure multiple sudo rules are present using batch mode ipasudorule: ipaadmin_password: "{{ ipaadmin_password }}" sudorules: - name: testrule01 user: - user01 - user02 group: - usergroup01 allow_sudocmd: - /usr/bin/yum allow_sudocmdgroup: - sudogroup01 - name: testrule02 hostgroup: - hostgroup01 - hostgroup02
--- - name: Playbook to handle sudorules hosts: ipaserver become: true tasks: # Ensure sudo command name: /usr/sbin/dmidecode is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/dmidecode # Ensure sudo command /usr/sbin/reboot is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/reboot # Ensure sudo command /usr/bin/yum is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/bin/yum # Ensure a sudo command group is present - ipasudocmdgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: sudogroup01 sudocmd: - /usr/sbin/dmidecode - /usr/sbin/reboot - name: Ensure multiple sudo rules are present using batch mode ipasudorule: ipaadmin_password: "{{ ipaadmin_password }}" sudorules: - name: testrule01 user: - user01 - user02 group: - usergroup01 allow_sudocmd: - /usr/bin/yum allow_sudocmdgroup: - sudogroup01 - name: testrule02 hostgroup: - hostgroup01 - hostgroup02
Copy to Clipboard Copied! - 注記
-
sudorules
オプションを使用すると、特定のsudo
ルールにのみ適用される複数のsudo
ルール変数を指定できます。このsudo
ルールはname
変数によって定義されます。これは、sudorules
オプションの唯一の必須変数です。この例では、user
、group
、allow_sudocmd
、およびallow_sudocmdgroup
変数が、testrule01sudo
ルールに適用されます。
- ファイルを保存します。
Ansible Playbook を実行します。Playbook ファイル、secret.yml ファイルを保護するパスワードを格納するファイル、およびインベントリーファイルを指定します。
ansible-playbook --vault-password-file=password_file -v -i inventory ensure-presence-of-multiple-sudorules-in-a-task.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-presence-of-multiple-sudorules-in-a-task.yml
Copy to Clipboard Copied!