slogan3

Maak een Ansible Playbook voor Detectie en Herstel van Configuratieafwijkingen

description

Maakt proactieve detectie en correctie van configuratieafwijkingen mogelijk om consistentie en compliance van de infrastructuur te waarborgen, waardoor downtime en handmatige interventie verminderen. Helpt stabiele omgevingen te behouden door herstel te automatiseren en integratie met monitoringtools te bieden, wat een robuuste oplossing is bovenop basisconfiguratiebeheer.

prompt

Help me een Ansible playbook te maken dat continu configuratieafwijkingen in mijn infrastructuur detecteert en automatisch herstelt om de gewenste staat te behouden. Mijn infrastructuuromgeving: <voer je infrastructuuromgeving in> Kritieke configuratie-items om te monitoren: <lijst met kritieke configuratie-items> Herstelstrategieën: <beschrijf de gewenste hers ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Ansible playbook dat continu afwijkingen in je infrastructuur detecteert en automatisch herstelt, met rapportage via e-mail en integratie met monitoringtools. Daarnaast geef ik best practices voor structuur en minimaliseren van verstoringen. --- **1. Structuur en best practices** - **Modulariteit:** Gebruik rollen voor herhaling en overzichtelijkheid (bijvoorbeeld een `monitoring` rol). - **Idempotentie:** Zorg dat taken herhaalbaar en veilig zijn zonder ongewenste bijwerkingen. - **Vertraging en prioriteit:** Stel prioriteiten vast en probeer herstel zo soepel mogelijk te laten verlopen. - **Logging & rapportage:** Log alle afwijkingen en herstelacties, stuur waarschuwingen via e-mail. - **Monitoring integratie:** Gebruik Prometheus alerts voor afwijkingen en koppel deze aan je playbook indien nodig. --- **2. Voorbeeld Playbook** ```yaml --- - name: Continue monitoring en herstel van kritieke configuratie-items hosts: productie become: yes vars: email_ontvanger: "admin@voorbeeld.com" # Path naar de configuratiebestanden sshd_config_path: /etc/ssh/sshd_config firewall_rules: - { name: "Allow SSH", port: 22, proto: tcp, state: present } # Voeg meer regels toe indien nodig tasks: - name: Controleer sshd_config op juiste inhoud ansible.builtin.command: diff {{ sshd_config_path }} /desired/config/sshd_config register: diff_sshd ignore_errors: yes - name: Herstel sshd_config indien afwijkend ansible.builtin.copy: src: /desired/config/sshd_config dest: "{{ sshd_config_path }}" owner: root group: root mode: '0644' when: diff_sshd.rc != 0 notify: - Log herstel van sshd_config - Stuur e-mail melding - name: Controleer firewallregels ansible.builtin.command: iptables -L --line-numbers register: current_firewall changed_when: false - name: Zorg dat firewallregels overeenkomen met de gewenste staat ansible.builtin.iptables: chain: INPUT protocol: "{{ item.proto }}" destination_port: "{{ item.port }}" jump: ACCEPT state: "{{ item.state }}" loop: "{{ firewall_rules }}" when: "'{{ item.port }}' not in current_firewall.stdout" notify: - Log herstel firewallregels - Stuur e-mail melding handlers: - name: Log herstel van sshd_config ansible.builtin.debug: msg: "sshd_config is hersteld naar de gewenste staat." - name: Log herstel firewallregels ansible.builtin.debug: msg: "Firewallregels zijn hersteld naar de gewenste staat." - name: Stuur e-mail melding ansible.builtin.mail: host: smtp.voorbeeld.com port: 587 username: "monitor@voorbeeld.com" password: "wachtwoord" to: "{{ email_ontvanger }}" subject: "Infrastructuur afwijking en herstel gemeld" body: | Er is een afwijking gedetecteerd en hersteld op host {{ inventory_hostname }}. Details: - sshd_config: Hersteld - Firewallregels: Hersteld ``` --- **3. Aanvullende aanbevelingen** - **Automatiseer continu monitoring:** Gebruik bijvoorbeeld een cron-job die het playbook periodiek draait. - **Gebruik Prometheus alerts:** Stel alerts in Prometheus die afwijkingen detecteren en trigger acties, zoals het uitvoeren van het playbook. - **Minimaliseer verstoringen:** Voer hersteltaken tijdens onderhoudsvensters uit of met gecontroleerde vertragingen. - **Gebruik idempotente taken:** Zorg dat herhaalbare taken geen onnodige wijzigingen veroorzaken. - **Logging & audit:** Log alle acties voor troubleshooting en compliance. --- **4. Samenvatting** Dit playbook detecteert afwijkingen in `sshd_config` en firewallregels, herstelt ze automatisch, en stuurt e-mailmeldingen. Het is aan te raden om dit te integreren met je monitoringtools en continue verificatie te automatiseren voor een robuuste en stabiele infrastructuur. --- Heeft u verdere vragen of wensen voor aanvullende functionaliteiten?
provider: deepseek
model: deepseek-chat
Hier is een complete Ansible oplossing voor configuratie compliance monitoring en automatisch herstel in productie: ## Ansible Playbook Structuur ``` ansible-compliance/ ├── inventories/ │ ├── production/ │ └── group_vars/ ├── roles/ │ ├── compliance_monitor/ │ ├── sshd_hardening/ │ ├── firewall_manager/ │ └── alerting/ ├── playbooks/ │ ├── compliance_check.yml │ ├── auto_remediate.yml │ └── emergency_rollback.yml ├── templates/ ├── files/ ├── handlers/ └── requirements.yml ``` ## Hoofd Playbook: `compliance_check.yml` ```yaml --- - name: Configuratie Compliance Monitoring en Herstel hosts: production serial: "30%" # Rolling updates voor minimale verstoring max_fail_percentage: 25 vars: compliance_check_interval: 300 # 5 minuten emergency_contact: "admin@bedrijf.nl" pre_tasks: - name: Pre-flight check uitvoeren include_tasks: tasks/pre_flight_check.yml run_once: true roles: - role: compliance_monitor tags: monitoring - role: sshd_hardening tags: sshd - role: firewall_manager tags: firewall post_tasks: - name: Compliance rapport genereren include_tasks: tasks/generate_report.yml - name: Waarschuwingen versturen bij afwijkingen include_tasks: tasks/send_alerts.yml when: compliance_violations | length > 0 handlers: - name: restart sshd service: name: sshd state: restarted listen: "restart sshd" - name: reload firewall command: firewall-cmd --reload listen: "reload firewall" ``` ## Rol: `compliance_monitor` `roles/compliance_monitor/tasks/main.yml`: ```yaml --- - name: Configuratie baseline vastleggen set_fact: config_baseline: "{{ ansible_date_time.epoch }}" - name: SSHd configuratie valideren block: - name: SSHd configuratie check ansible.builtin.command: sshd -t -f /etc/ssh/sshd_config register: sshd_validation changed_when: false - name: SSHd configuratie afwijking detecteren set_fact: compliance_violations: "{{ compliance_violations | default([]) + ['SSHd config invalid'] }}" when: sshd_validation.rc != 0 rescue: - name: SSHd configuratie herstellen include_tasks: ../sshd_hardening/tasks/remediate.yml - name: Firewall status controleren block: - name: Firewall regels verifiëren ansible.builtin.command: firewall-cmd --list-all register: firewall_status changed_when: false - name: Firewall afwijkingen detecteren set_fact: compliance_violations: "{{ compliance_violations | default([]) + ['Firewall rules mismatch'] }}" when: firewall_status.stdout != firewall_expected_output rescue: - name: Firewall herstellen include_tasks: ../firewall_manager/tasks/remediate.yml ``` ## Rol: `sshd_hardening` `roles/sshd_hardening/tasks/remediate.yml`: ```yaml --- - name: Backup huidige SSHd configuratie ansible.builtin.copy: src: /etc/ssh/sshd_config dest: "/etc/ssh/sshd_config.backup.{{ ansible_date_time.epoch }}" remote_src: yes backup: yes - name: Correcte SSHd configuratie implementeren ansible.builtin.template: src: sshd_config.j2 dest: /etc/ssh/sshd_config owner: root group: root mode: '0600' notify: restart sshd - name: SSHd configuratie valideren na herstel ansible.builtin.command: sshd -t -f /etc/ssh/sshd_config register: post_remediation_validation failed_when: post_remediation_validation.rc != 0 - name: Herstel succesvol loggen ansible.builtin.debug: msg: "SSHd configuratie succesvol hersteld op {{ inventory_hostname }}" ``` ## Integratie met Monitoring Tools `roles/alerting/tasks/prometheus.yml`: ```yaml --- - name: Prometheus metrics exporteren ansible.builtin.lineinfile: path: /etc/prometheus/ansible_metrics.yml line: "{{ item }}" create: yes with_items: - "compliance_violations_total{{ '{host=''{{ inventory_hostname }}''}' }} {{ compliance_violations | length }}" - "last_compliance_check{{ '{host=''{{ inventory_hostname }}''}' }} {{ ansible_date_time.epoch }}" - name: Node Exporter textfile collector updaten ansible.builtin.copy: content: | # HELP ansible_compliance_violations Aantal configuratie afwijkingen # TYPE ansible_compliance_violations gauge ansible_compliance_violations{host="{{ inventory_hostname }}"} {{ compliance_violations | length }} dest: /var/lib/node_exporter/textfile_collector/ansible_compliance.prom ``` ## E-mail Waarschuwingen `roles/alerting/tasks/email_alerts.yml`: ```yaml --- - name: E-mail waarschuwing versturen community.general.mail: host: "{{ smtp_host }}" port: 587 username: "{{ smtp_username }}" password: "{{ smtp_password }}" to: "{{ emergency_contact }}" subject: "COMPLIANCE WAARSCHUWING - {{ inventory_hostname }}" body: | Configuratie afwijkingen gedetecteerd op: {{ inventory_hostname }} Tijdstip: {{ ansible_date_time.iso8601 }} Aantal afwijkingen: {{ compliance_violations | length }} Details: {% for violation in compliance_violations %} - {{ violation }} {% endfor %} Herstel acties zijn automatisch uitgevoerd. when: compliance_violations | length > 0 delegate_to: localhost ``` ## Best Practices voor Productie ### 1. Veilige Implementatie ```yaml - name: Canary deployment voor kritieke wijzigingen hosts: production[0] # Eerste host als canary serial: 1 - name: Gefaseerde rollout na succesvolle canary hosts: production[1:-1] serial: "25%" - name: Laatste batch implementeren hosts: production[-1] serial: 1 ``` ### 2. Rollback Strategie `playbooks/emergency_rollback.yml`: ```yaml --- - name: Nood rollback uitvoeren hosts: "{{ target_hosts | default('production') }}" vars: rollback_timestamp: "{{ backup_timestamp | mandatory }}" tasks: - name: SSHd configuratie terugzetten ansible.builtin.copy: src: "/etc/ssh/sshd_config.backup.{{ rollback_timestamp }}" dest: /etc/ssh/sshd_config remote_src: yes notify: restart sshd ``` ### 3. Continu Uitvoeren met Cron ```bash # /etc/cron.d/ansible-compliance */5 * * * * ansible-user /usr/bin/ansible-playbook /opt/ansible-compliance/playbooks/compliance_check.yml ``` ## Beveiligingsmaatregelen 1. **Ansible Vault voor gevoelige data**: ```bash ansible-vault encrypt inventories/production/group_vars/all/vault.yml ``` 2. **Strikte toegangscontrole**: ```yaml # ansible.cfg [defaults] remote_tmp = /tmp/.ansible-${USER} private_key_file = ~/.ssh/ansible_key host_key_checking = True ``` Deze implementatie biedt robuuste configuratie compliance monitoring met automatisch herstel, minimale verstoring in productie, en uitgebreide rapportage via Prometheus/Grafana en e-mail waarschuwingen.