Eine Einführung in die sichere Verwaltung von Geheimnissen mit Versionskontrollsystemen

Einführung

Versionskontrollsoftware (VCS) ist ein wesentlicher Bestandteil der modernsten Softwareentwicklungspraktiken. Software wie Git, Mercurial, Bazaar, Perforce, CVS und Subversion bietet Entwicklern unter anderem die Möglichkeit, Momentaufnahmen ihres Projektverlaufs zu speichern, um eine bessere Zusammenarbeit zu ermöglichen, auf frühere Zustände zurückzugreifen und unbeabsichtigte Codeänderungen zu beheben sowie mehrere Versionen derselben zu verwalten Codebasis. Diese Tools ermöglichen es mehreren Entwicklern, sicher an demselben Projekt zu arbeiten, und bieten erhebliche Vorteile, auch wenn Sie nicht vorhaben, Ihre Arbeit mit anderen zu teilen.

Obwohl es wichtig ist, Ihrecode in der Quellcodeverwaltung zu speichern, ist es ebenso wichtig, dass einige Projektressourcenout Ihres Repositorys behalten. Bestimmte Daten wie Binärblobs und Konfigurationsdateien werden aus Gründen der Leistung und Benutzerfreundlichkeit am besten von der Quellcodeverwaltung ausgeschlossen. Vor allem aber sollten vertrauliche Daten wie Kennwörter, Geheimnisse und private Schlüssel aus Sicherheitsgründen niemals ungeschützt in ein Repository eingecheckt werden.

In diesem Handbuch werden wir zunächst erläutern, wie Sie nach vertraulichen Daten suchen, die bereits in Ihrem Repository gespeichert sind, und einige Strategien zur Schadensbegrenzung einführen, wenn Material gefunden wird. Anschließend werden einige Tools und Techniken beschrieben, mit denen das Hinzufügen von Geheimnissen zu Repositorys verhindert wird, Methoden zum Verschlüsseln vertraulicher Daten vor dem Festschreiben und Alternativen für die sichere geheime Speicherung.

Überprüfen Sie Ihr Git-Repository auf vertrauliche Daten

Bevor Sie ein System zur Verwaltung Ihrer vertraulichen Daten einrichten, sollten Sie überprüfen, ob in Ihren Projektdateien bereits geheimes Material vorhanden ist.

Scannen Ihrer Projekte

Wenn Sie eine genaue Zeichenfolge kennen, nach der Sie suchen möchten, können Sie mit der systemeigenen Suchfunktion Ihres VCS-Tools prüfen, ob der angegebene Wert in Commits vorhanden ist. Mitgit kann ein Befehl wie dieser beispielsweise nach einem bestimmten Kennwort suchen:

git grep my_secret $(git rev-list --all)

Dadurch wird der gesamte Projektverlauf nach der angegebenen Zeichenfolge durchsucht.

Eine Reihe von speziellen Tools kann dabei helfen, Geheimnisse allgemeiner auszunutzen. Tools wiegitrob können jedes Repository in einer GitHub-Organisation nach Dateinamen durchsuchen, die mit denen in einer vordefinierten Liste übereinstimmen. Dasgit-secrets-Projekt kann Repositorys lokal nach definierten Geheimnissen durchsuchen, basierend auf Mustern sowohl in den Dateipfaden als auch im Inhalt. Das TooltruffleHogverwendet einen anderen Ansatz, indem Repositorys nach Zeichenfolgen mit hoher Entropie durchsucht werden, die wahrscheinlich generierte Geheimnisse darstellen, die von Anwendungen verwendet werden. Um einige dieser Funktionen in einem einzigen Werkzeug zu kombinieren, klebtgit-all-secrets die oben genannten Werkzeuge zusammen oder implementiert sie in einer einheitlichen Oberfläche neu.

Schadensbegrenzungsoptionen

Wenn Sie Dateien oder Daten entdecken, die nicht festgeschrieben werden sollten, ist es wichtig, angemessen zu reagieren, um die Auswirkungen der durchgesickerten Daten zu verringern. Die richtige Vorgehensweise hängt davon ab, wie weit das Repository gemeinsam genutzt wird, welche Art von Material verfügbar ist und ob Sie alle Erwähnungen des durchgesickerten Inhalts entfernen oder ihn einfach ungültig machen möchten.

