Bewährte Methoden zum sicheren Speichern von API-Schlüsseln

Bild von Jose Fontano

In der Vergangenheit haben viele Leute Git-Repositorys verwendet, um vertrauliche Informationen zu ihren Projekten zu speichern.

In letzter Zeit haben einige Leute angekündigt, dass sie API-Schlüssel in ihren privaten GitHub-Repositorys speichern. Ich schreibe diesen Artikel, weil die Leute die Risiken des Speicherns von API-Schlüsseln mit Ihrem Code verstehen sollten.

Dieser Artikel ist nicht als dauerhafte Lösung für die Probleme gedacht, die beim Speichern von API-Schlüsseln auftreten können. Stattdessen ist es meine eigene Analyse des Problems und meine Vorschläge zur Behebung des Problems.

Was genau ist das Problem beim Speichern vertraulicher Informationen in der Nähe Ihres Codes in einem Git-Repository?

Warum sollten Sie keine API-Schlüssel in Git-Repositories speichern?

Das Speichern von API-Schlüsseln oder anderen vertraulichen Informationen in einem Git-Repository ist unter allen Umständen zu vermeiden. Auch wenn das Repository privat ist, sollten Sie es nicht als sicheren Ort zum Speichern vertraulicher Informationen betrachten.

Beginnen wir damit, warum es eine schlechte Idee ist, API-Schlüssel in öffentlichen Git-Repositorys zu speichern.

Von Natur aus kann jeder auf ein öffentliches Git-Repository zugreifen.

Mit anderen Worten, jeder mit einer Internetverbindung kann auf den Inhalt eines öffentlichen Git-Repository zugreifen. Darüber hinaus können sie den gesamten Code im Repository durchsuchen und möglicherweise sogar ausführen. Wenn Sie einen API-Schlüssel in einem öffentlichen Repository speichern, veröffentlichen Sie im Freien, sodass jeder darauf zugreifen kann.

Eine kürzliche Suche nach client_secret auf GitHub ergab, dass es mehr als 30.000 Commits gibt, die möglicherweise einen API-Schlüssel und ein Geheimnis preisgeben. In einigen Fällen kopieren Sie den Code nur und fügen ihn ein, um sofort auf die API zuzugreifen.

Dieses Problem wird so wichtig, dass einige Unternehmen in Ressourcen investieren, um sicherzustellen, dass keine API-Schlüssel und Geheimnisse verloren gehen.

Im vergangenen Jahr hat Slack begonnen, nach exponierten API-Tokens zu suchen und diese proaktiv für ungültig zu erklären. Diese Aktion verhindert den böswilligen Zugriff auf die Konten von Slack, kann jedoch möglicherweise nicht alle durchgesickerten Token finden.

Dies geschieht also in öffentlichen Git-Repositories. Was ist mit den privaten? Warum ist das ein Problem?

Private Git-Repositorys, die auf Diensten wie GitHub, GitLab und Bitbucket gehostet werden, sind einem anderen Risiko ausgesetzt. Wenn Sie eine Drittanbieteranwendung in einen der genannten Dienste integrieren, öffnen Sie möglicherweise Ihre privaten Repositorys für diese Drittanbieter. Diese Anwendungen können auf Ihre privaten Repositorys zugreifen und die darin enthaltenen Informationen lesen.

Dies alleine stellt noch kein Risiko dar. Stellen Sie sich vor, eine dieser Anwendungen wird für Angreifer anfällig. Durch den unbefugten Zugriff auf eine dieser Anwendungen von Drittanbietern erhalten Angreifer möglicherweise Zugriff auf Ihre vertraulichen Daten, einschließlich API-Schlüssel und Geheimnisse.

Also, wo sollen API-Schlüssel gespeichert werden?

Es gibt viele Alternativen zum sicheren Speichern von API-Schlüsseln und Geheimnissen. Bei einigen von ihnen können Sie Ihr Git-Repository verwenden und die vertraulichen Daten verschlüsseln. Andere Tools sind anspruchsvollere und entschlüsseln vertrauliche Informationen im Rahmen eines Bereitstellungsworkflows. Schauen wir uns einige der verfügbaren Lösungen an.

Git-Remote-Gcrypt

Mit der ersten Lösung können Sie ein ganzes Git-Repository verschlüsseln. Dazu fügt git-remote-gcrypt den Git-Remote-Helfern Funktionen hinzu, sodass eine neue verschlüsselte Transportschicht verfügbar wird. Benutzer müssen lediglich eine neue verschlüsselte Fernbedienung einrichten und den Code eingeben.

