🐧 Dev-Container sind eine richtig gute Idee! Insbesondere, aber nicht nur, aus Supply-Chain-Security-Sicht!
💼 Eine Technologie, die wir bei der Arbeit bei der REWE digital zunehmend einsetzen, sind Dev-Container (https://containers.dev).
💡 Die Idee ist folgende: Ich konfiguriere in einer JSON-Datei (.devcontainer/devcontainer.json) in meinem Workspace meine Container-Umgebung, z.B. einen Container der Go und ein Debian beinhaltet. Diese Datei ist standardisiert (auf containers.dev gibt es die Spec). Meine IDE kann diese Datei lesen (VSCode und JetBrains IDEs habe ich getestet) und dann die entsprechend konfigurierten Container hochfahren. Auf Linux per Docker/Podman, aber auch auf dem Mac (mit entsprechender Container-Lösung) oder auf Windows mit WSL.
In den hochgefahrenen Container startet dann die IDE eine Headless-Variante von sich selbst und verbindet sich mit dieser.
👀 Man sieht dann in seiner IDE nur die Container-Umgebung. Das Terminal spawned dort, sämtliche Compiles/Runs werden im Container ausgeführt etc. etc.. Meinen Workspace kann ich optional in den Container mounten. Ich kann aber auch einfach die Sources aus dem SCM neu innerhalb des Containers laden, so dass ich komplett airgapped bin.
💪 Eine riesige Stärke von der Lösung ist, dass ich eine fertige Runtime-Umgebung für mein Projekt bauen kann, die dann auf jedem Developer-Rechner läuft. Gerade wenn man irgendwelche abgefahrenen Abhängigkeiten braucht, ist das extrem hilfreich - denn Tests und Build laufen auf jedem System dann gleich - egal ob Mac, Linux oder Windows.
🛡️ Ein noch viel wichtigerer Vorteil ist für mich der Security-Gewinn. Die Prozesse im Container haben auf meinen Rechner keinen Zugriff. Wenn ich mir bei der Entwicklung mit Bleeding-Edge-Paketen eine Malware einfange, ist diese erst mal auf den Container beschränkt - außer die Malware hätte einen Container-Breakout-Exploit (diese Exploits sind aber sehr selten).
🔑 Gerade in DevOps-Zeiten haben wir in unseren Home-Verzeichnissen extrem viele sensible Daten, GPG/SSH-Keys, Passwort-Manager-Dateien, Kubeconfigs etc. etc.. Für eine Malware, die z.B. über ein NPM Postinstall Script kommt, ist es ein Leichtes, diese Files abzugreifen und sich bei mir im System einzunisten. Dagegen schützen mich die Dev-Container sehr gut.
👉 Inzwischen funktionieren die Dev-Container richtig gut. Ich werde mich bei uns dafür einsetzen, dass diese eine Standard-Anforderung in der Entwicklung werden. Denn wenn es mal knallt und Malware über eine unserer Supply-Chains verteilt wird, werden wir alle froh sein, wenn wir diese rückstandsfrei durch einen Container-Recreate entfernen können, ohne dass großer Schaden entstanden ist.
📣 Kanntet ihr das Dev-Container-Projekt? Habt ihr diese bei euch schon im Einsatz und wie sind eure Erfahrungen? Habt ihr andere IDEs erfolgreich damit im Einsatz? Schreibt mir das gerne in die Kommentare!
#SupplyChainSecurity #Security #REWEGroupVoices #REWEdigital #Linux #Containerisierung #DevOps