Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:ansible:playbook_example_13 [07.11.2022 19:59. ] – [Zusammenfassung I] djangolinux:ansible:playbook_example_13 [28.11.2022 18:48. ] (aktuell) – Playbook mit Hilfe des GH-Plugin eingebunden. django
Zeile 4: Zeile 4:
 Im Eingangskapitel **[[basics#grundlagen|Grundlagen]]** haben wir uns mit der **[[basics#installation|Installation]]** bereits befasst. Mit den Hintergrundinformationen haben wir uns auch schon in den beiden Kapiteln **[[basics#playbooks|Playbooks]]** und **[[basics#yaml_-_was_ist_das|YAML - was ist das?]]** eingehend beschäftigt, sowie **[[playbooks|erste Erfahrungen mit Playbooks]]** gesammelt. Im Eingangskapitel **[[basics#grundlagen|Grundlagen]]** haben wir uns mit der **[[basics#installation|Installation]]** bereits befasst. Mit den Hintergrundinformationen haben wir uns auch schon in den beiden Kapiteln **[[basics#playbooks|Playbooks]]** und **[[basics#yaml_-_was_ist_das|YAML - was ist das?]]** eingehend beschäftigt, sowie **[[playbooks|erste Erfahrungen mit Playbooks]]** gesammelt.
  
-===== Aufgabenstellung =====+===== Aufgabenstellung =====
 Oft steht man vor der Herausforderung, Admin-Konten auf unzähligen Zielsystemen anzulegen und wieder zu löschen. So sind im Zuge eines onboarding von neuen Admins jeweils Konten anzulegen und mit Passworten und Schlüsselmaterial zu versorgen. Beim Ausscheiden eines Admins, müssen dessen|ihre Konten samt Passworten und Schlüssel wieder gelöscht werden.  Oft steht man vor der Herausforderung, Admin-Konten auf unzähligen Zielsystemen anzulegen und wieder zu löschen. So sind im Zuge eines onboarding von neuen Admins jeweils Konten anzulegen und mit Passworten und Schlüsselmaterial zu versorgen. Beim Ausscheiden eines Admins, müssen dessen|ihre Konten samt Passworten und Schlüssel wieder gelöscht werden. 
 <WRAP center round important 60%> <WRAP center round important 60%>
Zeile 11: Zeile 11:
 Möchte ein bestehender Admin sein|ihr Passwort oder Schlüssel ändern, kann dies auch zu einer zeitraubenden Tätigkeit ausarten. Was liegt also näher das Anlegen und Löschen der Konten samt Passwörter und Schlüsselmaterial sowie die Pflege dieser Daten mit Hilfe von Ansible zu automatisieren?  Möchte ein bestehender Admin sein|ihr Passwort oder Schlüssel ändern, kann dies auch zu einer zeitraubenden Tätigkeit ausarten. Was liegt also näher das Anlegen und Löschen der Konten samt Passwörter und Schlüsselmaterial sowie die Pflege dieser Daten mit Hilfe von Ansible zu automatisieren? 
  
-===== Lösung =====+===== Lösung =====
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
Zeile 90: Zeile 90:
 Das Playbook an sich ist relativ unspektakulär, wird doch nur die zugehörige Rolle eingebunden, wie wir hier sehen. Das Playbook an sich ist relativ unspektakulär, wird doch nur die zugehörige Rolle eingebunden, wie wir hier sehen.
    $ vim ~/ansible/playbooks/admin_updates.yml    $ vim ~/ansible/playbooks/admin_updates.yml
-<file c++ admin_updates.yml>--- 
-# Ansible Playbook zum Anlegen, Aktualisieren und Löschen der Administratoren, inkl. der 
-# zugehörigen Passwörter und SSH-Schlüssel, basierend auf den Angaben im Inventory. Admins 
-# mit dem state "present" werden angelegt bzw. deren Passworte und Schlüssel aktualisiert. 
-# Admins mit dem state "absent" werden auf den Hosts gelöscht und könen anschließend aus 
-# dem Inventory entfernt werden. 
-# Aufruf via für alles Hosts: 
-#         $ ansible-playbook playbooks/admin_updates.yml 
-# bzw. für einzelne Hosts: 
-#         $ ansible-playbook playbooks/admin_updates.yml --limit <-hostnames-> 
  
-- name: admin_updates.yml                   # Name des Playbooks +{{gh> https://gitlab.nausch.org/django/example_13/-/blob/main/playbooks/admin_updates.yml }}
-  hosts: DMZ                                # Host-Gruppe für den das Playbook gelten soll+
  
-  roles: 
-    - role: admins                          # Admins anlegne, ändern und|oder löschen 
-      tags: admins                          # Tag-Kennzeichnung der definierten Rolle 
-... 
-</file> 
  
 === Rolle und Tasks === === Rolle und Tasks ===
Zeile 116: Zeile 100:
 Nun legen wir unseren Main-Task an. Nun legen wir unseren Main-Task an.
    $ vim ~/ansible/roles/admins/tasks/main.yml    $ vim ~/ansible/roles/admins/tasks/main.yml
- +{{ghhttps://gitlab.nausch.org/django/example_13/-/blob/main/roles/admins/tasks/main.yml }}
-<file c++ main.yml>--- # User unter Archlinux erstellen +
-- includeuseranlage.yml             # Admin-Gruppe und -User pflegen +
-- include: sudoers.yml                # Admins der Gruppe wheel sudoers zuweisen +
-... +
-</file>+
  
 Was nun noch fehlt sind die beiden eigentlichen Tasks. Als erstes legen wir den Task an, mit Hilfe dessen die jeweilige(n) Admin-Gruppe(n) und User gepflegt werden. Was nun noch fehlt sind die beiden eigentlichen Tasks. Als erstes legen wir den Task an, mit Hilfe dessen die jeweilige(n) Admin-Gruppe(n) und User gepflegt werden.
    $ vim ~/ansible/roles/admins/tasks/useranlage.yml    $ vim ~/ansible/roles/admins/tasks/useranlage.yml
 +{{gh> https://gitlab.nausch.org/django/example_13/-/blob/main/roles/admins/tasks/useranlage.yml }}
  
-<file c++ useranlage.yml>--- +Zu guter Letzt legen wir noch den Task an, damit die Admins, die Mitglied der Gruppe **''wheels''** sind, auch sudo-Rechte erlangen können.
- +
-- name: "Sicherstellen dass die Gruppen für Admin-User existieren" +
-  ansible.builtin.group: +
-    gid: '{{ item.ids }}' +
-    name: '{{ item.name }}' +
-    state: present +
-  with_items: '{{ linux_admins }}' +
- +
-- name: "Sicherstellen dass die Admin-User existieren" +
-  ansible.builtin.user: +
-    append: true +
-    comment: '{{ item.user }}' +
-    create_home: true +
-    force: true +
-    state: '{{ item.state }}' +
-    group: '{{ item.name }}' +
-    groups: '{{ item.groups }}' +
-    name: '{{ item.name }}' +
-    password: '{{ item.pwd }}' +
-    shell: '{{ item.shell }}' +
-    uid: '{{ item.ids }}' +
-    remove: true +
-  with_items: "{{ linux_admins }}" +
- +
-- name: "Gruppe entfernen, sofern der User zum Löschen gekennzeichnet ist mit absent im Inventory/Vault" +
-  ansible.builtin.group: +
-    gid: '{{ item.ids }}' +
-    name: '{{ item.name }}' +
-    state: '{{ item.state }}' +
-  with_items: '{{ linux_admins }}' +
- +
-- name: "SSH-Client-Verzeichnis anlegen" +
-  ansible.builtin.file: +
-    path: /home/{{ item.name }}/.ssh +
-    state: directory +
-    owner: '{{ item.name }}' +
-    group: '{{ item.name }}' +
-    mode: '0700' +
-  when: ' item.state == "present"' +
-  with_items: '{{ linux_admins }}' +
- +
-- name: "SSH-Key des Admins hinterlegen" +
-  ansible.builtin.copy: +
-    dest: /home/{{ item.name }}/.ssh/authorized_keys +
-    content: | +
-      {{ item.key }} +
-    owner: '{{ item.name }}' +
-    group: '{{ item.name }}' +
-    mode: '0600' +
-  when: ' item.state == "present"' +
-  with_items: '{{ linux_admins }}' +
- +
-- name: "SSH-Client-Verzeichnis entfernen, sofern der User zum Löschen gekennzeichnet ist mit absent im Inventory/Vault" +
-  ansible.builtin.file: +
-    path: /home/{{ item.name }}/.ssh +
-    state: absent +
-  when: ' item.state == "absent"+
-  with_items: '{{ linux_admins }}' +
- +
-...</file> +
- +
-Zu guter Letzt legen wir noch den Task an, damit die Admins, die Miitglied der Gruppe **''wheels''** sind, auch sudo-Rechte erlangen können.+
    $ vim ~/ansible/roles/admins/tasks/sudoers.yml    $ vim ~/ansible/roles/admins/tasks/sudoers.yml
 +{{gh> https://gitlab.nausch.org/django/example_13/-/blob/main/roles/admins/tasks/sudoers.yml }}
  
-<file c++ sudoers.yml>--- +===== Ausführung =====
- +
-- name: "Die Gruppe wheel sudo Rechte zuweisen" +
-  ansible.builtin.copy: +
-    content: "# Generated by Ansible, do not edit manually!\n# Allows people in group wheel to run all command\n%wheel    ALL=(ALL)       ALL\n" +
-    dest: /etc/sudoers.d/10_passwd_sudo_wheel +
-    owner: root +
-    group: root +
-    mode: "0440" +
-    validate: visudo -cf %s +
- +
-...</file> +
- +
-===== Ausführung =====+
 Mit Hilfe dieses Playbooks können alle erforderlichen Konfigurationsschritte reproduzierbar und beliebig oft abgesetzt werden. Somit können neue Admins hinzugefügt, SSH-Keys und Passwörter ausgerollt bzw. aktualisiert werden und natürlich bestehende Admin-Konten auch bei Bedarf wieder gelöscht werden. Mit Hilfe dieses Playbooks können alle erforderlichen Konfigurationsschritte reproduzierbar und beliebig oft abgesetzt werden. Somit können neue Admins hinzugefügt, SSH-Keys und Passwörter ausgerollt bzw. aktualisiert werden und natürlich bestehende Admin-Konten auch bei Bedarf wieder gelöscht werden.
  
  • linux/ansible/playbook_example_13.1667851175.txt.gz
  • Zuletzt geändert: 07.11.2022 19:59.
  • von django