Wenn Anmeldeinformationen für Ihr Projekt-Repository festgeschrieben sind, sollte der erste Schritt darin bestehen, das Kennwort oder den geheimen Schlüssel sofort zu ändern, um den vorherigen Wert ungültig zu machen. Dieser Schritt sollte unabhängig davon ausgeführt werden, ob oder wie häufig das Repository aus verschiedenen Gründen gemeinsam genutzt wird. Die Anforderungen an die Zusammenarbeit können sich im Laufe eines Projekts ändern und zu einer höheren Gefährdung führen als bisher angenommen. Selbst wenn Sie wissen, dass Sie Ihr Projekt niemals absichtlich freigeben werden, können Sicherheitsvorfälle Daten an unbeabsichtigte Personen weitergeben. Daher ist es am besten, die aktuellen Werte proaktiv zu ändern.

Während Sie Ihre manipulierten Anmeldeinformationen in jedem Fall wechseln sollten, möchten Sie möglicherweise auch die durchgesickerten Anmeldeinformationen oder Dateien vollständig aus Ihrem VCS-Verlauf entfernen. Dies ist besonders wichtig für vertrauliche Daten, die nicht geändert werden können, wie z. B. Benutzerdaten, die unbeabsichtigt übertragen wurden. Um die Daten aus Ihren Repositorys zu entfernen, müssen Sie den VCS-Verlauf neu schreiben, um die Datei von früheren Commits zu entfernen. Dies kannusing native git commands or with the help of some dedicated tools erfolgen. Es ist wichtig zu beachten, dass auch wenn Sie alle Datensätze im Repository entfernen, jeder, der zuvor die Codebasis kopiert hat, immer noch Zugriff auf das vertrauliche Material hat. Beachten Sie dies, wenn Sie das Ausmaß der Auswirkungen abschätzen.

Wenn Sie den Verdacht haben, dass Geheimnisse kompromittiert wurden, sollten Sie die mit diesen Programmen oder Diensten verknüpften Protokolldaten überprüfen, um festzustellen, ob ungewöhnliche Zugriffe oder ungewöhnliches Verhalten aufgetreten sind. Dies kann in Form von ungewöhnlichen Aktivitäten oder Anforderungen geschehen, die normalerweise aus Ihrem internen Netzwerk stammen und von Adressen stammen, die Sie nicht kontrollieren. Diese Untersuchung hilft Ihnen bei der Festlegung geeigneter nächster Schritte zum Schutz Ihrer Infrastruktur und Daten.

Verwenden von VCS-Funktionen, um das Festschreiben von Geheimnissen zu vermeiden

Bevor Sie sich mit externen Tools befassen, sollten Sie sich mit einigen Funktionen und Fähigkeiten Ihrer VCS-Tools vertraut machen, um zu verhindern, dass unerwünschte Daten in Ihr Repository übertragen werden.

Sensible Dateien ignorieren

Die einfachste Möglichkeit, Dateien mit vertraulichen Daten aus Ihrem Repository fernzuhalten, besteht darin, die Ignorierfunktionen Ihres VCS von Anfang an zu nutzen. VCS-Ignorierdateien (wie.gitignore) definieren Muster, Verzeichnisse oder Dateien, die aus dem Repository ausgeschlossen werden sollen. Dies ist eine gute erste Verteidigungslinie gegen das versehentliche Offenlegen von Daten. Diese Strategie ist nützlich, da sie nicht auf externen Tools basiert, die Liste der ausgeschlossenen Elemente automatisch für Mitbearbeiter konfiguriert und einfach einzurichten ist.

Die VCS-Ignorierfunktionalität ist zwar als Basis nützlich, sie beruht jedoch darauf, dass die Ignorierdefinitionen auf dem neuesten Stand sind. Es ist einfach, vertrauliche Daten aus Versehen zu übertragen, bevor die Ignorierdatei aktualisiert oder implementiert wird. Ignorieren von Mustern hat nur eine Granularität auf Dateiebene, daher müssen Sie möglicherweise einige Teile Ihres Projekts umgestalten, wenn Geheimnisse mit Code oder anderen Daten gemischt werden, die festgeschrieben werden sollen.

Verwenden von VCS-Hooks zum Überprüfen von Dateien vor dem Festschreiben

Die meisten modernen VCS-Implementierungen enthalten ein System namens "Hooks" zum Ausführen von Skripten, bevor oder nachdem bestimmte Aktionen im Repository ausgeführt wurden. Mit dieser Funktion können Sie ein Skript ausführen, um den Inhalt anstehender Änderungen auf vertrauliches Material zu überprüfen. Das zuvor erwähntegit-secrets-Tool kannpre-commit-Hooks installieren, die eine automatische Überprüfung der Art des ausgewerteten Inhalts implementieren. Sie können Ihre eigenencustom scriptshinzufügen, um zu überprüfen, gegen welche Muster Sie sich schützen möchten.