Lesen Sie weiter, wenn Sie nach einer detaillierteren Lösung suchen, mit der Sie einzelne Dateien verschlüsseln können.

Schwachsinn

git-secret ist ein Tool, das auf Ihrem lokalen Computer funktioniert und bestimmte Dateien verschlüsselt, bevor Sie sie in Ihr Repository verschieben. Hinter den Kulissen ist git-secret ein Shell-Skript, das mit GNU Privacy Guard (GPG) Dateien verschlüsselt und entschlüsselt, die möglicherweise vertrauliche Informationen enthalten.

Git-Krypta

Eine andere Lösung ist Git-Crypt. Es ist git-secret in seiner Funktionsweise sehr ähnlich, weist jedoch einige interessante Unterschiede auf.

Das Erste, was Sie an git-crypt bemerken sollten, ist, dass es sich um eine ausführbare Binärdatei handelt und nicht wie bei git-secret um ein Shell-Skript. Als ausführbare Binärdatei müssen Sie diese zunächst kompilieren oder eine Binärdistribution für Ihren Computer finden, um sie verwenden zu können.

Wenn Sie einen Mac verwenden, haben Sie Glück, denn HomeBrew bietet ein Paket für die Installation von Git-Crypt an. Sie müssen lediglich brew install git-crypt auf einem Terminal ausführen.

Schwarze Box

BlackBox ist ein Tool, das von Stack Overflow erstellt wurde. Dies ist das Unternehmen, das hinter beliebten Q & A-Communities wie Stack Overflow selbst, Server Fault und Super User steht. BlackBox ist ein robustes Tool, da es mit Git sowie anderen Versionskontrollsystemen wie Mercurial und Subversion zusammenarbeitet.

Es unterstützt auch die Verschlüsselung kleiner Zeichenfolgen und nicht nur ganzer Dateien. Wenn Sie mit Puppet arbeiten und Puppets Hiera verwenden, ein Tool zur Suche nach Schlüsselwerten für Konfigurationsdaten.

Die Möglichkeit, einzelne Zeichenfolgen zu verschlüsseln und zu entschlüsseln, macht BlackBox zu einer großartigen Lösung für das Sichern von API-Schlüsseln und Geheimnissen.

Heroku-Konfiguration und Konfigurationsvarianten

Wenn Sie mit Heroku arbeiten, sollten Sie keine vertraulichen Informationen wie API-Schlüssel und Geheimnisse in Ihren Git-Repositorys speichern. Heroku bietet eine Lösung, mit der Sie Konfigurationsvariablen festlegen können.

Ihre Anwendung kann dann zur Laufzeit auf den Inhalt dieser Konfigurationsvariablen zugreifen, indem Sie auf die entsprechenden Umgebungsvariablen zugreifen. Obwohl die Werte nicht verschlüsselt sind, können Sie mit dieser Lösung vermeiden, Ihr Git-Repository zum Speichern von API-Schlüsseln zu verwenden.

Dokku, eine Open Source-Lösung wie Heroku, bietet dieselben Funktionen.

Docker-Geheimnisse

Am Ende des Spektrums möglicher Lösungen stehen Docker-Geheimnisse. Diese Lösung wurde im Februar 2017 von Docker eingeführt und erfreut sich seitdem wachsender Beliebtheit.

Mit Docker-Geheimnissen können Sie verschlüsselte Variablen definieren und sie bestimmten Diensten zur Laufzeit zur Verfügung stellen. Geheimnisse werden sowohl während des Transports als auch im Ruhezustand verschlüsselt.

Dieser Ansatz macht Docker Secrets zur perfekten Lösung für die sichere und verschlüsselte Speicherung und Verwendung von API-Schlüsseln und -Secrets.

Zusammenfassung

Inzwischen sollten Sie sich der Gefahren bewusst sein, die mit dem Speichern vertraulicher Informationen wie API-Schlüsseln und Geheimnissen in öffentlichen und privaten Git-Repositorys verbunden sind.

Um die mit Informationslecks verbundenen Risiken zu bewerten und zu mindern, müssen Sie unbedingt wissen, auf welche Weise Ihre Repositorys möglicherweise offengelegt werden.

In diesem Artikel werden auch einige andere Lösungen vorgeschlagen, mit denen Sie API-Schlüssel und Geheimnisse verschlüsseln können, damit Sie Ihre Code-Repositorys sicher verwenden können.

Ich bin mir sicher, dass es weitere Lösungen gibt, mit denen Sie dieselben Ergebnisse erzielen können.