Ansible Vault – Secrets und Passwörter in Playbooks verschlüsseln | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

303 Dokumentationen verfügbar

Wissensdatenbank

Ansible Vault Secrets Verschlüsseln

Zuletzt aktualisiert: 05.04.2026 um 19:42 Uhr

Ansible Vault – Secrets und Passwörter in Playbooks verschlüsseln

Warum ist Ansible Vault wichtig?

Eine der kritischsten Fehler in der Infrastruktur-Automatisierung ist das Speichern von Passwörtern und API-Keys im Plaintext. Dies gilt besonders in Git-Repositories, wo ein versehentlicher Commit sensible Daten exponiert. Ansible Vault verschlüsselt solche Secrets und ermöglicht es, sie sicher in Versionskontrolle zu speichern.

Ansible Vault nutzt AES-256 Verschlüsselung und ist vollständig in Ansible integriert. Es funktioniert mit allen Ansible-Befehlen: ansible-playbook, ansible-pull, etc.

⚠️ Wichtig: NIEMALS Passwörter, API-Keys oder Secrets im Plaintext in Playbooks, Konfigurationsdateien oder Git speichern. Nutzen Sie immer Ansible Vault oder Hardware Security Module wie HashiCorp Vault.

Grundkonzepte von Ansible Vault

Was kann verschlüsselt werden?

  • Komplette YAML-Dateien (vars, host_vars, group_vars)
  • Einzelne Variablen in Dateien
  • Strings (in Playbooks verwendbar)
  • Dateiinhalte

Vault ID und Identifizierer

Seit Ansible 2.4 können Sie mehrere Vault-IDs verwenden, um verschiedene Passwörter für verschiedene Umgebungen zu trennen (prod, staging, dev).

Verschlüsselte Datei erstellen

Neue Vault-Datei mit Interaktion

# Neue Datei erstellen und direkt bearbeiten
ansible-vault create secrets.yml

# Sie werden aufgefordert, ein Passwort zu enternen:
# New Vault password:
# Confirm New Vault password:

# Dann öffnet sich Ihr Standard-Editor (vi/nano)
# Geben Sie die Secrets ein:

db_user: admin
db_password: MySecurePassword123
api_key: sk-12345678901234567890
api_secret: sk-secret-987654321
mysql_root_password: RootSecure123!@#

# Speichern und Datei ist verschlüsselt
# Die Datei wird gespeichert mit Vault-Header:
# $ANSIBLE_VAULT;1.1;AES256;...

Bestehende Datei verschlüsseln

# Bereits existierende YAML-Datei verschlüsseln
ansible-vault encrypt vars.yml

# Passwort eingeben und bestätigen
# New Vault password:
# Confirm New Vault password:

# Datei ist nun verschlüsselt
file vars.yml
# vars.yml: ASCII text (encrypted)

Verschlüsselte Dateien ansehen und bearbeiten

# Verschlüsselte Datei anzeigen (ohne zu bearbeiten)
ansible-vault view secrets.yml

# Passwort eingeben
# Enter vault password:

# Inhalte werden angezeigt aber nicht bearbeitet

# Verschlüsselte Datei bearbeiten
ansible-vault edit secrets.yml

# Passwort eingeben
# Enter vault password:

# Editor öffnet sich mit entschlüsseltem Inhalte
# Nach dem Speichern wird die Datei wieder verschlüsselt

Einzelne Strings verschlüsseln

# Einzelnen String verschlüsseln (für Playbooks)
ansible-vault encrypt_string 'MySecurePassword123' --name 'db_password'

# Ausgabe:
# db_password: !vault |
#   $ANSIBLE_VAULT;1.1;AES256;...
#   ...

# Diese Zeilen können direkt in Playbooks verwendet werden
# Sie können auch mit --vault-id arbeiten:
ansible-vault encrypt_string 'Secret123' --name 'api_key' --vault-id prod@prompt

Vault-Dateien in Playbooks verwenden

Komplette Datei als vars_files laden

---
- hosts: webservers
  vars_files:
    - secrets.yml
    - vars/common.yml

  tasks:
    - name: Database verbindung
      mysql_db:
        name: mydb
        login_user: "{{ db_user }}"
        login_password: "{{ db_password }}"
        state: present

    - name: API-Key setzen
      shell: echo "{{ api_key }}" > /etc/app/config
✅ Gut zu wissen: Vault-Dateien können transparent in Playbooks verwendet werden. Ansible entschlüsselt sie automatisch beim Lauf mit dem entsprechenden Passwort.

Playbook mit Vault Passwort ausführen

# Mit Passwort-Abfrage
ansible-playbook playbook.yml --ask-vault-pass

# Sie werden aufgefordert:
# Vault password:

# Mit Passwort-Datei
ansible-playbook playbook.yml --vault-password-file ~/.vault_pass

# Mit Multiple Vault-IDs (verschiedene Umgebungen)
ansible-playbook playbook.yml \
  --vault-id prod@prompt \
  --vault-id staging@~/.vault_staging

# Mit Umgebungsvariable
export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass
ansible-playbook playbook.yml

# Vault-Passwort aus Script
export ANSIBLE_VAULT_PASSWORD_EXEC=fetch_password.sh
ansible-playbook playbook.yml

Vault-Passwort-Datei Best Practices