Repository-Hooks bieten einen wesentlich flexibleren Mechanismus für die Suche nach und den Schutz vor dem Hinzufügen vertraulicher Daten zum Zeitpunkt des Commits. Diese erhöhte Flexibilität hat zur Folge, dass Sie das gesamte Verhalten, das Sie implementieren möchten, skripten müssen. Dies kann je nach Art der zu überprüfenden Daten möglicherweise ein schwieriger Prozess sein. Eine weitere Überlegung ist, dass Hooks nicht so einfach freigegeben werden können wie ignorierte Dateien, da sie nicht Teil des Repositorys sind, das andere Entwickler kopieren. Jeder Mitwirkende muss die Hooks auf seinem eigenen Computer einrichten, was die Durchsetzung schwieriger macht.

Dateien explizit zum Staging-Bereich hinzufügen

Eine einfache Strategie, die Ihnen dabei helfen kann, Ihre Commits besser zu berücksichtigen, besteht darin, dem VCS-Staging-Bereich Elemente nur explizit nach Namen hinzuzufügen. Während das Hinzufügen von Dateien durch Platzhalter oder Erweiterung einige Zeit spart, können Sie verhindern, dass versehentlich Dateien hinzugefügt werden, die ansonsten möglicherweise hinzugefügt werden. Ein positiver Nebeneffekt davon ist, dass Sie im Allgemeinen konzentriertere und konsistentere Commits erstellen können, was bei vielen anderen Aspekten der Zusammenarbeit hilfreich ist.

Speichern verschlüsselter Geheimnisse im Repository

In vielen Fällen wird empfohlen, vertrauliche Daten vollständig aus Ihrem Code-Repository zu entfernen. Manchmal ist es jedoch erforderlich oder nützlich, einige vertrauliche Daten in ein Repository aufzunehmen, damit andere berechtigte Benutzer darauf zugreifen können. Zu diesem Zweck können Sie mit verschiedenen Tools vertrauliche Dateien in einem Repository verschlüsseln, während die meisten Dateien für alle zugänglich sind.

Implementierungen

Es gibt eine Reihe verschiedener Softwareteile, die die partielle Repository-Verschlüsselung vereinfachen. Die meisten basieren auf denselben Grundprinzipien, bieten jedoch jeweils eine einzigartige Implementierung, die je nach Projektanforderungen einige überzeugende Vorteile bieten kann.

Ein Projekt namensgit-secret (nicht zu verwechseln mit dem zuvor erwähnten Toolgit-secrets) kann den Inhalt geheimer Dateien mit den GPG-Schlüsseln vertrauenswürdiger Mitarbeiter verschlüsseln. Durch die Nutzung eines vorhandenen Vertrauensnetzes könnengit-secret-Benutzer den Zugriff auf Dateien verwalten, indem sie die Benutzer angeben, die in der Lage sein sollen, jedes Element zu entschlüsseln. Wenn der Benutzer seinen öffentlichen Schlüssel auf einem Schlüsselserver veröffentlicht hat, können Sie ihm Zugriff auf verschlüsselte Inhalte gewähren, ohne ihn jemals direkt nach seinem Schlüssel zu fragen.

Das Toolgit-crypt funktioniert ähnlich wiegit-secret, da es Ihnen ermöglicht, Teile Ihres Repositorys zu verschlüsseln und festzuschreiben und den Zugriff auf andere Mitwirkende mithilfe ihrer GPG-Schlüssel zu regulieren. Dasgit-crypt-Projekt kann alternativ die symmetrische Schlüsselverschlüsselung verwenden, wenn Ihr Team kein GPG verwendet oder wenn dieses Verwaltungsmuster für Ihren Anwendungsfall zu komplex ist. Darüber hinaus werdengit-crypt zum Zeitpunkt des Festschreibens automatisch verschlüsselt und beim Klonen mit den Filter- und Diff-Attributen vongitentschlüsselt, was die Verwaltung vereinfacht.

