{"id":28011,"date":"2025-09-11T18:38:26","date_gmt":"2025-09-11T16:38:26","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=28011"},"modified":"2025-09-11T18:40:48","modified_gmt":"2025-09-11T16:40:48","slug":"cloud-native-security-scanner","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/09\/11\/cloud-native-security-scanner\/","title":{"rendered":"Cloud-native Security Scanner"},"content":{"rendered":"\n<p>Dieses Projekt wurde im Rahmen der Vorlesung \u201eSoftware Development for Cloud Computing\u201c umgesetzt.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Ausgangslage und Projektidee<\/strong><\/p>\n\n\n\n<p>Unser bisheriger Fokus im Studium lag haupts\u00e4chlich auf Themen der IT-Security und Machine Learning, weshalb wir beide bis auf die grundlegenden Vorlesungen zum Thema Software Entwicklung kaum Erfahrungen in diesem Bereich gesammelt haben. Aus diesem Grund haben wir uns das Ziel gesetzt, eine einfache Webanwendung zu implementieren und diese in einer geeigneten Cloud-Umgebung bereitzustellen. Dabei war es uns wichtig einen Bezug zur IT-Security zu behalten, weshalb schnell klar war, dass wir ein Tool zur Unterst\u00fctzung bei der Analyse der Sicherheit von Software umsetzen m\u00f6chten. Da wir beide bereits einige Erfahrungen im Bereich Penetrationtesting von Webanwendungen gesammelt haben, war unsere erste Idee ein Security-Scanner f\u00fcr Webanwendungen, mit dem man unter Eingabe einer URL eine Webseite auf potenzielle Sicherheitsl\u00fccken oder Miskonfigurationen \u00fcberpr\u00fcfen lassen kann. Nach einigen Zeilen Code und weiteren \u00dcberlegungen haben wir uns allerdings gegen diese Art von Security Scanner entschieden, da wir Bedenken in Bezug auf das automatisierte Scannen fremder Webseiten hatten und im Allgemeinen die automatisierte Analyse von HTTP-Anfragen und Antworten sehr kontextabh\u00e4ngig sein kann und dementsprechend zu komplex f\u00fcr eine einfache Webanwendung.<\/p>\n\n\n\n<p>Deshalb haben wir uns dazu entschieden die Idee des Security-Scanners leicht abzuwandeln und daraus ein Tool zur Analyse von sbom-Dateien zu machen. Das Ziel war es eine Webanwendung zu implementieren in der man eine sbom-Datei im JSON-Format hochladen kann, um anschlie\u00dfend eine Auswertung in Form einer Tabelle zu den enthaltenen Schwachstellen zu erhalten und so einen schnellen und einfach zu verstehenden \u00dcberblick \u00fcber die Sicherheit der eigenen Anwendung zu erhalten.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Architekturentscheidungen und Technologie-Auswahl<\/strong><\/p>\n\n\n\n<p>Zu Beginn haben wir die folgenden Anforderungen an die Webanwendung definiert:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Frontend:<\/strong><ul><li>Simples Frontend mit der Funktion eine sbom-Datei im JSON-Format hochzuladen und direkt eine \u00fcbersichtliche Auswertung \u00fcber die enthaltenen Schwachstellen zu erhalten<\/li><\/ul><\/li>\n\n\n\n<li><ul><li>Das Ziel war es eine einfache M\u00f6glichkeit zu bieten, seine eigene Anwendung auf Schwachstellen zu \u00fcberpr\u00fcfenDas Frontend erh\u00e4lt die ausgewerteten Daten vom Backend als JSON und stellt diese in einer \u00fcbersichtlichen Tabelle dar<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>Klare Trennung vom Backend<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Backend:<\/strong><ul><li>Das Backend sollte die \u00fcber das Frontend hochgeladene sbom-Datei verarbeiten und dem Frontend das Ergebnis der Verarbeitung liefern<\/li><\/ul><\/li>\n\n\n\n<li><ul><li>Kurzer zustandloser Job, ideal f\u00fcr AWS Lambda<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>F\u00fcr die Analyse der sbom-Datei haben wir uns daf\u00fcr entschieden eine API zu verwenden, die die enthaltenen Abh\u00e4ngigkeiten auf bekannte Schwachstellen \u00fcberpr\u00fcft<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Technologien:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Frontend<\/strong>\n<ul class=\"wp-block-list\">\n<li>React <\/li>\n\n\n\n<li>Node.js und npm f\u00fcr den Build <\/li>\n\n\n\n<li>JavaScript \/ JSX<\/li>\n\n\n\n<li>Fetch API f\u00fcr HTTP-Requests ans Backend<\/li>\n\n\n\n<li>AWS Amplify f\u00fcrs Hosting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Backend<\/strong>\n<ul class=\"wp-block-list\">\n<li>Python 3.11 (AWS Lambda Runtime)<\/li>\n\n\n\n<li>Python\u2011Bibliotheken: requests<\/li>\n\n\n\n<li>AWS Serverless Application Model (SAM) f\u00fcr das Deployment des Backends <\/li>\n\n\n\n<li>AWS Lambda Function f\u00fcr die Verarbeitung der sbom-Datei<\/li>\n\n\n\n<li>API-Gateway als Schnittstelle zwischen AWS Amplify und der Lambda Funktion<\/li>\n\n\n\n<li>Snyk SBOM API (REST\u2011Endpoint) f\u00fcr die Analyse der sbom-Datei<\/li>\n\n\n\n<li>AWS Secrets Manager f\u00fcr die Speicherung der API-Keys<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Als Cloud-Architektur haben wir uns f\u00fcr eine Serverless Web Application Architektur in AWS entschieden. In der folgenden Abbildung 1 ist die grobe Struktur der Architektur dargestellt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image.jpeg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"707\" data-attachment-id=\"28012\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/09\/11\/cloud-native-security-scanner\/image-119\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image.jpeg\" data-orig-size=\"1209,835\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-1024x707.jpeg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-1024x707.jpeg\" alt=\"\" class=\"wp-image-28012\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-1024x707.jpeg 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-300x207.jpeg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-768x530.jpeg 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image.jpeg 1209w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Aus den folgenden Gr\u00fcnden haben wir uns f\u00fcr diese Architektur entschieden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unregelm\u00e4\u00dfigen und kurzen Workloads der Webanwendung:\n<ul class=\"wp-block-list\">\n<li>Es gibt Phasen ohne Anfrage und es entsteht nur Anfragen, wenn ein Scan gestartet wird. Mit Lambda\/API Gateway fallen nur Kosten pro Aufruf und Ausf\u00fchrungszeit an (Pay-per-use), in Leerlaufphasen entstehen keine Kosten<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Automatische Skalierung:\n<ul class=\"wp-block-list\">\n<li>Lastspitzen, wie beispielsweise mehrere Scans gleichzeitig, skaliert AWS automatisch horizontal<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Kurze, zustandslose Jobs (sbom verarbeiten \u00e0 Ergebnisse zur\u00fcckliefern):\n<ul class=\"wp-block-list\">\n<li>AWS Lambda ist, aufgrund der maximalen Laufzeit von 15 Minuten und der Zustandslosigkeit, genau darauf ausgelegt kurze, zustandslose und in sich geschlossene Aufgaben zu \u00fcbernehmen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Eine alternative \u00dcberlegung war es das Backend als Container-Service mit ECS\/Fargate bereitzustellen, allerdings haben wir uns aufgrund der genannten Vorteile der Serverless-Architektur und der folgenden Nachteile der Container-Services dagegen entschieden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kosten bei Leerlauf<\/li>\n\n\n\n<li>H\u00f6herer Ops-Aufwand durch Container Build und Patch, Load Balancer und Skalierung<\/li>\n\n\n\n<li>H\u00f6here Komplexit\u00e4t f\u00fcr diesen einfachen Use-Case<\/li>\n<\/ul>\n\n\n\n<p><strong>Herausforderungen:<\/strong><\/p>\n\n\n\n<p><strong>Zeitmanagement:<\/strong><\/p>\n\n\n\n<p>Eine Herausforderung bei diesem Projekt war das Zeitmanagement, insbesondere aufgrund der Entscheidung f\u00fcr eine andere Projektidee im Laufe der Vorlesung. Wir haben uns zu Beginn der Vorlesung schnell f\u00fcr die Idee des Security Scanners entschieden, ohne uns weitere Gedanken \u00fcber die m\u00f6glichen Probleme wie das Scannen fremder Webseiten zu machen. Im Nachhinein war es die richtige Entscheidung sich f\u00fcr die andere Idee zu entscheiden, allerdings h\u00e4tten wir mit einer besseren Planung der Anforderungen und des Umfangs der Idee schon im Vorhinein die Probleme erkennen k\u00f6nnen und so mehr Zeit f\u00fcr die wirkliche Umsetzung des Projekts haben k\u00f6nnen.<\/p>\n\n\n\n<p><strong>Deployment mit AWS SAM:<\/strong><\/p>\n\n\n\n<p>AWS SAM (Serverless Application Model) ist ein Open-Source-Framework von AWS zum Definieren, Entwickeln, Testen und Deployen von Serverless-Anwendungen. Es erweitert AWS CloudFormation um eine vereinfachte Syntax in Form eines Templates f\u00fcr Ressourcen wie beispielsweise AWS Lambda oder API Gateway. Mit der SAM CLI lassen sich Funktionen lokal (Docker-basiert) ausf\u00fchren und debuggen, Builds erstellen, sowie das Deployment in die Cloud einfach und wiederholbar ausf\u00fchren. Zu Beginn fiel es uns etwas schwierig die Dokumentation zu diesem Tool nachzuvollziehen, insbesondere in welchem Umfang man die f\u00fcr unser Projekt n\u00f6tigen Cloud-Ressourcen mithilfe des AWS SAM Templates definieren kann. Die Definition der Backend-Ressourcen wie AWS Lambda und das API-Gateway konnte sehr schnell umgesetzt werden. Im folgenden Codeausschnitt sieht man die Definition der Lambda Funktion in der template.yaml Datei.<\/p>\n\n\n\n<p><em><code class=\"\" data-line=\"\">Resources:&lt;br&gt;\u00a0 SbomFunction:&lt;br&gt;\u00a0\u00a0\u00a0 Type: AWS::Serverless::Function&lt;br&gt;\u00a0\u00a0\u00a0 Properties:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 Environment:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Variables:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SNYK_API_TOKEN: &quot;Pfad zu AWS Secrets Manager&quot;&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SNYK_ORG_ID: &quot; Pfad zu AWS Secrets Manager &quot;&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 CodeUri: sbom_lambda\/&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 Handler: app.lambda_handler&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 Runtime: python3.11&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 Architectures:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 - x86_64&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0 Events:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Analyze:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Type: Api&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Properties:&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Path: \/analyze&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Method: POST&lt;br&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RestApiId: !Ref SbomApi<\/code><\/em><\/p>\n\n\n\n<p><strong>Erl\u00e4uterung zu den einzelnen Attributen:<\/strong><\/p>\n\n\n\n<p><strong>Type:<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00dcber diese Attribute kann man die Cloud-Ressource, in diesem Fall eine Lambda<br>                           Funktion, definieren<\/p>\n\n\n\n<p class=\"has-text-align-left\"><strong>Variables:<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Hier kann man Umgebungsvariablen angeben, welche dann beim Deployment verschl\u00fcsselt in die Lambda                           Konfiguration geschrieben werden. Zur Laufzeit stehen diese Variablen als String im Prozess zur Verf\u00fcgung, wodurch wir in der Lambda Funktion darauf zu greifen k\u00f6nnen. Wir haben diese Variablen genutzt, um die API-Keys der SNYK-API zur Laufzeit zu setzen.<\/p>\n\n\n\n<p><strong>Handler:<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Einstiegspunkt der Lambda-Funktion im Code<\/p>\n\n\n\n<p><strong>Runtime:<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Die Ausf\u00fchrungsumgebung f\u00fcr die Lambda-Funktion<\/p>\n\n\n\n<p><strong>Events:<\/strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Definiert Trigger, der die Funktion ausl\u00f6st<\/p>\n\n\n\n<p><strong>Analyze:<\/strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Logischer Name des Events.<\/p>\n\n\n\n<p><strong>Type:<\/strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Anbindung an API Gateway<\/p>\n\n\n\n<p><strong>Path:<\/strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; API-Ressourcenpfad.<\/p>\n\n\n\n<p><strong>Method:<\/strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTTP-Methode.<\/p>\n\n\n\n<p><strong>RestApiId:<\/strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Verkn\u00fcpft die Methode\/Route mit einer bestehenden\/anderen API-Gateway<br>Ressource im Template (hier: SbomApi). Ohne dieses Feld w\u00fcrde SAM automatisch eine implizite API anlegen.<\/p>\n\n\n\n<p>Mit dem Befehl <code class=\"\" data-line=\"\">sam local<\/code> konnten wir die Anwendung lokal testen und debuggen. Das Deployment in die Cloud konnte mit dem Befehl <code class=\"\" data-line=\"\">sam deploy<\/code> wiederholbar durchgef\u00fchrt werden. Allerdings haben wir keine M\u00f6glichkeit gefunden, mithilfe des AWS SAM Templates die Ressourcen f\u00fcr das Frontend zu definieren, weshalb wir uns daf\u00fcr entschieden haben f\u00fcr das Frontend AWS Amplify zu verwenden. Diese L\u00f6sung ist nicht optimal, da wir so nicht die gesamten Cloud-Ressourcen in einem Template verwalten k\u00f6nnen, aber f\u00fcr den Umfang des Projekts ist die L\u00f6sung ein geeigneter Kompromiss. AWS Amplify erlaubt es den Build des Frontends als ZIP-Datei hochzuladen und unter einer URL bereitzustellen, sodass wir mit dem Befehl <code class=\"\" data-line=\"\">npm run build<\/code> einen Build des Frontends erzeugen und anschlie\u00dfend manuell in AWS Amplify hochladen konnten. Um API-Keys nicht im Repository oder in der template.yaml abzulegen, haben wir die sensiblen Werte im AWS Secrets Manager gespeichert und im SAM-Template per dynamischer Referenz eingebunden. Dadurch werden die API-Keys erst zur Deploy-Zeit von CloudFormation aufgel\u00f6st und als verschl\u00fcsselte Umgebungsvariablen in die Lambda-Konfiguration geschrieben.<\/p>\n\n\n\n<p><strong>Einbindung der SNYK-API:<\/strong><\/p>\n\n\n\n<p>Eine weitere Herausforderung war die Einbindung der SNYK-API zur Analyse der sbom-Datei. Zu Beginn des Projekts haben wir nach geeigneten APIs von Dritten zur Analyse von sbom-Dateien recherchiert, wodurch wir auf den Anbieter SNYK gesto\u00dfen sind. SNYK bietet eine REST-API zur Analyse von sbom-Dateien an, welche exakt zum Anwendungsfall unserer Anwendung passt, weshalb wir uns daf\u00fcr entschieden haben diese in unser Projekt einzubinden. Die API von SNYK ist so aufgebaut, dass man eine sbom-Datei sendet und eine Job-ID als Antwort erh\u00e4lt, da SNYK die Anfrage asynchron verarbeitet und das Ergebnis anschlie\u00dfend mit der Job-ID abgerufen werden kann. Dies f\u00fchrte dazu das wir im Backend genau diesen Ablauf abbilden mussten, sprich erst die sbom-Datei senden und anschlie\u00dfend das Ergebnis \u00fcber die Job-ID abrufen. Um die Interaktion mit der API nachzuvollziehen haben wir die Debug-Funktion von AWS SAM verwendet, mit der wir die Lambda Funktion lokal testen konnten und so den Ablauf genau nachvollziehen und abbilden konnten. Zu Beginn gab es Probleme mit der Authentisierung von SNYK, da wir bei jeder Anfrage ein <code class=\"\" data-line=\"\">401 Unauthorized<\/code> Fehler zur\u00fcckerhalten haben, obwohl wir die API-Keys der Dokumentation entsprechend angeben haben. Nach vielen fehlgeschlagenen Versuchen haben wir uns dazu entschieden einen weiteren Account bei SNYK anzulegen und die API-Keys neu zu generieren. Mit den neuen API-Keys haben die Anfragen dann direkt funktioniert, wodurch wir den Ablauf vollst\u00e4ndig abbilden konnten. Die Gr\u00fcnde f\u00fcr das vorherige Fehlschlagen k\u00f6nnen wir bis heute immer noch nicht nachvollziehen. Ein weiteres Problem war, dass die SNYK API f\u00fcr POST-Anfragen zwingend den Content-Type <code class=\"\" data-line=\"\">application\/vnd.api+json<\/code> verlangt, bei GET-Anfragen darf kein Content-Type gesendet werden. Weil wir anfangs \u00fcberall den gleichen Header mitschickten, bekamen wir einen 400-Fehler, was wir durch getrennte Header f\u00fcr die POST- und GET-Anfragen gel\u00f6st haben. Im Nachhinein betrachtet war die Einbindung einer externen API zur Analyse der sbom-Datei trotzdem die richtige Entscheidung, da die API von SNYK schnell gute Ergebnisse liefert, die wir direkt weiterverarbeiten konnten.<\/p>\n\n\n\n<p><strong>Fazit und Learnings:<\/strong><\/p>\n\n\n\n<p>Insgesamt sind wir zufrieden mit dem Ergebnis des Projekts. Wir haben es geschafft eine Webanwendung zu implementieren die den zu Beginn definierten Anforderungen von uns entspricht. Die Anwendung bietet eine einfache Analyse von sbom-Dateien und eine \u00fcbersichtliche Darstellung der Ergebnisse, was genau dem entspricht, was wir uns vorgenommen haben. Selbstkritisch betrachtet, gibt es jedoch einige Punkte, die wir im Nachhinein besser h\u00e4tten machen k\u00f6nnen. Insbesondere das Zeitmanagement war ein gro\u00dfes Problem. Am Ende haben wir uns auf die n\u00f6tigsten Funktionen beschr\u00e4nkt und beispielsweise auf weitere Optimierungen der Codequalit\u00e4t oder Automatisierung des Deployments verzichtet, was wir durch ein besseres Zeitmanagement deutlich besser h\u00e4tten umsetzen k\u00f6nnen. Trotz des \u00fcberschaubaren Umfangs des Projekts haben wir sehr viele neue Erkenntnisse und Erfahrungen gesammelt, wodurch wir insgesamt zufrieden mit dem Ergebnis des Projekts sein k\u00f6nnen.<\/p>\n\n\n\n<p><strong>Learnings:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cloud- und AWS-Grundlagen:<ul><li>Serverless-Grundidee: Code als kurze, zustandslose Lambda Funktionen ausf\u00fchren, Skalierung &amp; Betriebsaufwand \u00fcbernimmt AWS.<\/li><\/ul><\/li>\n\n\n\n<li><ul><li>API-Bereitstellung: API Gateway als Schnittstelle zwischen Frontend und Backend, Lambda Funktion f\u00fcr die Datenverarbeitung, AWS Amplify f\u00fcrs Frontend-Hosting<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>Lokal entwickeln: Mit AWS SAM Local Lambdas und API Gateway lokal starten, Requests testen, Logs sehen<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Architektur-Entscheidungen:<ul><li>Warum Serverless: Pay-per-use, automatische Skalierung, kein Leerlauf, weniger Entwicklungsaufwand<\/li><\/ul><\/li>\n\n\n\n<li><ul><li>Alternativen verstanden: ECS\/EC2 w\u00e4ren dauerhafte Infrastruktur (Grundkosten, mehr Betriebsaufwand) was f\u00fcr unseren Use-Case nicht sinnvoll gewesen w\u00e4re<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>Trennung von Frontend und Backend: Frontend (Amplify) per fetch an Backend (API Gateway)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Entwicklungsprozess:<ul><li>Externe API\u00b4s in die eigene Anwendung einbinden<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>Umgang mit Secrets im Code<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"has-large-font-size\"><strong>Authors<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tim Ruff<\/li>\n<\/ul>\n\n\n\n<ul id=\"block-0d5c658d-a292-40c5-8e55-5c4ad6ed2673\" class=\"wp-block-list\">\n<li>Magnus Arnold<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieses Projekt wurde im Rahmen der Vorlesung \u201eSoftware Development for Cloud Computing\u201c umgesetzt. Ausgangslage und Projektidee Unser bisheriger Fokus im Studium lag haupts\u00e4chlich auf Themen der IT-Security und Machine Learning, weshalb wir beide bis auf die grundlegenden Vorlesungen zum Thema Software Entwicklung kaum Erfahrungen in diesem Bereich gesammelt haben. Aus diesem Grund haben wir uns [&hellip;]<\/p>\n","protected":false},"author":1272,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[1123],"class_list":["post-28011","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":23579,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/08\/30\/google-geodata-visualizer\/","url_meta":{"origin":28011,"position":0},"title":"Google Geodata Visualizer","author":"sk331","date":"30. August 2022","format":false,"excerpt":"Ein Projekt von Kai Kustermann, Michael Litschko, Sarah Mauff und Sebastian K\u00f6pp Einleitung Im Sommersemester 2022 haben wir uns als 4-k\u00f6pfige Gruppe dazu entschlossen, einen Google Geodata Visualizer zu erstellen. Das Projekt ist aus der Idee einer McDonald\u2019s-Achievement-Card entstanden. Die Idee war eine Website, die dem Benutzer anzeigt, welche McDonald\u2019s\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/08\/16.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":25800,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/09\/14\/splid-2-0-die-zukunft-des-gemeinsamen-ausgabenmanagements\/","url_meta":{"origin":28011,"position":1},"title":"Splid 2.0 &#8211; Die Zukunft des gemeinsamen Ausgabenmanagements","author":"David Christoph Scheifers","date":"14. September 2023","format":false,"excerpt":"Im Rahmen der Vorlesung \u201cSoftware Development for Cloud Computing\u201d haben wir uns daf\u00fcr entschieden, einen Klon der App Splid auf Basis unterschiedlicher Cloud Technologien als Web App zu entwickeln, um uns so die Grundkenntnisse des Cloud Computings anzueignen. Projektidee Bei gemeinsamen Aktivit\u00e4ten und Gruppenausgaben ist es sehr hilfreich, einfache und\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":23517,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/08\/29\/multiplayer-game-with-aws-stadtlandfluss\/","url_meta":{"origin":28011,"position":2},"title":"Multiplayer Game with AWS |\u00a0StadtLandFluss","author":"gi004","date":"29. August 2022","format":false,"excerpt":"Dieser Blogbeitrag soll einen Einblick in die Entwicklung unserer Webanwendung mit den unten definierten Funktionen geben sowie unsere L\u00f6sungsans\u00e4tze, Herausforderungen und Probleme aufzeigen.\u00a0 Cloud Computing VorlesungProjekt Idee & InspirationZielEinblick in das Spiel \u2013 DemoFrameworks - Cloud Services - InfrastructureArchitekturCloud KomponentenAWS ServicesDynamo DBS3LambdaAmazon API- GatewayAmazon CloudWatchTestingCI\/CD PipelineSchwierigkeitenFazit Cloud Computing Vorlesung Ziel\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/08\/image.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/08\/image.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/08\/image.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/08\/image.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":28021,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/09\/13\/multiplayer-web-game-mit-aws-schiffe-versenken\/","url_meta":{"origin":28011,"position":3},"title":"Multiplayer Web-Game mit AWS | Schiffe versenken","author":"Leon Obertopp","date":"13. September 2025","format":false,"excerpt":"Projektidee: Im Rahmen der Vorlesung \"Software Development for Cloud Computing\" sollen die Studierenden in Gruppen ein eigenes Projekt, mit Hilfe von in der Vorlesung gezeigten Cloud Technologien umsetzen. Wir hatten Anfangs Probleme ein geeignetes Thema zu finden, da unser Wissenstand im Thema Cloud nicht besonders gro\u00df war. Letztendlich haben wir\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-4.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-4.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/09\/image-4.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":12032,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2020\/09\/30\/admin-panel-web-app-in-der-aws-cloud\/","url_meta":{"origin":28011,"position":4},"title":"Admin Panel (Web App) in der AWS Cloud","author":"ss447","date":"30. September 2020","format":false,"excerpt":"1. Einleitung Im Rahmen der Vorlesung \u201eSoftware Development for Cloud Computing\u201c haben wir uns als Gruppe dazu entschieden aufbauend auf teilweise bereits vorhandener Codebasis an einem Startup-Projekt weiterzuarbeiten. Der Hauptfokus lag bei uns auf dem Ausbau von DevOps-Aspekten und auf dem eines stabilen und sicheren Systems, welches auch in der\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/qw9ZkWnvR4M\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":20381,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/08\/10\/hydropi\/","url_meta":{"origin":28011,"position":5},"title":"\ud83c\udf31HydroPi\ud83c\udf31 &#8211; Damit auch du deinen Garten vom Sofa aus gie\u00dfen kannst.","author":"Steffen Fingerle","date":"10. August 2021","format":false,"excerpt":"\u26a0\ufe0f Disclaimer Da das Projekt keinerlei Sicherheitsaspekte abdeckt, ist es aufgrund einer sehr hohen IT-Security Gefahr mit m\u00f6glicherweise schweren Folgen nicht f\u00fcr die Nutzung au\u00dferhalb des eigenen Heimnetzwerkes ausgelegt. \ud83c\udf31 Motivation Aus aktuellem Anlass in der Entwicklung von Smart Home Technologien existiert ein stetig wachsendes Interesse, auch in der eigenen\u2026","rel":"","context":"In &quot;Internet of Things&quot;","block_context":{"text":"Internet of Things","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/internet-of-things\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/08\/Software_Architektur-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/08\/Software_Architektur-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/08\/Software_Architektur-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/08\/Software_Architektur-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":1123,"user_id":1272,"is_guest":0,"slug":"tim_ruff","display_name":"Tim Ruff","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/29915fba991126c457815fa187e135bb87c45133bdd8523381be637a56fe063e?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/28011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/1272"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=28011"}],"version-history":[{"count":2,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/28011\/revisions"}],"predecessor-version":[{"id":28015,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/28011\/revisions\/28015"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=28011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=28011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=28011"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=28011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}