Chefkoch: verschlüsselte Datentaschen zum Schutz des Verschlüsselungsschlüssels


8

Wie gehen Sie vor, wenn Sie die Funktion für verschlüsselte Datentaschen für Chef verwenden, um den Schlüssel auf vielen Servern bereitzustellen? Wenn Sie es in ein Rezept einfügen, kann jeder, der Zugriff auf einen der Chef-Server oder -Clients hat, den Schlüssel ziehen und möglicherweise alle Datenbeutel entschlüsseln.

Wie stellen Sie sicher, dass sich der Schlüssel auf den Maschinen befindet, die ihn benötigen, aber auch sicher sind, dass niemand herumschnüffelt?

Antworten:


8

Leider können Sie nicht viel tun, da sich der Schlüssel im Klartext irgendwo auf dem Chef-Knoten befinden muss. Wenn jemand Shell- oder lokalen Zugriff auf die Box hat, kann er möglicherweise die Schlüssel lesen.

Um die Dinge ein wenig zu entschärfen, füge ich meinem Basisknoten Folgendes hinzu (dh ein Rezept oder eine Rolle, die allen Knoten gemeinsam ist):

directory "/etc/chef/keys" do
  mode 0700
  owner "root"
  group "root"
end

und welcher Schlüsselverteilungsmechanismus Sie auch haben, legt Schlüssel an dieser Stelle ab. Die Berechtigungen und der Besitz verhindern das Lesen der Schlüssel, wenn jemand vergisst, die richtigen Berechtigungen für eine Schlüsseldatei festzulegen.

Aus meiner Sicht dienen verschlüsselte Datentaschen eher dazu, Schlüsselmaterial vor Lesbarkeit in einem Versionsverwaltungssystem zu schützen, und weniger als Sicherheitsmerkmal auf den Chef-Knoten selbst.


3

Meine EDBs sind getrennt durch:

  • Umgebung
  • Rolle

Wir laden alle Schlüssel mit einem speziellen Suffix auf jede neue EC2-Instanz hoch, während wir sie booten, und entfernen dann alle Schlüssel, die von keinem der Rezepte in der run_list verwendet wurden, am Ende der ersten Ausführung von chef-client (was sein wird) gleich zu Beginn der Instanz.)

Alle Dateien werden als Eigentümer und Gruppe "root" hochgeladen und haben nur Leseberechtigungen.

Jedes Rezept, das eine EDB verwendet, generiert den EDB-Namen und den Schlüsseldateinamen zur Laufzeit des Rezepts, indem es 'edb_' + die Knotenumgebung + den rezept- / artikelspezifischen Namen + '.key' verkettet und dann den Schlüssel unter diesem Namen sucht . (Wenn es nicht existiert, wird standardmäßig eine Ausnahme ausgelöst.)

Für unseren Couchdb-Server, der eine Rolle namens "Couch" ausführt, um die Anmeldeinformationen abzurufen, die wir für die Administratoren in der Entwicklungsumgebung verwenden, sucht das Rezept nach einem Schlüssel mit dem Namen "edb_dev_couch.key".

Anschließend wird in einer Datentasche mit dem Namen "edb_dev" nach einem Element mit dem Namen "couch_credentials" gesucht.

Für die Verwaltung von Schlüsseln verwende ich derzeit den einfachen Ansatz:

  • Laden Sie alle EDB-Schlüssel über das Bootstrap-Skript hoch und hängen Sie '_x' an die Schlüsselnamen an
  • Lassen Sie jedes Rezept, das eine EDB verwendet, im Schlüsselverzeichnis nach dem Schlüssel suchen, den es benötigt.
  • Wenn der Schlüssel mit dem Suffix '_x' vorhanden ist, benennen Sie den Schlüssel um, um das Suffix '_x' zu entfernen.
  • Fügen Sie am Ende jeder run_list ein Rezept hinzu, das alle Schlüssel mit dem Suffix '_x' löscht

Dies begrenzt hoffentlich die Zeit, in der die Schlüssel außerhalb des Bereichs eines einzelnen Knotens anfällig sind, bis der Computer gebootet wurde und der erste Lauf von chef_client ausgeführt wurde.

Dies ist unsere erste Testrunde zum Sichern der Schlüssel, die jedoch bisher unseren aktuellen Anforderungen entspricht, da verhindert wird, dass ein verwurzelter Entwicklungsserver sofort auf andere Serveranmeldeinformationen zugreifen kann, die in einer EDB gespeichert sind.

Um ein Rezept am Ende jeder Laufliste zu haben, verwende ich einen Messer-Exec-Job, der sicherstellt, dass dieses Rezept für delete_keys genau das letzte Rezept auf jedem Knoten ist.


0

Meine Schlüssel sind in die von uns verwendeten AMIs oder die von uns verwendeten Bilder eingebrannt. Ich mache es nicht als Teil des Bootstraps, da diese Daten nicht sicher sind. Sie können normalerweise Daten in Protokollen und dergleichen anzeigen, wenn Sie nicht vorsichtig sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.