BlackBox project ist eine weitere Lösung, die sich auf GPG stützt, um Inhalte gemeinsam zu verschlüsseln. Im Gegensatz zu den vorherigen Tools funktioniert BlackBox mit vielen verschiedenen Versionskontrollsystemen, sodass es projektübergreifend verwendet werden kann. Ursprünglich als Tool für das Puppet-Ökosystem konzipiert, wurde es überarbeitet, um ein offeneres, auf Plugins basierendes System zu unterstützen. BlackBox kann einzelne Dateien nach Belieben verschlüsseln und entschlüsseln, bietet jedoch auch einen Mechanismus zum transparenten Aufrufen eines Texteditors, mit dem die Datei entschlüsselt, ein Editor geöffnet und beim Speichern erneut verschlüsselt werden kann.

Außer den oben genannten allgemeinen Lösungen gibt es auch einige Lösungen, die für bestimmte Repository-Typen entwickelt wurden. Ab Version 5.1 können Ruby on Rails-Projekte beispielsweiseencrypted secrets within the repository enthalten, wobei ein System verwendet wird, das einen Hauptschlüssel außerhalb des Repositorys einrichtet.

Vorteile

Durch das Verschlüsseln und Übertragen Ihrer geheimen Daten in Ihr Repository können Sie Ihre Anmeldeinformationen auf dem neuesten Stand halten und mit der Art und Weise synchronisieren, in der der Code sie verwendet. Dies kann eine Abweichung zwischen Änderungen des Formats oder der Kennzeichnung vertraulicher Daten und der Art und Weise, wie der Code sie verwendet oder auf sie zugreift, vermeiden. Änderungen an der Codebasis können vorgenommen werden, ohne auf eine externe Ressource zu verweisen.

Darüber hinaus kann die Aufbewahrung Ihrer Geheimnisse mit Ihrem Code die Bereitstellung erheblich vereinfachen. Anstatt Informationen von mehreren Standorten abzurufen, um ein voll funktionsfähiges System zu erhalten, werden alle Informationen in einer einzigen Einheit zusammengefasst, wobei einige Komponenten entschlüsselt werden müssen. Dies kann sehr hilfreich sein, wenn Sie nicht über die für die Unterstützung eines externen geheimen Speichers eingerichtete Infrastruktur verfügen oder den für die Bereitstellung Ihres Projekts erforderlichen Koordinationsaufwand minimieren möchten.

Der allgemeine Vorteil der Verwendung eines Tools zum Verschlüsseln vertraulicher Informationen in einem Repository besteht darin, dass die Verschlüsselung ohne zusätzliche Infrastruktur oder Planung einfach implementiert werden kann. Benutzer können in wenigen Minuten von der Speicherung von Geheimnissen als reine Textdaten zu einem sicheren, verschlüsselten System übergehen. Bei Projekten mit einem einzelnen Entwickler oder einem kleinen, statischen Team erfüllen diese Tools wahrscheinlich alle geheimen Verwaltungsanforderungen, ohne die Komplexität zu erhöhen.

Nachteile

Wie bei jeder Lösung gibt es auch bei dieser Art des geheimen Managements einige Kompromisse.

Grundsätzlich sind Geheimnisse Konfigurationsdaten, kein Code. Während der Code, der in verschiedenen Umgebungen bereitgestellt wird, wahrscheinlich derselbe ist, kann die Konfiguration sehr unterschiedlich sein. Indem Sie den Code in Ihrem Repository geheim halten, wird es schwieriger, die Konfiguration in verschiedenen Umgebungen beizubehalten, und die Wiederverwendung von Anmeldeinformationen wird in einer Weise gefördert, die sich negativ auf die Sicherheit auswirkt.

In ähnlicher Weise ist es oft schwierig, einen granularen, mehrstufigen Zugriff auf verschlüsselte Geheimnisse in einem Repository zu konfigurieren. Die erforderliche Zugriffskontrolle ist häufig viel komplexer als die Tools, die zum Verschlüsseln von Geheimnissen in VCS verwendet werden. Dies gilt insbesondere für große Teams und Projekte. Um Mitarbeiter zu gewinnen oder Mitwirkende aus dem Projekt zu entfernen, müssen alle Dateien mit vertraulichen Daten im Repository neu verschlüsselt werden. Während diese Dienstprogramme es normalerweise einfach machen, die zum Schutz der Dateien verwendete Verschlüsselung zu ändern, sollten die Geheimnisse in diesen Dateien unter diesen Umständenalso gedreht werden, was ein schwieriger manueller Vorgang sein kann.

