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
tags
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.