Chapter 27. Delegating permissions to user groups to manage users using Ansible playbooks
Chapter 27. Delegating permissions to user groups to manage users using Ansible playbooks Delegation is one of the access control methods in IdM, along with self-service rules and role-based access control (RBAC). You can use delegation to assign permissions to one group of users to manage entries for another group of users. This section covers the following topics: Delegation rules Creating the Ansible inventory file for IdM Using Ansible to ensure that a delegation rule is present Using Ansible to ensure that a delegation rule is absent Using Ansible to ensure that a delegation rule has specific attributes Using Ansible to ensure that a delegation rule does not have specific attributes 27.1. Delegation rules You can delegate permissions to user groups to manage users by creating delegation rules . Delegation rules allow a specific user group to perform write (edit) operations on specific attributes for users in another user group. This form of access control rule is limited to editing the values of a subset of attributes you specify in a delegation rule; it does not grant the ability to add or remove whole entries or control over unspecified attributes. Delegation rules grant permissions to existing user groups in IdM. You can use delegation to, for example, allow the managers user group to manage selected attributes of users in the employees user group. 27.2. Creating an Ansible inventory file for IdM When working with Ansible, it is good practice to create, in your home directory, a subdirectory dedicated to Ansible playbooks that you copy and adapt from the /usr/share/doc/ansible-freeipa/* and /usr/share/doc/rhel-system-roles/* subdirectories. This practice has the following advantages: You can find all your playbooks in one place. You can run your playbooks without invoking root privileges. Procedure Create a directory for your Ansible configuration and playbooks in your home directory: Change into the ~/MyPlaybooks/ directory: Create the ~/MyPlaybooks/ansible.cfg file with the following content: Create the ~/MyPlaybooks/inventory file with the following content: This configuration defines two host groups, eu and us , for hosts in these locations. Additionally, this configuration defines the ipaserver host group, which contains all hosts from the eu and us groups. 27.3. Using Ansible to ensure that a delegation rule is present The following procedure describes how to use an Ansible playbook to define privileges for a new IdM delegation rule and ensure its presence. In the example, the new basic manager attributes delegation rule grants the managers group the ability to read and write the following attributes for members of the employees group: businesscategory departmentnumber employeenumber employeetype Prerequisites On the control node: You are using Ansible version 2.13 or later. You have installed the ansible-freeipa package. The example assumes that in the ~/ MyPlaybooks / directory, you have created an Ansible inventory file with the fully-qualified domain name (FQDN) of the IdM server. The example assumes that the secret.yml Ansible vault stores your ipaadmin_password . The target node, that is the node on which the ansible-freeipa module is executed, is part of the IdM domain as an IdM client, server or replica. Procedure Navigate to the ~/ MyPlaybooks / directory: Make a copy of the delegation-present.yml file located in the /usr/share/doc/ansible-freeipa/playbooks/delegation/ directory: Open the delegation-present-copy.yml Ansible playbook file for editing. Adapt the file by setting the following variables in the ipadelegation task section: Set the ipaadmin_password variable to the password of the IdM administrator. Set the name variable to the name of the new delegation rule. Set the permission variable to a comma-separated list of permissions to grant: read and write . Set the attribute variable to a list of attributes the delegated user group can manage: businesscategory , departmentnumber , employeenumber , and employeetype . Set the group variable to the name of the group that is being given access to view or modify attributes. Set the membergroup variable to the name of the group whose attributes can be viewed or modified. This is the modified Ansible playbook file for the current example: Save the file. Run the Ansible playbook. Specify the playbook file, the file storing the password protecting the secret.yml file, and the inventory file: Additional resources Delegation rules The README-delegation.md file in the /usr/share/doc/ansible-freeipa/ directory Sample playbooks in the /usr/share/doc/ansible-freeipa/playbooks/ipadelegation directory 27.4. Using Ansible to ensure that a delegation rule is absent The following procedure describes how to use an Ansible playbook to ensure a specified delegation rule is absent from your IdM configuration. The example below describes how to make sure the custom basic manager attributes delegation rule does not exist in IdM. Prerequisites On the control node: You are using Ansible version 2.13 or later. You have installed the ansible-freeipa package. The example assumes that in the ~/ MyPlaybooks / directory, you have created an Ansible inventory file with the fully-qualified domain name (FQDN) of the IdM server. The example assumes that the secret.yml Ansible vault stores your ipaadmin_password . The target node, that is the node on which the ansible-freeipa module is executed, is part of the IdM domain as an IdM client, server or replica. Procedure Navigate to the ~/ MyPlaybooks / directory: Make a copy of the delegation-absent.yml file located in the /usr/share/doc/ansible-freeipa/playbooks/delegation/ directory: Open the delegation-absent-copy.yml Ansible playbook file for editing. Adapt the file by setting the following variables in the ipadelegation task section: Set the ipaadmin_password variable to the password of the IdM administrator. Set the name variable to the name of the delegation rule. Set the state variable to absent . This is the modified Ansible playbook file for the current example: Save the file. Run the Ansible playbook. Specify the playbook file, the file storing the password protecting the secret.yml file, and the inventory file: Additional resources Delegation rules The README-delegation.md file in the /usr/share/doc/ansible-freeipa/ directory Sample playbooks in the /usr/share/doc/ansible-freeipa/playbooks/ipadelegation directory 27.5. Using Ansible to ensure that a delegation rule has specific attributes The following procedure describes how to use an Ansible playbook to ensure that a delegation rule has specific settings. You can use this playbook to modify a delegation role you have previously created. In the example, you ensure the basic manager attributes delegation rule only has the departmentnumber member attribute. Prerequisites On the control node: You are using Ansible version 2.13 or later. You have installed the ansible-freeipa package. The example assumes that in the ~/ MyPlaybooks / directory, you have created an Ansible inventory file with the fully-qualified domain name (FQDN) of the IdM server. The example assumes that the secret.yml Ansible vault stores your ipaadmin_password . The target node, that is the node on which the ansible-freeipa module is executed, is part of the IdM domain as an IdM client, server or replica. The basic manager attributes delegation rule exists in IdM. Procedure Navigate to the ~/ MyPlaybooks / directory: Make a copy of the delegation-member-present.yml file located in the /usr/share/doc/ansible-freeipa/playbooks/delegation/ directory: Open the delegation-member-present-copy.yml Ansible playbook file for editing. Adapt the file by setting the following variables in the ipadelegation task section: Set the ipaadmin_password variable to the password of the IdM administrator. Set the name variable to the name of the delegation rule to modify. Set the attribute variable to departmentnumber . Set the action variable to member . This is the modified Ansible playbook file for the current example: Save the file. Run the Ansible playbook. Specify the playbook file, the file storing the password protecting the secret.yml file, and the inventory file: Additional resources Delegation rules The README-delegation.md file in the /usr/share/doc/ansible-freeipa/ directory The sample playbooks in the /usr/share/doc/ansible-freeipa/playbooks/ipadelegation directory 27.6. Using Ansible to ensure that a delegation rule does not have specific attributes The following procedure describes how to use an Ansible playbook to ensure that a delegation rule does not have specific settings. You can use this playbook to make sure a delegation role does not grant undesired access. In the example, you ensure the basic manager attributes delegation rule does not have the employeenumber and employeetype member attributes. Prerequisites On the control node: You are using Ansible version 2.13 or later. You have installed the ansible-freeipa package. The example assumes that in the ~/ MyPlaybooks / directory, you have created an Ansible inventory file with the fully-qualified domain name (FQDN) of the IdM server. The example assumes that the secret.yml Ansible vault stores your ipaadmin_password . The target node, that is the node on which the ansible-freeipa module is executed, is part of the IdM domain as an IdM client, server or replica. The basic manager attributes delegation rule exists in IdM. Procedure Navigate to the ~/ MyPlaybooks / directory: Make a copy of the delegation-member-absent.yml file located in the /usr/share/doc/ansible-freeipa/playbooks/delegation/ directory: Open the delegation-member-absent-copy.yml Ansible playbook file for editing. Adapt the file by setting the following variables in the ipadelegation task section: Set the ipaadmin_password variable to the password of the IdM administrator. Set the name variable to the name of the delegation rule to modify. Set the attribute variable to employeenumber and employeetype . Set the action variable to member . Set the state variable to absent . This is the modified Ansible playbook file for the current example: Save the file. Run the Ansible playbook. Specify the playbook file, the file storing the password protecting the secret.yml file, and the inventory file: Additional resources Delegation rules The README-delegation.md file in the /usr/share/doc/ansible-freeipa/ directory. Sample playbooks in the /usr/share/doc/ansible-freeipa/playbooks/ipadelegation directory
mkdir ~/MyPlaybooks/ cd ~/MyPlaybooks [defaults] inventory = /home/ <username> /MyPlaybooks/inventory [privilege_escalation] become=True [eu] server.idm.example.com [us] replica.idm.example.com [ipaserver:children] eu us cd ~/ MyPlaybooks / cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.yml --- - name: Playbook to manage a delegation rule hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" is present ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" permission: read, write attribute: - businesscategory - departmentnumber - employeenumber - employeetype group: managers membergroup: employees ansible-playbook --vault-password-file=password_file -v -i ~/ MyPlaybooks /inventory delegation-present-copy.yml cd ~/ MyPlaybooks> / cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.yml --- - name: Delegation absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" is absent ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" state: absent ansible-playbook --vault-password-file=password_file -v -i ~/ MyPlaybooks /inventory delegation-absent-copy.yml cd ~/ MyPlaybooks / cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.yml --- - name: Delegation member present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" attribute: - departmentnumber action: member ansible-playbook --vault-password-file=password_file -v -i ~/ MyPlaybooks /inventory delegation-member-present-copy.yml cd ~/ MyPlaybooks / cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.yml --- - name: Delegation member absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" attribute: - employeenumber - employeetype action: member state: absent ansible-playbook --vault-password-file=password_file -v -i ~/ MyPlaybooks /inventory delegation-member-absent-copy.yml