⚠️ Wichtig: Vault-Passwort-Dateien gehören NIEMALS in Git! Immer .gitignore verwenden oder externe Secrets-Management nutzen.
# .gitignore Datei
echo ".vault_pass" >> .gitignore
echo ".vault_*" >> .gitignore
echo "vault_password" >> .gitignore

# Passwort-Datei mit restriktiven Permissions
umask 077
echo "your-secure-password" > ~/.vault_pass
chmod 600 ~/.vault_pass

# Git Workflow - .vault_pass wird nicht committed
git status
# .vault_pass ist nicht in der Liste

Group Vars und Host Vars mit Vault

# Struktur:
# ansible/
# ├── group_vars/
# │   ├── all/
# │   │   ├── common.yml
# │   │   └── vault.yml (verschlüsselt)
# │   └── webservers/
# │       └── vault.yml (verschlüsselt)
# └── host_vars/
#     └── web01/
#         └── vault.yml (verschlüsselt)

# Vault-Datei in group_vars erstellen
ansible-vault create group_vars/all/vault.yml

# Inhalt:
db_user: admin
db_password: SecurePassword123
api_token: token-xyz-123

# In Playbook referenzieren
---
- hosts: all
  tasks:
    - name: Database-Benutzer konfigurieren
      debug:
        msg: "User: {{ db_user }}, Password: {{ db_password }}"

Multi-Vault Setup für verschiedene Umgebungen

# Verschiedene Vault-Passwörter pro Umgebung

# Production Vault
ansible-vault create group_vars/production/vault.yml --vault-id prod

# Staging Vault
ansible-vault create group_vars/staging/vault.yml --vault-id staging

# Development Vault
ansible-vault create group_vars/development/vault.yml --vault-id dev

# Playbook mit Multiple Vault IDs ausführen
ansible-playbook playbook.yml \
  --vault-id prod@~/.vault_prod \
  --vault-id staging@~/.vault_staging \
  --vault-id dev@~/.vault_dev

# Oder mit Prompt
ansible-playbook playbook.yml \
  --vault-id prod@prompt \
  --vault-id staging@prompt

CI/CD Integration mit Ansible Vault

# GitLab CI/CD Beispiel
# .gitlab-ci.yml

deploy_production:
  script:
    - ansible-playbook playbook.yml \
      --vault-password-file $VAULT_PASS_FILE
  variables:
    VAULT_PASS_FILE: /tmp/vault_pass
  before_script:
    - echo $VAULT_PASSWORD > /tmp/vault_pass
    - chmod 600 /tmp/vault_pass

# GitHub Actions Beispiel
# .github/workflows/deploy.yml

- name: Run Ansible Playbook
  env:
    ANSIBLE_VAULT_PASSWORD_FILE: /tmp/vault_pass
  run: |
    echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
    chmod 600 /tmp/vault_pass
    ansible-playbook playbook.yml

# Jenkins Beispiel
# Jenkinsfile

pipeline {
  stages {
    stage('Deploy') {
      steps {
        sh '''
          echo $VAULT_PASSWORD > /tmp/vault_pass
          chmod 600 /tmp/vault_pass
          ansible-playbook playbook.yml --vault-password-file /tmp/vault_pass
        '''
      }
    }
  }
}

Vault Datei entschlüsseln (Passwort vergessen)

# Vault-Passwort ändern
ansible-vault rekey secrets.yml

# Altes Passwort eingeben
# Vault password:

# Neues Passwort eingeben
# New Vault password:

# Datei ist mit neuem Passwort verschlüsselt

# Vault-Datei vollständig entschlüsseln (ACHTUNG!)
ansible-vault decrypt secrets.yml

# Passwort eingeben
# Vault password:

# Datei ist jetzt unverschlüsselt (SECURITY RISK!)

HashiCorp Vault als Alternative

Für größere Umgebungen ist HashiCorp Vault eine bessere Alternative zu Ansible Vault. Es bietet dynamisches Secrets-Management, Audit-Logging und bessere Sicherheit.

Kriterium Ansible Vault HashiCorp Vault
Komplexität Einfach Komplex
Statische Secrets Ja Ja
Dynamische Secrets Nein Ja
Audit-Logging Begrenzt Umfassend
Multi-Team Support Eingeschränkt Ja
Secret Rotation Manuell Automatisch
Kosten Kostenlos (Teil von Ansible) Kommerziell oder Open Source

Security Best Practices

Best Practice Beschreibung
Niemals Plaintext Secrets Alle sensiblen Daten müssen verschlüsselt sein
.gitignore verwenden Vault-Passwort-Dateien aus Git ausschließen
Separate Passwörter pro Umgebung Production, Staging, Development Secrets trennen
Passwort rotieren Regelmäßig Vault-Passwort ändern
Nur Datei-Permissions chmod 600 für Passwort-Dateien
CI/CD Secrets Passwort nur als CI/CD Secret speichern, nicht in Code
Audit-Logging Wer hat Secrets zugegriffen? (mit HashiCorp Vault)
Minimal Privilege Nur notwendige Secrets pro Role/Team
💡 Tipp: Nutzen Sie die Kombination aus Ansible Vault für einfache Deployments und HashiCorp Vault für Enterprise-Umgebungen mit komplexen Anforderungen.

Weitere Ressourcen


Letzte Aktualisierung: April 2026 | Ansible 2.10+

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120