Ein wichtiger Punkt, der häufig übersehen wird, ist, dass die zum Entschlüsseln der Daten verwendeten Schlüssel häufig zusammen mit dem verschlüsselten Inhalt gespeichert werden. Auf dem Laptop eines Entwicklers sind die GPG-Schlüssel, mit denen vertrauliche Daten entschlüsselt werden können, häufig vorhanden und können ohne weitere Eingabe verwendet werden. Sie können dies etwas abschwächen, indem Sie eine GPG-Passphrase verwenden. Für ein großes Team ist dies jedoch schwierig durchzusetzen. Wenn der Laptop eines Teammitglieds gefährdet ist, kann auf die vertraulichsten Daten in Ihrem Projekt zugegriffen werden, als ob sie im Klartext wären.

Im Allgemeinen kann es schwierig sein, Geheimnisse in einem Repository über einen längeren Zeitraum zu schützen. Durch einfache Vorgänge wie das Zurücksetzen von Codeänderungen kann der zuvor entfernte Zugriff versehentlich wiederhergestellt werden. Wenn ein privater Schlüssel verfügbar gemacht wird, können historische Werte wiederhergestellt und aus dem Repository-Verlauf entschlüsselt werden. Obwohl der VCS-Verlauf ein Protokoll der Verschlüsselungsänderungen enthält, gibt es keine Methode zum Überwachen des geheimen Zugriffs, um ungewöhnlichen Zugriff zu ermitteln.

Verwenden von Konfigurationsverwaltungssystemen für die geheime Verwaltung

Die ersten Erfahrungen vieler Benutzer mit der zentralisierten geheimen Verwaltung stammen von Konfigurationsverwaltungstools. Da diese Tools für die Koordination der Konfiguration vieler verschiedener Maschinen von einem zentralen Standort aus zuständig sind, ist eine gewisse Geheimverwaltung erforderlich, um sicherzustellen, dass Knoten nur auf die von ihnen benötigten Werte zugreifen können.

Implementierungen

Chef encrypted data bags undchef-vault bieten einige integrierte geheime Verwaltungsfunktionen für die von Chef verwaltete Infrastruktur. Verschlüsselte Datentaschen werden verwendet, um vertrauliche Werte vor dem Erscheinen im Revisionsverlauf oder auf anderen Rechnern mithilfe gemeinsamer Geheimnisse zu schützen. Mit Chef-Vault können Geheimnisse stattdessen mit dem öffentlichen Schlüssel des Zielcomputers verschlüsselt werden. Dies bietet zusätzliche Sicherheit, die die Entschlüsselungsfunktionen für die vorgesehenen Empfänger isoliert.

In ähnlicher Weise kann das Schlüsselwertspeichersystem vonPuppet’s Hierazusammen mitHiera eyamlverwendet werden, um Geheimnisse für bestimmte Infrastrukturkomponenten sicher zu verwalten. Im Gegensatz zu einigen anderen Systemen kennt Hiera eyaml die Syntax und Struktur von YAML, dem von Hiera verwendeten Datenserialisierungsformat, mit dem nur die vertraulichen Werte anstelle der gesamten Datei verschlüsselt werden können. Auf diese Weise können Sie für die meisten Aufgaben mit normalen Tools mit Dateien arbeiten, die verschlüsselte Daten enthalten. Da die Backends steckbar sind, können Teams die GPG-Verschlüsselung implementieren, um den Zugriff einfach zu verwalten.

Saltstack verwendetPillars, um Daten zu speichern, die für bestimmte Maschinen bestimmt sind. Um diese Elemente zu schützen, können Benutzer die YAML-Werte mit GPG verschlüsseln und dann dieGPG rendererkonfigurieren, damit Salt die Werte zur Laufzeit entschlüsseln kann. Wie bei Hiera eyaml werden bei diesem System nur die vertraulichen Daten und nicht die gesamte Datei verschlüsselt, sodass normale Dateibearbeitungs- und Diff-Tools ordnungsgemäß funktionieren.

Ansible enthältAnsible Vault, ein Verschlüsselungssystem und ein Befehlszeilentool zum Verschlüsseln vertraulicher YAML-Dateien innerhalb einer Playbook-Struktur. Ansible kann dann die geheimen Dateien zur Laufzeit transparent entschlüsseln, um die geheimen und nicht geheimen Daten zu kombinieren, die für die Ausführung bestimmter Aufgaben erforderlich sind. Ansible Vault verschlüsselt die gesamte Datei und nicht die Werte. Daher erfordert die Bearbeitung eine Entschlüsselung, und Diff-Tools können keine genauen Änderungsinformationen anzeigen. Ab Ansible 2.3single variables can be encrypted in variable files haben Benutzer jedoch die Wahl, wie sie vertrauliche Werte verschlüsseln möchten.

