Die Idee ist, alle unsere sensiblen Daten [...]
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:
- Speziell für die ansible Bereitstellungen benötigt
- Für Eigentümer, die sich ihrer nicht bewusst werden sollten, leicht unbrauchbar gemacht, die sich jedoch möglicherweise unrechtmäßig an sie "erinnern" (in der Regel Mitarbeiter außerhalb des Büros)
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).
Gibt es noch andere Optionen, die die beste (und sicherste) Möglichkeit zum Speichern eines anzeigbaren Tresorkennworts darstellen?
Unter den Bedingungen aus dem vorherigen Absatz denke ich, dass eine gute Praxis wäre:
- Speichern Sie das Tresorkennwort in einem externen sicheren Tresor (etwa in einem Tresor von HashiCorp oder einem beliebigen SaaS für die Verwaltung von Anmeldeinformationen).
- Ermöglichen Sie DevOps den Zugriff auf das externe Tresorelement (zum Testen benötigen sie das Kennwort) und auf das CI / CD-System oder den ansiblen Controller
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:
postgres_password: "{{ secret_postgres_password }}"
Sie werden wissen, dass der Wert im ansiblen Tresor gespeichert ist.