Node.js: Geheimnisse verwalten
Wie man Geheimnisse mit Node.js verwaltet
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Node.js Cloud Lösung, die zahlreiche Vorteile bietet, darunter:
- Deployen Sie Ihre Anwendung in Sekundenschnelle mit einem einfachen
git push.- Nutzen Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
- Genießen Sie sorgenfreie automatische Backups, Ein-Klick-Updates und eine einfache, transparente und vorhersehbare Preisgestaltung.
- Erhalten Sie optimale Performance und robuste Sicherheit dank einer privaten und dedizierten VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Node.js Cloud Hosting Lösung von Stackhero auszuprobieren!
Wenn Ihr Node.js-Projekt mit einer Datenbank, einem Objektspeicher oder einer externen API interagiert, ist es entscheidend, Anmeldeinformationen wie Benutzernamen, Passwörter oder Tokens, oft als "Geheimnisse" bezeichnet, sicher zu speichern. Diese Geheimnisse vertraulich zu halten, ist entscheidend für die Aufrechterhaltung der Sicherheit.
Was Sie vielleicht versucht sind zu tun
Sie könnten zunächst etwas wie dies in Betracht ziehen:
// Verbindung zu einer PostgreSQL-Datenbank
const pg = new Client({
host: 'xxxxx.stackhero-network.com',
user: 'admin',
password: 'myPassword',
database: 'admin'
});
Leider ist diese Methode nicht sicher. Warum? Weil Ihre Geheimnisse in Ihrem Git-Repository landen könnten und somit für jeden mit Zugriff sichtbar wären. Selbst wenn Sie denken, dass nur Sie Zugriff haben, ist es, als würden Sie einen Post-it mit Ihren Passwörtern auf Ihrem Monitor lassen und annehmen, dass niemand sonst ihn sehen wird. Dies kann letztendlich zu Sicherheitsproblemen führen.
Darüber hinaus unterstützt dieser Ansatz keine nahtlose Verwaltung verschiedener Umgebungen, wie Entwicklung und Produktion.
Die Umgebungsvariablen
Eine weit verbreitete Praxis in der Branche ist es, Geheimnisse in Umgebungsvariablen zu speichern.
Umgebungsvariablen werden außerhalb Ihres Codes definiert und vor dem Start von Node.js festgelegt. Das Konzept besteht darin, alle Ihre Geheimnisse mit Umgebungsvariablen zu definieren, um zu vermeiden, dass sie fest in Ihre Anwendung codiert werden.
Ihre ersten Umgebungsvariablen definieren
Um eine Umgebungsvariable zu definieren, können Sie sie beim Start Ihrer Node.js-Anwendung so festlegen: MY_PASSWORD=myDevelopmentPassword node app.js
Dieser Befehl setzt eine Variable namens "MY_PASSWORD" mit dem Wert "myDevelopmentPassword". Das Format ist einfach <KEY>=<value>.
Nach Konvention werden Umgebungsvariablen in Großbuchstaben geschrieben. Beachten Sie, dass nur Zeichenfolgen verwendet werden können, keine Arrays oder Objekte.
Umgebungsvariablen lesen
In Ihrer app.js-Datei können Sie Ihre neue Umgebungsvariable mit process.env wie folgt lesen: console.log(process.env.MY_PASSWORD);. Dies wird myDevelopmentPassword anzeigen.
Jetzt ist das Passwort außerhalb des Codes definiert, was verhindert, dass es im Git-Repository veröffentlicht wird.
Auf Stackhero haben Sie in einer Produktionsumgebung die Möglichkeit, eine neue Umgebungsvariable namens "MY_PASSWORD" mit "myProductionPassword" direkt in Ihrem Node.js-Service-Dashboard zu definieren, um einen reibungslosen Betrieb zu gewährleisten.
Beispiel für die Node.js-Konfiguration im Stackhero-Dashboard
Zusammenfassend wird Ihr Passwort nicht mehr in Ihrem Code gespeichert, und Sie haben separate Passwörter für Entwicklungs- und Produktionsumgebungen.
Die dotenv-Bibliothek verwenden
In realen Szenarien müssen oft mehrere Geheimnisse verwaltet werden. Zum Beispiel erfordert die Verbindung zu einer Datenbank das Speichern eines Hostnamens, eines Benutzers und eines Passworts.
Das Verwalten eines einzelnen Geheimnisses ist einfach, aber das Verwalten mehrerer kann mühsam werden. Stellen Sie sich vor, Sie starten Ihre Anwendung mit dieser Befehlszeile:
POSTGRESQL_HOST=xxxxx.stackhero-network.com POSTGRESQL_USER=admin POSTGRESQL_PASSWORD=myPassword node app.js
Diese Zeile ist unhandlich und schwer zu pflegen. Eine Produktionsanwendung könnte mehrere Variablen erfordern, was diesen Ansatz unpraktisch macht.
Hier wird die dotenv-Bibliothek wertvoll.
Mit dotenv können Geheimnisse in einer separaten Datei namens .env gespeichert werden.
Zuerst können Sie die dotenv-Bibliothek mit folgendem Befehl installieren:
npm install dotenv
Erstellen Sie dann eine .env-Datei, die die Variablen enthält:
POSTGRESQL_HOST=xxxxx.stackhero-network.com
POSTGRESQL_USER=admin
POSTGRESQL_PASSWORD=myPassword
Stellen Sie sicher, dass diese .env-Datei nicht in das Git-Repository gepusht wird, indem Sie sie zur Liste der ignorierten Dateien hinzufügen:
echo ".env" >> .gitignore
Laden Sie schließlich die dotenv-Bibliothek am Anfang Ihrer app.js-Datei wie folgt:
require("dotenv").config();
Mit dieser Konfiguration liest dotenv beim Start Ihrer Anwendung mit node app.js automatisch den Inhalt der .env-Datei auf Ihrer Entwicklungsplattform. In der Produktion existiert diese Datei nicht, und die Umgebungsvariablen werden direkt aus Ihrer Node.js-Service-Konfiguration bezogen (verfügbar im Stackhero-Dashboard).
Funktionierendes Beispiel
All dies war Theorie. Lassen Sie uns in ein echtes funktionierendes Beispiel eintauchen.
Ein vollständiges Beispiel finden Sie hier: https://github.com/stackhero-io/dotenvWithNodejs
Jetzt wissen Sie, wie Sie Ihre Geheimnisse auf flexible und sichere Weise verwalten können, alles ganz einfach.