Wir planen, in unserem Projekt einen anonymen Tresor zu verwenden, um zu verhindern, dass Passwörter oder Schlüssel in git verloren gehen.
Die Idee ist, alle unsere sensiblen Daten in eine einfache Datei zu packen und diese Datei mit einem Passwort mit ansible-vault zu verschlüsseln, bevor Sie zu git gehen.
Um die Datei zu entschlüsseln, müssen wir das Tresorkennwort an ansible übergeben. Ich denke über drei Möglichkeiten nach:
- Speichern Sie es in einer Server-Umgebungsvariablen
- Übergeben Sie es als Option an den Befehl ansible-playbook
- Speichern Sie es in einer nicht versionierten Datei.
Gibt es noch andere Optionen, die die beste (und sicherste) Möglichkeit zum Speichern von Ansible-Vault-Kennwörtern darstellen? In der Dokumentation zu Ansible-Best Practices wird hierzu nichts gesagt.
Antworten:
Die Bedeutung von "all" in diesem Satz sollte sehr sorgfältig analysiert werden, bevor Sie die von Ihnen geplante Lösung implementieren.
Ansible Vault ist ein sehr nützliches Tool, das jedoch nur zum Speichern der folgenden Geheimnisse verwendet werden sollte:
Der zweite Punkt ist kritisch.
Viele Menschen und möglicherweise das gesamte DevOps-Team haben Zugriff auf das gültige Tresorkennwort und damit auf alle Geheimnisse.
Daher sollte für alle im Tresor aufbewahrten Geheimnisse eine Bedingung gelten, für die eine Person oder Maschine mit unbefugtem Zugriff nicht in der Lage sein sollte, sie zu verwenden, wenn dies gewünscht wird.
Konkret ausgedrückt, wenn Sie eine Datenbank und ihre Benutzer mit ansible bereitstellen, können Sie die Kennwörter im Tresor speichern. Sie müssen jedoch sehr vorsichtig sein (und überlegen höchstwahrscheinlich eine andere Lösung), wenn dieser Dienst über das Internet verfügbar sein wird und ohne VPN-Authentifizierung!
Benutzer (DevOps), die dem Geheimnis ausgesetzt sind, sollten nicht in der Lage sein, "gespeicherte" Kennwörter zu verwenden, wenn ihnen eine Sicherheitsbarriere auferlegt wird (z. B. VPN-Zugriff widerrufen). Darüber hinaus sollte der Zugriff auf das Quellcode-Repository (in dem der Tresor gespeichert ist) ebenfalls widerrufen werden, bevor Kennwörter geändert werden.
Unter diesen Umständen ist ein anzeigbarer Tresor ein sehr nützliches Werkzeug.
Der Versuch, ein Geheimnis zu speichern, das von einer beliebigen Person oder Maschine im Internet im Tresor verwendet werden könnte, wäre stattdessen ein Fehler (z. B. VPN-Anmeldeinformationen von Benutzern).
Unter den Bedingungen aus dem vorherigen Absatz denke ich, dass eine gute Praxis wäre:
Halten Sie eine Konvention ein, um Geheimnisse zu nutzen ! Sie können Änderungen an den Geheimnissen nicht überprüfen und Sie können nicht nach ansiblen Variablen in Geheimnisdateien suchen! Sei also von Anfang an gründlich. Eine gute Konvention ist es, alle Variablen, die im ansiblen Tresor gespeichert sind, mit einem
secret_
Präfix zu benennen . Wann sehen Sie so etwas wie:postgres.yml:
Sie werden wissen, dass der Wert im ansiblen Tresor gespeichert ist.
quelle
Da Sie noch nichts implementiert haben, überdenken Sie dies möglicherweise erneut. Die Verwendung eines Systems wie Ansible Vault hat eine Reihe von Sicherheitsmängeln:
Ein potenziell viel sichereres, wenn auch komplexeres System, das diese Nachteile nicht aufweist, ist die Verwendung von Hashicorp Vault zum Speichern Ihrer Geheimnisse. Mit https://github.com/jhaals/ansible-vault können Sie dann fast genauso einfach Werte daraus abrufen wie aus Ansible Vault .
Sie müssen dann die Authentifizierung für Hashicorp Vault verwalten, und das ist die Turtle-Frage . Für Menschen ist es meiner Meinung nach die beste Lösung, regelmäßig nach einem Passwort zu fragen und das Token nach kurzer Zeit ungültig zu machen. für Maschinen, um das AWS-Authentifizierungs-Backend oder ähnliches zu verwenden. Sie können das Erfordernis der Authentifizierung an einem Ort nie ganz beseitigen, aber Sie können es einem Angreifer erschweren, Zugriff darauf zu erhalten.
Wenn Ihnen das Einrichten und Verwalten eines geheimen Servers zu viel ist, können Sie mit Sicherheit nur Ansible Vault verwenden. Warum sollte das Passwort überhaupt auf den einzelnen Rechnern gespeichert werden? Für die interaktive Verwendung müssen Sie nur das Kennwort eingeben, und die Benutzer können es in dem Kennwortmanager ihrer Wahl speichern. iTerm unter OS X verfügt über einen Kennwort-Manager, der in Keychain.app integriert ist, was dies dort besonders einfach macht.
quelle
Dies hängt weitgehend mit den internen Richtlinien zum Umgang mit vertraulichen Daten zusammen.
Ich möchte Ihnen meinen Ansatz dazu erläutern und erklären, was ich als Vor- und Nachteile sehe. Ich behalte das Ansible Vault-Kennwort in einer Datei auf dem Steuerungscomputer und habe eine Umgebungsvariable, die darauf verweist:
Ich habe das auf meiner Workstation (da ich Playbooks testen und entwickeln muss), einige Kollegen haben es auch, und natürlich haben wir es auf der Ansible-Hauptsteuerungsmaschine.
Vorteile:
Nachteile:
Die Nachteile haben Milderungen, aber es liegt wieder an den Richtlinien und Regeln, die Sie in Ihrem täglichen Betrieb übernommen haben.
quelle
Schauen Sie sich dieses Projekt an, um Ihre Passwörter für die ansible Vault-Verschlüsselung zu verwalten: https://github.com/Smile-SA/ansible-vault-manager
Es können mehrere Schlüsselbundspeicherplattformen mit Plug-ins verwaltet werden (derzeit nur AWS SSM implementiert). Die Integration in ein aktuelles Ansible-Projekt ist sehr einfach ...
quelle