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
Nächste ÜberarbeitungBeide Seiten der Revision
linux:ansible:playbook_example_08 [22.09.2022 14:37. ] – [Script anlegen] djangolinux:ansible:playbook_example_08 [01.06.2024 13:23. ] – [Aufgabenstellung 2 - "erweiterte" Grund-/Basis-Installation für Ansible-Vault] django
Zeile 17: Zeile 17:
  
 ==== Lösung ==== ==== Lösung ====
 +<WRAP center round tip 80%>
 +Der ungeduldigen Leser kann auch direkt zur Tat schreiten und das manuelle Anlegen des Verzeichnisses und des Ansible-Scripts überspringen. Mit Folgendem Befehl erledigt man dies sozusagen auf einem Rutsch:
 +
 +<code> $ mkdir ~/ansible ; wget https://gitlab.nausch.org/django/example_8a/-/archive/main/example_8a-main.tar.gz -O - | tar -xz --strip-components=1 -C ~/ansible</code>
 +
 +Anschliessend kann man direkt **[[#script_starten|zur Ausführung schreiten]]**.
 +</WRAP>
 === Script anlegen === === Script anlegen ===
 Zunächst müssen wir manuell einmal das Verzeichnis **''~/ansible/playbooks''** in dem wir unsere Ansible-Playbooks ablegen werden auf unserer Admin-Workstation bzw. dem **A**nsible-**C**ontroll-**N**ode anlegen. Zunächst müssen wir manuell einmal das Verzeichnis **''~/ansible/playbooks''** in dem wir unsere Ansible-Playbooks ablegen werden auf unserer Admin-Workstation bzw. dem **A**nsible-**C**ontroll-**N**ode anlegen.
Zeile 119: Zeile 126:
         - {directory: "library/"}         - {directory: "library/"}
         - {directory: "module_utils/"}         - {directory: "module_utils/"}
 +        - {directory: "playbooks/"}
         - {directory: "inventories/production/group_vars/"}         - {directory: "inventories/production/group_vars/"}
         - {directory: "inventories/production/host_vars/"}         - {directory: "inventories/production/host_vars/"}
Zeile 220: Zeile 228:
 ok: [localhost] => (item={'directory': 'library/'}) ok: [localhost] => (item={'directory': 'library/'})
 ok: [localhost] => (item={'directory': 'module_utils/'}) ok: [localhost] => (item={'directory': 'module_utils/'})
 +ok: [localhost] => (item={'directory': 'playbooks/'})
 ok: [localhost] => (item={'directory': 'inventories/production/group_vars/'}) ok: [localhost] => (item={'directory': 'inventories/production/group_vars/'})
 ok: [localhost] => (item={'directory': 'inventories/production/host_vars/'}) ok: [localhost] => (item={'directory': 'inventories/production/host_vars/'})
Zeile 272: Zeile 281:
  
  
-===== Aufgabenstellung 2 - "erweiterte" Grund-/Basis-Installation für Ansible-Vault =====+===== Aufgabenstellung 2 - "erweiterte" Grund-/Basis-Installation für Ansible-Vault unter Arch Linux=====
  
 <WRAP center round info 80%> <WRAP center round info 80%>
-Mit Hinblick auf das all umspannende Thema **Sicherheit in der IT** ist eines unserer Hauptaugenmerke, dass schützenswerte Informationen nicht mehr als plain-text in unserer  Ansible-Entwicklungsumgebnung ungeschützt herumliegen.  +Mit Hinblick auf das all umspannende Thema **Sicherheit in der IT** ist eines unserer Hauptaugenmerk, dass schützenswerte Informationen nicht mehr als plain-text in unserer  Ansible-Entwicklungsumgebung ungeschützt herumliegen.  
-Folgende Sicherheitsvorkehrungen wollen wir unseren Admins an die Hand geben: +Folgende Sicherheitsvorkehrungen wollen wir unseren Admins für die Arbeit mit **[[https://www.ansible.com/|Ansible]]** unter **[[https://archlinux.org/|Arch Linux]]** an die Hand geben: 
-  - Die Anmeldung an remote Hosts erfolgt mit Hilfe der **SSH** ausschliesslich mit Schlüsseln, auf keinen Fall über Passworte. Anmeldung als **root** sind grundsätzlich unterbunden, auch die Anmeldung mit Hilfe eines User-Keys als root ist ebenso wenig gestattet! Der Admin muss den SSH-Privat-Key besitzen und von dessen Passphrase Kenntnis haben. Wird ein **Nitrokey Start** USB-Schlüssel verwendet, kann bei Bedarf auch der **[[suse:nitrokey:start#nitrokey_start_und_secure_shell|SSH-Key bei Verwendung der SSH]]** benutzt werden. Die Zusätzliche Eingabe einer Passphrase erübrigt sich dadurch auch hier, wenn der SSH-Key auf dem Kryptostick verwendet wird!+  - Die Anmeldung an remote Hosts erfolgt mit Hilfe der **SSH** ausschliesslich mit Schlüsseln, auf keinen Fall über Passworte. Anmeldung als **root** sind grundsätzlich unterbunden, auch die Anmeldung mit Hilfe eines User-Keys als **''root''** ist ebenso wenig gestattet! Der Admin muss den SSH-Private-Key besitzen und von dessen Passphrase Kenntnis haben. Wird ein **Nitrokey Start** USB-Schlüssel verwendet, kann bei Bedarf auch der **[[suse:nitrokey:start#nitrokey_start_und_secure_shell|SSH-Key bei Verwendung der SSH]]** benutzt werden. Die Zusätzliche Eingabe einer Passphrase erübrigt sich dadurch auch hier, wenn der SSH-Key auf dem Kryptostick verwendet wird!
   - Der Administrator soll beim Aufruf der Playbooks **__nur noch__** den PGP-Schlüssel durch Eingabe der zugehörigen Passphrase entsperren. Das Passwort für die Rechteerweiterung wird von Ansible aus dem Vault gelesen, genau so wie das **''become_password''** zur Rechteerweiterung.    - Der Administrator soll beim Aufruf der Playbooks **__nur noch__** den PGP-Schlüssel durch Eingabe der zugehörigen Passphrase entsperren. Das Passwort für die Rechteerweiterung wird von Ansible aus dem Vault gelesen, genau so wie das **''become_password''** zur Rechteerweiterung. 
  
Zeile 285: Zeile 294:
 </WRAP> </WRAP>
  
-Damit wir nun diesen Vorüberlegungen gerecht werden können, benötigen wir eine vordefinierte Grundinstallation und Konfiguration der Ansible-Umgebung für unsere(n) Admin(s).  Damit diese Grund-Konfiguration unserer Ansible-Umgebung nicht von Hand erfolgen muss, greifen wir auf das Playbook **''ansible_grundconfig_v2.yml''** zurück. +Damit wir nun diesen Vorüberlegungen gerecht werden können, benötigen wir eine vordefinierte Grundinstallation und Konfiguration der Ansible-Umgebung für unsere(n) Admin(s) unter Arch Linux. Damit diese Grund-Konfiguration unserer Ansible-Umgebung nicht von Hand erfolgen muss, greifen wir auf das Playbook **''ansible_grundconfig_v2.yml''** zurück. 
  
-Mit Hilfe dieses Playbooks können alle erforderlichen Konfigurationsschritte reproduzierbar und beliebig oft abgesetzt werden. Bei Bedarf ist als also jederzeit ohne grossen Aufwand möglich den Ansible-Controll-Node neu aufzusetzen und das System für spätere Playbook-Rollouts vorzubereiten, den Host also auch initial frisch zu versorgen.+Mit Hilfe dieses Playbooks können alle erforderlichen Konfigurationsschritte reproduzierbar und beliebig oft abgesetzt werden. Bei Bedarf ist als also jederzeit ohne grossen Aufwand möglich den Ansible-Controll-Node unter **Arch Linux** neu aufzusetzen und das System für spätere Playbook-Rollouts vorzubereiten, den Host also auch initial frisch zu versorgen.
  
 Folgende Schritte sollen von dem playbook abgearbeitet werden: Folgende Schritte sollen von dem playbook abgearbeitet werden:
Zeile 296: Zeile 305:
   - Installation und Konfiguration des Passwortmanagers **''pass''**.   - Installation und Konfiguration des Passwortmanagers **''pass''**.
   - Hinterlegen des Ansible Become Passwortes in einem Ansible-Vault.   - Hinterlegen des Ansible Become Passwortes in einem Ansible-Vault.
 +  - Für die kompakte Ausgabe der Ansible Rückmeldungen soll der **[[playbook_example_12#ansible_stdout_compact_logger|Ansible Stdout Compact Logger]]** genutzt werden.
  
 Somit erreichen wir später bequem unser gestecktes Ziel unsere Zeit als Admin effizient zu nutzen und in einer sicheren Umgebung uns zu bewegen.  Somit erreichen wir später bequem unser gestecktes Ziel unsere Zeit als Admin effizient zu nutzen und in einer sicheren Umgebung uns zu bewegen. 
  
 ==== Lösung ==== ==== Lösung ====
 +<WRAP center round tip 90%>
 +Der ungeduldigen Leser kann auch direkt zur Tat schreiten und das manuelle Anlegen des Verzeichnisses und des Ansible-Scripts überspringen. Mit Folgendem Befehl erledigt man dies sozusagen auf einem Rutsch:
 +
 +<code> $ mkdir ~/ansible ; wget https://gitlab.nausch.org/django/example_8b/-/archive/main/example_8b-main.tar.gz -O - | tar -xz --strip-components=1 -C ~/ansible</code>
 +
 +Anschliessend kann man, nachdem man die Variable **''admin_mail''** angepasst hat, dann auch gleich direkt **[[#script_starten1|zur Ausführung schreiten]]**.
 +</WRAP>
 === Script anlegen === === Script anlegen ===
 <WRAP center round important 60%> <WRAP center round important 60%>
Zeile 316: Zeile 333:
     #     #
     # Aufruf aus dem entsprechenden Arbeits-Verzeichnis via:     # Aufruf aus dem entsprechenden Arbeits-Verzeichnis via:
-    # ansible-playbook playbooks/ansible_grundconfig_v2.ym -K+    # ansible-playbook playbooks/ansible_grundconfig_v2.yml -K
  
 - name: ansible_grundconfig_v2.yml - name: ansible_grundconfig_v2.yml
Zeile 410: Zeile 427:
         - {directory: "library/"}         - {directory: "library/"}
         - {directory: "module_utils/"}         - {directory: "module_utils/"}
 +        - {directory: "playbooks/"}
         - {directory: "inventories/production/group_vars/"}         - {directory: "inventories/production/group_vars/"}
         - {directory: "inventories/production/host_vars/"}         - {directory: "inventories/production/host_vars/"}
Zeile 494: Zeile 512:
     - name: "Sicherstellen dass das File für das verschlüsselte become-password noch nicht existiert"     - name: "Sicherstellen dass das File für das verschlüsselte become-password noch nicht existiert"
       ansible.builtin.file:       ansible.builtin.file:
-        path: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/vault.yml'+        path: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/vault'
         state: absent         state: absent
  
     - name: "Ansible Become Password für sudo Rechteerweiterung anlegen"     - name: "Ansible Become Password für sudo Rechteerweiterung anlegen"
       ansible.builtin.copy:       ansible.builtin.copy:
-        dest: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/vault.yml'+        dest: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/vault'
         content: |         content: |
 +          # Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually!
           ansible_become_pass: {{ become_secret }}           ansible_become_pass: {{ become_secret }}
         owner: '{{ admin_user }}'         owner: '{{ admin_user }}'
Zeile 510: Zeile 529:
       become: true       become: true
       shell: |       shell: |
-        ansible-vault encrypt /home/{{ admin_user }}/ansible/inventories/production/group_vars/all/vault.yml+        ansible-vault encrypt /home/{{ admin_user }}/ansible/inventories/production/group_vars/all/vault
       changed_when: false       changed_when: false
  
     - name: "Sicherstellen dass das File mit der Ansible-Konfiguration nicht existiert"     - name: "Sicherstellen dass das File mit der Ansible-Konfiguration nicht existiert"
       ansible.builtin.file:       ansible.builtin.file:
-        path: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/ansible_environment.yml'+        path: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/ansible_environment'
         state: absent         state: absent
  
     - name: "Ansible Konfigurationsdatei mit den Definitionen zu privilege_escalation anlegen"     - name: "Ansible Konfigurationsdatei mit den Definitionen zu privilege_escalation anlegen"
       ansible.builtin.copy:       ansible.builtin.copy:
-        dest: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/ansible_environment.yml'+        dest: '/home/{{ admin_user }}/ansible/inventories/production/group_vars/all/ansible_environment'
         content: |         content: |
           # Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually!           # Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually!
-          ansible_become:          True +          ansible_become: True 
-          ansible_become_method:   sudo +          ansible_become_method: sudo 
-          ansible_become_user:     root+          ansible_become_user: root
           ansible_become_ask_pass: False           ansible_become_ask_pass: False
         owner: '{{ admin_user }}'         owner: '{{ admin_user }}'
Zeile 606: Zeile 625:
 ok: [localhost] => (item={'directory': 'library/'}) ok: [localhost] => (item={'directory': 'library/'})
 ok: [localhost] => (item={'directory': 'module_utils/'}) ok: [localhost] => (item={'directory': 'module_utils/'})
 +ok: [localhost] => (item={'directory': 'playbooks/'})
 ok: [localhost] => (item={'directory': 'inventories/production/group_vars/'}) ok: [localhost] => (item={'directory': 'inventories/production/group_vars/'})
 ok: [localhost] => (item={'directory': 'inventories/production/host_vars/'}) ok: [localhost] => (item={'directory': 'inventories/production/host_vars/'})
Zeile 692: Zeile 712:
 ====== Links ====== ====== Links ======
   * **[[detail|zurück zum Kapitel "Ansible - Erweiterte Konfigurationsbeispiele"]] <= **   * **[[detail|zurück zum Kapitel "Ansible - Erweiterte Konfigurationsbeispiele"]] <= **
-  * **=> [[playbook_example_08|weiter zum Kapitel "Ansible - erweitertes Konfigurationsbeispiel: Ansible mit Ansible einrichten]]**+  * **=> [[playbook_example_09|weiter zum Kapitel "Ansible - Erweiterte Konfigurationsbeispiel: Inventory]]**
   * **[[start|Zurück zur "Ansible"-Übersicht]]**   * **[[start|Zurück zur "Ansible"-Übersicht]]**
   * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**   * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
   * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**   * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
  • linux/ansible/playbook_example_08.txt
  • Zuletzt geändert: 01.06.2024 13:48.
  • von django