Vorteile

Diese Lösungen eignen sich gut für einige der Herausforderungen, die mit der Verwaltung von Geheimnissen in Konfigurationsverwaltungskontexten verbunden sind. Sie können den Zugriff auf Geheimnisse orchestrieren, indem sie das vorhandene Infrastruktur-Inventarsystem und die Rollenbezeichnungen nutzen, die die Art des Zugriffs definieren, den jeder Computer benötigt. Dieselben Mechanismen, die sicherstellen, dass jeder Computer die richtige Konfiguration erhält, können sicherstellen, dass Geheimnisse nur an Hosts übermittelt werden, die sie benötigen.

Durch die Verwendung von Tools, die für Ihre vorhandenen Infrastrukturverwaltungs- und Bereitstellungssysteme typisch sind, werden die Betriebskosten für die Implementierung der Verschlüsselung minimiert. Es ist einfacher, Geheimnisse mithilfe von Tools in Ihrer Umgebung auf Verschlüsselung zu migrieren, und es ist einfacher, die Laufzeitentschlüsselung von Geheimnissen ohne zusätzliche Schritte zu integrieren. Wenn Sie bereits ein Konfigurationsverwaltungssystem verwenden, ist die Verwendung der darin enthaltenen geheimen Verwaltungsmechanismen wahrscheinlich der einfachste erste Schritt zum Schutz Ihrer vertraulichen Daten.

Nachteile

Die enge Integration bedeutet, dass Benutzer ihre vorhandenen Systeme zur Verwaltung ihrer Geheimnisse verwenden können. Dies bedeutet jedoch, dass diese Lösungen an ihre jeweiligen Konfigurationsmanagement-Tools gebunden sind. Die Verwendung der meisten dieser Strategien in anderen Kontexten ist schwierig oder unmöglich. Dies bedeutet, dass Sie eine Abhängigkeit von den Konfigurationsverwaltungstools selbst hinzufügen. Die enge Integration in eine einzelne Plattform könnte es auch problematisch für externe Systeme machen, die Zugriff auf die Daten benötigen. In einigen Fällen können die Geheimnisse ohne eine externe API oder einen aufrufbaren Befehl effektiv „abgefangen“ werden, sofern nicht über das Konfigurationsverwaltungssystem darauf zugegriffen wird. Dies kann einschränkend sein.

Viele der Nachteile des Speicherns verschlüsselter Geheimnisse in Ihrem Anwendungsrepository gelten auch für das Speichern von Geheimnissen in Ihrem Konfigurationsverwaltungssystem. Anstatt dass Laptops mit Ihren Anwendungsrepositorys ein Vektor für Kompromisse sind, ist auch jeder Laptop oder Computer mit dem Konfigurationsverwaltungsrepository anfällig. Grundsätzlich ist jedes System, das sowohl die verschlüsselten Werte als auch den Entschlüsselungsschlüssel enthält, für diese Art von Kompromittierung anfällig.

Ein verwandtes Problem ist, dass das Konfigurationsmanagementsystem zwar sicherstellen kann, dass Geheimnisse nur für die richtigen Computer zugänglich sind, es jedoch oft schwieriger ist, differenzierte Zugriffskontrollen zu definieren, um die Anzahl der Teammitglieder zu beschränken. Einige Systeme können nur mit einem einzigen Kennwort oder Schlüssel verschlüsseln, was die Möglichkeit einschränkt, den Zugriff von Teammitgliedern auf Geheimnisse zu partitionieren.

Verwenden eines externen Secret Management Service

Eine Alternative zum Speichern verschlüsselter Geheimnisse neben dem Code oder in Ihrem Konfigurationsverwaltungssystem besteht darin, einen dedizierten Dienst zum Verwalten vertraulicher Daten für Ihre Infrastruktur zu verwenden. Diese Dienste verschlüsseln und speichern vertrauliche Daten und beantworten autorisierte Anfragen mit den entschlüsselten Werten. Auf diese Weise können Entwickler sensibles Material aus ihren Repositorys in ein System verschieben, das die Verschlüsselung, Autorisierung und Authentifizierung sowohl für Benutzer als auch für Anwendungen koordiniert.

Implementierungen

