Der Tab „Secrets" ist ein verschlüsselter Speicher für die sensiblen Konfigurationswerte, die eine Node.js-App benötigt, etwa API-Schlüssel, Signierungsgeheimnisse und Tokens von Drittanbietern. Er wird pro Umgebung geführt, damit Ihre Produktionsdaten und Ihre Vorschaudaten nie durcheinandergeraten.
Wo Secrets gespeichert werden
Öffnen Sie Websites, klicken Sie auf die Site, öffnen Sie die Gruppe Environment im linken Menü der Site und wählen Sie Secrets. Der Tab trägt den Titel Secrets.
Der Tab erscheint nur bei Node.js-Sites. WordPress-, PHP- und statische Sites zeigen ihn nicht, da deren Konfiguration stattdessen in Dateien auf der Festplatte liegt: wp-config.php bei WordPress, und was auch immer Ihr Framework bei einer reinen PHP-App einliest.

Wie Werte geschützt werden
Jeder Wert wird verschlüsselt, bevor er die Datenbank erreicht. Nichts wird als lesbarer Text gespeichert, und die Listenansicht zeigt nie einen vollständigen Wert: Sie zeigt eine Maske mit nur den letzten vier Zeichen, sodass Sie zwei ähnliche Schlüssel unterscheiden können, ohne einen von beiden offenzulegen.
Jede Zeile trägt zur Erinnerung daran ein Encrypted-Label. Einen Wert auszulesen ist eine eigene, bewusste Handlung und nicht etwas, das allein durch das Öffnen der Seite geschieht.
Das Setzen, Offenlegen und Löschen eines Secrets erfordert jeweils die Berechtigung sites:write. Ein Teammitglied mit Nur-Lese-Zugriff kann sehen, welche Schlüssel existieren und ihre Masken, aber nicht ihre Werte.
Die zwei Umgebungen
Ein segmentierter Schalter oben auf der Seite wechselt zwischen production und preview. Es handelt sich um vollständig getrennte Schlüsselsätze. Das Setzen von STRIPE_SECRET_KEY in production legt den Wert nicht auch in preview an, und das Löschen aus preview betrifft production nicht.
Diese Trennung ist der Sinn dieser Funktion. Vorschau-Builds sind Wegwerfumgebungen, die jeder mit Repository-Zugriff auslösen kann, deshalb sollten sie Testzugangsdaten tragen, keine echten. Siehe Vorschau-Deployments für Pull Requests dazu, wie Vorschauumgebungen erstellt werden.
Ein Secret hinzufügen oder aktualisieren
- Wählen Sie die Umgebung über den segmentierten Schalter.
- Geben Sie den Namen in das Feld KEY_NAME ein. Das Feld erzwingt beim Tippen Großschreibung.
- Tragen Sie den Wert in das zweite Feld ein. Er wird beim Tippen maskiert.
- Klicken Sie auf Set.
Das Setzen eines bereits vorhandenen Schlüssels überschreibt ihn. Es gibt keine separate Bearbeitungsfunktion und keinen Bestätigungsschritt für ein Überschreiben, prüfen Sie daher den Umgebungs-Tab, bevor Sie auf Set klicken.
Regeln für Schlüsselnamen
Ein Schlüssel muss mit einem Großbuchstaben beginnen und darf danach Großbuchstaben, Ziffern und Unterstriche enthalten, bis zu 128 Zeichen. DATABASE_URL, API_KEY_V2 und SENTRY_DSN sind alle gültig. Alles andere wird mit der Meldung Key muss UPPER_SNAKE_CASE mit Buchstaben/Zahlen/Unterstrich sein abgelehnt.
Zwei weitere Grenzwerte sind wichtig zu wissen:
- Ein Wert darf nicht leer sein. Das Absenden eines leeren Werts liefert value erforderlich.
- Ein Wert darf 16 KB nicht überschreiten. Das ist für ein Token großzügig bemessen, reicht aber nicht aus für etwa eine vollständige Zertifikatskette, die eher in eine Datei gehört als in ein Secret.
Einen Wert auslesen
Klicken Sie auf Copy in der Zeile. KPanel entschlüsselt den Wert serverseitig und legt ihn direkt in Ihre Zwischenablage, mit einer Bestätigung Wert in Zwischenablage kopiert. Der Wert wird nicht auf dem Bildschirm angezeigt, sodass ihn weder ein geteilter Bildschirm noch ein Mitleser erfassen kann.
Jede Offenlegung wird im Audit-Protokoll der Site vermerkt, zusammen mit der Person, die sie durchgeführt hat, und dem betroffenen Schlüssel, und erscheint im Site-Aktivitätsprotokoll.
Wenn Sie prüfen müssen, ob ein Wert korrekt ist, ohne ihn offenzulegen, vergleichen Sie stattdessen die Maske. Die letzten vier Zeichen reichen aus, um zu bestätigen, dass Sie das richtige Token haben, und sie stehen bereits auf dem Bildschirm.
Ein Secret in Ihrer App verwenden
Kopieren Sie den Wert dorthin, wo Ihre Anwendung ihre Konfiguration auf dem Server ausliest. Bei einer Node.js-App ist das normalerweise eine von Ihrem Prozessmanager gesetzte Umgebungsvariable oder eine .env-Datei im App-Stammverzeichnis, die Ihr Code beim Start lädt.
Committen Sie diese Datei nicht in Ihr Repository. Fügen Sie .env zu .gitignore hinzu, bevor Sie sie anlegen. Ein Secret, das zu einem Git-Remote gepusht wurde, muss als kompromittiert gelten und beim Anbieter neu ausgestellt werden, denn es bleibt in der Historie erhalten, selbst nachdem Sie die Datei gelöscht haben.
Der Secrets-Tab ist Ihr verbindlicher Nachweis darüber, wie der Wert lautet, verschlüsselt gespeichert und protokolliert, statt einer Notiz in einem Passwort-Manager oder einem Chatverlauf. Behandeln Sie ihn als maßgebliche Quelle: Wenn Sie einen Schlüssel beim Anbieter rotieren, aktualisieren Sie ihn gleichzeitig hier, damit die nächste Person beim Deployment den aktuellen Wert vorfindet.
Ein Secret löschen
Klicken Sie auf Delete in der Zeile. KPanel bittet Sie um Bestätigung mit Delete API_TOKEN? und weist darauf hin, dass die App bei ihrem nächsten Neustart den Zugriff auf diesen Wert verliert. Es gibt kein Rückgängigmachen und keine aufbewahrte Kopie. Wenn Sie den Wert eventuell später noch benötigen, kopieren Sie ihn also vorher.
Löschen Sie ein Secret, wenn die zugrunde liegende Zugangsdaten beim Anbieter widerrufen wurden oder wenn der Code, der sie verwendet hat, entfernt wurde. Veraltete Schlüssel liegenzulassen erschwert es später, zu erkennen, welche davon tatsächlich noch relevant sind.
Zugangsdaten sicher rotieren
Die sichere Reihenfolge lautet immer: die neue Zugangsdaten beim Anbieter anlegen, hier aktualisieren, deployen, prüfen, dass die App funktioniert, und erst dann die alten Zugangsdaten beim Anbieter widerrufen.
Macht man es in der umgekehrten Reihenfolge, also zuerst widerrufen, entsteht ein Zeitfenster, in dem die laufende App eine ungültige Zugangsdaten verwendet und jede Anfrage, die diese benötigt, fehlschlägt. Wenn die Änderung riskant ist, erstellen Sie zuerst ein Backup, damit Sie zu einem bekannt funktionierenden Zustand zurückkehren können: siehe Ein Backup erstellen.
Fehlerbehebung
Der Secrets-Tab fehlt im Menü. Die Site ist keine Node.js-Site. Prüfen Sie das Stack-Label neben dem Site-Namen oben auf der Seite.
Die Schaltfläche Set tut nichts. Beide Felder sind erforderlich. Die Schaltfläche meldet Schlüssel + Wert erforderlich, wenn eines der Felder leer ist.
Der Schlüssel wurde abgelehnt. Kleinbuchstaben, Bindestriche, Punkte und Leerzeichen sind nicht erlaubt. api-key und Api_Key schlagen beide fehl; API_KEY wird akzeptiert.
Copy hat nichts in die Zwischenablage gelegt. Manche Browser blockieren Schreibzugriffe auf die Zwischenablage bei einem inaktiven Tab. Klicken Sie zuerst auf die Seite und dann erneut auf Copy.
Wie es weitergeht
- Vorschau-Deployments für Pull Requests, die andere Hälfte der Trennung von production und preview.
- Git-Deployment für eine Site zum Pushen des Codes, der diese Werte ausliest.
- Site-Aktivitätsprotokoll, um zu sehen, wer ein Secret gesetzt, offengelegt oder gelöscht hat.