Best Practices für die sichere Speicherung von API-Schlüsseln

In der Vergangenheit haben viele Leute Git-Repositories 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 Sie API-Schlüssel nicht in Git-Repositorys speichern sollten

Das Speichern von API-Schlüsseln oder anderen vertraulichen Informationen in einem gitRepository sollte unbedingt vermieden werden. Selbst wenn das Repository privat ist, sollten Sie es nicht als sicheren Ort zum Speichern vertraulicher Informationen betrachten.

Lassen Sie uns zunächst untersuchen, warum es eine schlechte Idee ist, API-Schlüssel in öffentlichengit Repositorys zu speichern .

Auf ein öffentliches gitRepository kann von Natur aus jeder zugreifen.

Mit anderen Worten, jeder mit einer Internetverbindung kann auf den Inhalt eines öffentlichen gitRepositorys 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 ihn offen, damit jeder ihn sehen kann.

Eine kürzlich durchgeführte 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 offenlegen. In einigen Fällen kopieren Sie nur den Code 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 durchgesickert sind.

Im vergangenen Jahr begann Slack, nach exponierten API-Token zu suchen und diese proaktiv ungültig zu machen. Diese Aktion verhindert den böswilligen Zugriff auf Slacks Konten, 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 allein stellt zwar kein Risiko dar, stellen Sie sich jedoch vor, dass eine dieser Anwendungen für Angreifer anfällig wird. 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.

Wo sollten API-Schlüssel gespeichert werden?

Es gibt viele Alternativen zum sicheren Speichern von API-Schlüsseln und Geheimnissen. Mit einigen von ihnen können Sie Ihr Git-Repository verwenden und die vertraulichen Daten verschlüsseln. Andere Tools sind ausgefeilter und entschlüsseln vertrauliche Informationen als Teil 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. git-remote-gcrypt fügt dazu Git-Remote-Helfern Funktionen hinzu, sodass eine neue verschlüsselte Transportschicht verfügbar wird. Benutzer müssen nur eine neue verschlüsselte Fernbedienung einrichten und Code hineinschieben.

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

git-secret

git-secretist ein Tool, das auf Ihrem lokalen Computer funktioniert und bestimmte Dateien verschlüsselt, bevor Sie sie in Ihr Repository übertragen. Hinter den Kulissen git-secretbefindet sich ein Shell-Skript, das GNU Privacy Guard (GPG) zum Ver- und Entschlüsseln von Dateien verwendet, die möglicherweise vertrauliche Informationen enthalten.

git-crypt

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 bemerken sollten, git-cryptist, dass es sich um eine ausführbare Binärdatei handelt und nicht um ein Shell-Skript, wie es git-secret ist. Eine ausführbare Binärdatei zu sein bedeutet, dass Sie sie erst kompilieren müssen, um sie zu verwenden, oder eine Binärdistribution für Ihren Computer finden müssen.

Wenn Sie einen Mac verwenden, haben Sie Glück, denn HomeBrew bietet ein git-crypteinbaufertiges Paket. Alles, was Sie tun müssen, ist Brew Install git-cryptauf einem Terminal auszuführen .

Schwarze Box

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

Es unterstützt auch die Verschlüsselung kleiner Zeichenfolgen und nicht nur ganzer Dateien. Dies geschieht bei der Arbeit mit Puppet und unter Verwendung von Puppets Hiera, einem Schlüsselwertsuchwerkzeug 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 die Sicherung von API-Schlüsseln und Geheimnissen.

Heroku-Konfiguration und Konfigurations-Vars

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 zugreift. Obwohl die Werte nicht verschlüsselt sind, können Sie mit dieser Lösung die Verwendung Ihres Git-Repositorys zum Speichern von API-Schlüsseln vermeiden.

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

Docker Geheimnisse

Am Ende des Spektrums möglicher Lösungen stehen die Geheimnisse von Docker. Diese Lösung wurde von Docker im Februar 2017 eingeführt. Seitdem hat sie an Popularität gewonnen.

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

Dieser Ansatz macht Docker-Geheimnisse zur perfekten Lösung, um API-Schlüssel und Geheimnisse sicher und verschlüsselt zu speichern und zu verwenden.

Zusammenfassung

Inzwischen sollten Sie sich der Gefahren bewusst sein, die durch das Speichern vertraulicher Informationen wie API-Schlüssel und Geheimnisse in öffentlichen und privaten Git-Repositorys entstehen können.

Das Verständnis der potenziellen Möglichkeiten, wie Ihre Repositorys verfügbar gemacht werden können, ist der Schlüssel zur Bewertung und Minderung der mit Informationslecks verbundenen Risiken.

In diesem Artikel werden auch einige verschiedene 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 sicher, es gibt mehr Lösungen, mit denen Sie die gleichen Ergebnisse erzielen können.