Spezielle geheime Verwaltungsdienste wieHashiCorp’s Vaultbieten große Flexibilität und leistungsstarke Funktionen, um sensibles Material zu schützen, ohne die Benutzerfreundlichkeit zu beeinträchtigen. Vault schützt Daten in Ruhe und während des Transports und verwendet verschiedene „Backends“, um unterschiedliche Funktionen bereitzustellen und die Komplexität von Verschlüsselung, Speicherung und Authentifizierung zu verwalten. Zu den wichtigsten Funktionen gehören die Möglichkeit, dynamische Geheimnisse (kurzfristige Anmeldeinformationen für verbundene Dienste, die im laufenden Betrieb erstellt werden), die Datenverschlüsselung als Dienst (Verschlüsseln und Speichern von Daten von externen Diensten und erneutes Bereitstellen des entschlüsselten Inhalts, wenn dies von einem angefordert wird) zu konfigurieren autorisierte Partei) und mietbasierte geheime Verwaltung (Bereitstellung des Zugriffs für einen bestimmten Zeitraum, nach dessen Ablauf der Zugriff automatisch widerrufen wird). Die steckbare Architektur von Vault bedeutet, dass Speicher-Backends, Authentifizierungsmechanismen usw. sind alle austauschbar, wenn sich die geschäftlichen Anforderungen ändern.

Das geheime VerwaltungssystemKeywhizvon Square ist ein weiterer dedizierter Dienst, der zur allgemeinen Sicherheit sensibler Daten verwendet wird. Wie Vault legt Keywhiz APIs offen, mit denen Clients und Benutzer Geheimnisse speichern und auf sie zugreifen können. Eine einzigartige Funktion von Keywhiz ist die Möglichkeit, Geheimnisse mithilfe eines FUSE-Dateisystems preiszugeben, einem virtuellen Dateisystem, das Clients bereitstellen können, um als Pseudodateien auf vertrauliche Daten zuzugreifen. Dieser Mechanismus ermöglicht es vielen verschiedenen Programmtypen, ohne Hilfe eines Agenten oder eines Wrappers auf die benötigten Daten zuzugreifen, und Administratoren können den Zugriff mit normalen Unix-Dateisystemberechtigungen sperren.

PinterestKnox ist ein weiterer Dienst zum Verwalten von Geheimnissen. Es bietet viele der gleichen Funktionen wie Vault und Keywhiz. Ein Merkmal, das in den anderen Systemen nicht zu finden ist, ist die Fähigkeit, Schlüssel im Laufe der Zeit zu drehen, indem explizite Zustände für Schlüsselversionen bereitgestellt werden. Eine Schlüsselversion kann als primär markiert werden, um anzuzeigen, dass es sich um das derzeit bevorzugte Geheimnis handelt, aktiv, um anzuzeigen, dass es sich um die Version handelt, die weiterhin verwendet werden kann, oder inaktiv, um die Version zu deaktivieren. Mit diesem System können Administratoren im Laufe der Zeit Schlüssel auf einer ganzen Flotte von Computern rollen, ohne die Dienste zu unterbrechen.

Vorteile

Spezielle Geheimverwaltungsdienste bieten gegenüber anderen Systemen viele überzeugende Vorteile. Wenn Sie die Komplexität der Sicherung und Verwaltung vertraulicher Daten auf ein eigenständiges System verlagern, müssen Sie diese Bedenken nicht mehr in den Repositorys für das Anwendungs- und Konfigurationsmanagement berücksichtigen. Diese Aufteilung der Zuständigkeiten vereinfacht das Modell der Betriebssicherheit, indem die geheime Speicherung zentralisiert und der Zugriff über streng kontrollierte Schnittstellen gesteuert wird. Durch die Bereitstellung generischer Schnittstellen für die Interaktion mit dem System können autorisierte Benutzer oder Clients unabhängig vom verwendeten Konfigurationsverwaltungssystem oder VCS auf ihre Geheimnisse zugreifen.

Aus administrativer Sicht bieten geheime Verwaltungssysteme viele einzigartige Funktionen, die in anderen Tools nicht verfügbar sind. Die einfache Rotation von Verschlüsselungsschlüsseln sowie der zugrunde liegenden Geheimnisse, die sie schützen, ist für große Bereitstellungen und komplexe Systeme, die die Koordination vieler verschiedener vertraulicher Werte erfordern, unglaublich nützlich. Der Zugriff kann einfach geregelt und widerrufen werden, ohne dass Code bereitgestellt oder Änderungen an der gesamten Flotte vorgenommen werden müssen. Funktionen wie dynamische Geheimnisse ermöglichen geheimen Verwaltungsservern den Zugriff auf externe Dienste wie Datenbanken, um bei Bedarf benutzerspezifische Anmeldeinformationen zu erstellen. Kurzfristiger, mietbasierter Zugriff auf Geheimnisse fungiert als automatischer Mechanismus zur Einschränkung oder zum Ablauf des Zugriffs, ohne dass ein ausdrücklicher Widerruf erforderlich ist.

