Die dunkle Jahreszeit ist Einbruchszeit - ein Anlass, auch die IT-Sicherheit unter die Lupe zu nehmen. In der Oktober-Ausgabe des IT-Administrator lesen Sie, ... (mehr)

Datenbank-Logins verwalten

Ähnlich wie beim SSH-Login können Sie Vault verwenden, um Zugänge zu einem Datenbank-Server zu verwalten. Folgend betrachten wir die Verwaltung eines MySQL-Servers. Für Cloud-Instanzen ist das ein wertvolles Feature, da Sie kein festes Passwort mehr in der Vorlage pflegen müssen. Jede Instanz erhält eine eigene "Benutzername:Passwort"-Kombination, die darüber hinaus zeitlich beschränkt ist.

Ein Hinweis vorab: Bei vielen Cloud-Angeboten wie Amazon EC2 und Amazon RDS liegen die Maschinen und Datenbanken gemeinsam in virtuellen privaten Netzwerken. Ist das in Ihrem Setup nicht der Fall, achten Sie darauf, dass Sie die MySQL-Verbindungen mit TLS verschlüsseln. Dies ist bei MySQL nämlich standardmäßig nicht der Fall.

Fügen Sie zunächst das MySQL-Backend hinzu und schreiben die Verbindung zu Ihrem MySQL-Server mit "write" in den Konfigurationspfad des Backends:

$ vault mount mysql
$ vault write /mysql/config/connection connection_url="user:password@tcp(w.x.y.z:3306)/"

Die Verbindungseinstellungen lassen sich nachträglich nicht mehr auslesen. Achten Sie darauf, dass MySQL die Benutzer auch anhand des Hostnamens unterscheidet. Sie müssen also für den Benutzer den korrekten Hosteintrag des Vault-Servers angeben. Zusätzlich muss der Benutzer GRANT-Rechte besitzen, um weitere Benutzer mit unterschiedlichen Rechten anlegen zu können.

Die Gültigkeitsdauer und Nutzungsdauer der MySQL-Zugänge stellen Sie ebenfalls im config-Pfad des Backends ein. Die Gültigkeit legen Sie zunächst auf eine Stunde fest. Nach Ablauf dieser Stunde lässt sich der Lease verlängern, bis zu der von Ihnen gesetzten Höchstdauer von 24 Stunden:

$ vault write /mysql/config/lease lease=1h lease_max=24h

Das MySQL-Backend unterstützt beliebige Namen für Rollen, die ein Benutzer-Zugang haben kann. Eine Rollendefinition enthält dabei das MySQL-Statement zum Anlegen der Benutzer. Wir definieren beispielhaft eine Rolle "readonly", die auf allen Tabellen ausschließlich SELECTs ausführen darf:

$ vault write /mysql/roles/readonly sql="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; \
GRANT SELECT ON *.* TO '{{name}}'@'%'; "

Die Platzhalter "{{name}}" und "{{password}}" ersetzt Vault durch die generierten Werte. Die gespeicherten Rollen und die zugehörigen SQL-Statements zeigen die folgenden Befehle:

$ vault list /mysql/roles
$ vault read /mysql/roles/readonly

Für den Zugriff auf die MySQL-Datenbank erfragt nun die Anwendung selbst oder ein regelmäßig laufender Job den Zugang zur Datenbank und erhält die Benutzername/Passwort-Kombination:

$ vault read /mysql/creds/readonly

Der Widerruf ausgestellter Zugänge erfolgt automatisch nach dem Ablauf der Gültigkeit. Sollten Sie mehrere MySQL-Server verwalten, können Sie dies durch die weitere Einbindung des MySQL-Backends auf einem zweiten Pfad realisieren. Diesen Pfad übergeben Sie dem mount-Befehl mittels "path"-Argument:

$ vault mount -path mysql2 mysql

Link-Codes

[1] Hashicorp: https://www.hashicorp.com/

[2] Vault-Projekt: https://www.vaultproject.io/

[3] Vault-SSH-Helper auf GitHub: https://github.com/hashicorp/vault-ssh-helper/

[4] Keywhiz: https://square.github.io/keywhiz/

Auditierung mittels Logdaten

Um bei reger Verwendung die Zugriffe auf den Vault-Server zu auditieren, bietet Vault zwei Backends zum Erstellen von Logs an. Sie können wählen zwischen "file" und "syslog", es lassen sich sogar beide Backends gleichzeitig verwenden. In diesem Beispiel nutzen Sie nur das Syslog-Backend, das Sie vermutlich bereits in Ihr bestehendes Monitoring eingebunden haben. Die Aktivierung erfolgt über den nachfolgenden Befehl mit dem Tag "vault" und der Syslog-Facility "AUTH". So lassen sich die Logs wie von Syslog gewohnt direkt sortieren:

$ vault audit-enable syslog tag="vault" facility="AUTH"

Die Logdaten von Vault sind sehr ausführlich und enthalten auch Informationen zu den verwendeten Login-Informationen. Diese hasht Vault jedoch im Standardfall mit SHA256 und einem Saltwert, so landen diese nicht im Klartext in den Logs.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2021