Wie mit Credentials umgehen

Wie gehe ich am Besten mit Credientials um? API keys, mqtt/broker acounts etc

Einfach in die env variablen kippen? Hab irgendwo gelesen, dass auch dies eigentlich zu unsicher sei…

Bin hierüber gestolpert: schluessel

Node.js package for storing application credentials (API keys, database passwords, etc.) encrypted in your repository.

Ist das eine gute Idee? Bin mir nicht ganz schlüssig. Außerdem bleiben hier ja doch wieder sensitive informationen in den env variablen: Der decrypt-key :grimacing:

Es geht mir um einfache web deployments ohne komplexe ansible Struktur oder so.

Ich denke das hängt sehr von der Platform ab, die du verwendest.

Die meisten PaaS wie Netlify oder Heroku bieten als eingebaute Mechanismen nur Environment Variables an.
Wenn man Kubernetes nutzt gibt es Secrets, die sind aber auch nicht besonders geschützt.

Wenn du AWS/GCP/Azure benutzt gibt es mehr Möglichkeiten, z.B. AWS Secrets Manager.

Eine weitere Lösung wäre Hashicorp Vault, das ist Open Source und Vendor-unabhängig, muss man aber selber hosten (wäre z.B. was für unser Kubernetes Cluster).

Da fehlt jetzt die Quelle. Was ist denn der Angriffsvektor, gegen den du dich verteidigen möchtest?

Bei Github Actions oder Netlify Build ist es üblich, dass Pull Requests von Outside Contributors ohne Secrets oder nur nach expliziter Zustimmung ausgeführt werden. Dadurch kann niemand deine Secrets entwenden.


Ganz grundsätzlich:
Am besten vermeiden, langlebige und statische Secrets zu haben, die Zugriff auf kritische Dinge geben.

Besser ist es, Zugriffsdaten eine begrenzte Laufzeit zu geben und diese automatisch zu erneuern. So kann man bei einem Sicherheitsproblem einfach den Erneuerungsprozess deaktivieren so dass die Zugriffsdaten automatisch auslaufen.

Die Idee hinter dem erwähnten Vault ist bspw, dass Zugriffsdaten (z.B. für Datenbanken) regelmäßig und automatisch neu erzeugt und zur Laufzeit dynamisch an deine Applikation weitergegeben werden.

Für eine Frontend-App bieten sich Verfahren wie etwa OAuth2 an, das JWTs nutzt, die nur kurz gültig sind und dann per Refresh Flow erneuert werden müssen.

Wenn man die Kommunikation von Backends untereinander absichern möchte, lohnt sich auch ein Blick auf Mutual TLS.

1 Like