Eine der wichtigsten Verbesserungen, die die zentrale Geheimverwaltung bietet, ist die Überprüfbarkeit. Jedes der oben genannten Systeme führt umfassende Aufzeichnungen darüber, wann Geheimnisse hinzugefügt, angefordert, abgerufen oder geändert werden. Dies kann hilfreich sein, um Anomalien zu erkennen und verdächtiges Verhalten zu erkennen, und es kann auch hilfreich sein, das Ausmaß eines Zugriffs im Falle einer Kompromittierung zu beurteilen. Durch eine ganzheitliche Sicht auf die vertraulichen Daten Ihres Unternehmens, die Richtlinien zur Zugriffssteuerung und Informationen zu jeder erfolgreichen und versuchten Änderung oder jedem erfolgreichen Abruf sind die Teams in der Lage, fundierte Entscheidungen zur Infrastruktursicherheit zu treffen.

Nachteile

Der Hauptnachteil eines zentralisierten Geheimverwaltungssystems ist der zusätzliche Aufwand, der sowohl für die Infrastruktur als auch für die Verwaltung erforderlich ist.

Das Einrichten eines zentralen Systems erfordert viel Planung, Test und Koordination, bevor es in einer Produktionsumgebung bereitgestellt wird. Sobald die Infrastruktur betriebsbereit ist, müssen die Clients aktualisiert werden, um die APIs des geheimen Verwaltungsservers abzufragen, oder es muss ein Agentenprozess konfiguriert werden, um Geheimnisse für die Prozesse abzurufen, die dies erfordern. Es müssen Richtlinien festgelegt werden, die festlegen, welche Anwendungen, Infrastrukturen und Teammitglieder Zugriff auf die einzelnen geschützten Werte haben sollen.

Aufgrund des Werts der zu schützenden Daten wird der geheime Verwaltungsserver zu einer der wichtigsten zu verwaltenden Sicherheitsumgebungen. Durch die Zentralisierung wird die zu schützende Oberfläche zwar minimiert, das System selbst wird jedoch zu einem hochwertigen Ziel für böswillige Akteure. Während viele Lösungen Funktionen wie Sperrmodi, schlüsselbasierte Neustarts und Überwachungsprotokolle enthalten, ist für den nicht autorisierten Zugriff auf einen aktiven, entschlüsselten geheimen Speicher eine umfassende Korrektur erforderlich.

Über die anfänglichen Kosten für die Konfiguration und die Sicherheitselemente hinaus bietet die Bereitstellung aller vertraulichen Daten von einem einzigen Service eine zusätzliche geschäftskritische Komponente für Ihre Infrastruktur. Da für das Bootstrapping neuer Anwendungen und für Routinevorgänge häufig Geheimnisse erforderlich sind, kann die Ausfallzeit der geheimen Verwaltung zu schwerwiegenden Unterbrechungen führen, die möglicherweise erst behoben werden können, wenn der Dienst wiederhergestellt werden kann. Die Verfügbarkeit ist entscheidend für ein System, das für die Koordination zwischen so vielen verschiedenen Komponenten verantwortlich ist.

Einpacken

Wenn Sie verschiedene Methoden zum Schutz vertraulicher Daten und zur Koordination des erforderlichen Zugriffs während der Bereitstellung evaluieren, ist es wichtig, das Gleichgewicht zwischen Sicherheit, Benutzerfreundlichkeit und Anforderungen Ihres Projekts zu berücksichtigen. Die oben beschriebenen Lösungen decken eine Vielzahl von Anwendungsfällen ab und bieten Skalierbarkeit und Schutz in unterschiedlichem Maße.

Die beste Wahl für Ihr Projekt oder Ihre Organisation hängt wahrscheinlich von der Menge der zu schützenden vertraulichen Daten, der Größe Ihres Teams und den Ressourcen ab, die für die Verwaltung der verschiedenen Lösungen zur Verfügung stehen. In den meisten Fällen ist es sinnvoll, klein anzufangen und Ihre geheimen Verwaltungsanforderungen zu überdenken, wenn sich Ihre Umstände ändern. Während Sie jetzt möglicherweise nur einige Geheimnisse schützen und mit einem kleinen Team zusammenarbeiten müssen, werden die Kompromisse für dedizierte Lösungen in Zukunft möglicherweise zwingender.