


Bereitstellung eines Flask-basierten Intrusion Detection Systems in AWS ECS mit CI/CD
Einführung
In diesem Beitrag begleite ich Sie durch den Prozess der Bereitstellung eines Intrusion-Detection-Systems auf AWS
HINWEIS: Bei diesem Projekt wird davon ausgegangen, dass Sie bereits über ein aktives AWS-Konto verfügen und Ihre Kontoanmeldeinformationen (Zugriffsschlüssel) für Ihren Code-Editor konfiguriert haben. Für dieses Projekt fallen in Ihrer Konsole einige Kosten an
Projektübersicht
Ziele
Die Ziele dieses Projekts sind wie folgt:
- Containerisieren Sie die Anwendung mit Docker
- Containerbild an ECR übertragen
- Erstellen Sie eine VPC, zwei private Subnetze und zwei öffentliche Subnetze
- Erstellen Sie VPC-Endpunkte für die privaten Subnetze für den Zugriff auf ECR
- Stellen Sie einen Application Load Balancer und eine Zielgruppe in den öffentlichen Subnetzen für den ECS-Dienst bereit
- Erstellen Sie eine Aufgabendefinition für den ECS-Dienst
- Erstellen Sie einen ECS-Cluster und einen ECS-Dienst mit dem Starttyp „Fargate“ in den privaten Subnetzen.
- Erstellen Sie eine gehostete Zone in Route 53 und verweisen Sie sie auf den DNS-Namen des ALB
Projektarchitektur
Containerisieren Sie die Anwendung mit Docker
In diesem Abschnitt werden die Schritte gezeigt, die zum Erstellen dieses Projekts von Grund auf erforderlich sind
Schritt 1: Dockerisieren Sie die Flask-Anwendung
Erstellen Sie eine Docker-Datei im Projektverzeichnis, um die Flask-App zu packen.
FROM python:3.12 #set the working dir WORKDIR /usr/src/app #copy the requirements and install dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy all the files to the container COPY . . #Expose the port EXPOSE 5000 #run the app CMD ["gunicorn","-b","0.0.0.0:5000", "app:app"]
Schritt 2: Docker Image erstellen und testen
Es ist wichtig, das Docker-Image lokal zu erstellen und zu testen, um sicherzustellen, dass es wie vorgesehen funktioniert
docker build -t image-name . docker run -p 5000:5000 image-name
Docker-Image an ECR übertragen
Schritt 1. Erstellen Sie ein Elastic Container Repository (ECR)
- Gehen Sie zur AWS ECR-Konsole, erstellen Sie ein Repository und notieren Sie sich den URI (z. B. 123456789012.dkr.ecr.region.amazonaws.com/repo-name)
- HINWEIS: Geben Sie Ihr ECR-Repository ein und wählen Sie „Push-Befehle anzeigen“, um die Befehle zum Pushen des Bildes in Ihr ECR-Repository anzuzeigen. Es sind diese Befehle, die hier verwendet werden.
Schritt 2: Authentifizieren Sie Docker bei ECR
Führen Sie den folgenden Befehl aus, um Docker mit ECR zu authentifizieren (ersetzen Sie Ihre Region und Ihre Konto-ID):
aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com
Schritt 3: Markieren und pushen Sie das Bild
Kennzeichnen Sie Ihr lokales Docker-Image so, dass es mit dem ECR-Repository übereinstimmt, und übertragen Sie es dann per Push:
HINWEIS: Stellen Sie sicher, dass es sich um die jeweilige Region und Konto-ID Ihres Kontos handelt
docker tag image-name:latest your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest docker push your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest
Ihr ECR-Repo sollte genau so aussehen, wenn das Bild erfolgreich gepusht wurde
Erstellen Sie eine VPC und ihre Subnetze
Beachten Sie die Region, denn hier werden alle Ressourcen eingesetzt
Schritt 1: Erstellen Sie eine neue VPC
- Gehen Sie zur VPC-Konsole und erstellen Sie eine neue VPC
- CIDR-Block angeben (z. B. 10.0.0.0/16)
- HINWEIS: Stellen Sie sicher, dass die Einstellung „DNS-Hostnamen aktivieren“ aktiviert ist, wenn Sie die VPC erstellen
Schritt 2: Erstellen Sie ein Internet Gateway (IGW) für die VPC
Wählen Sie in der VPC-Konsole die Registerkarte „Intergate Gateway“ und erstellen Sie das Internet-Gateway. Sobald das IGW erstellt ist, hängen Sie es an Ihre VPC an
Schritt 3: Subnetze erstellen
- Erstellen Sie zwei Subnetze in einer Verfügbarkeitszone (z. B. us-east-1)
- Erstellen Sie einen weiteren Satz von zwei Subnetzen in einer anderen Verfügbarkeitszone (AZ) (z. B. us-east-2)
- HINWEIS: In jeder AZ dienen die Subnetze als private bzw. öffentliche Subnetze.
HINWEIS: Der ECS-Cluster wird im privaten Subnetz bereitgestellt und der Application Load Balancer befindet sich im öffentlichen Subnetz und greift auf den ECS-Cluster im privaten Subnetz zu
Schritt 4: Aktualisieren Sie die Routentabellen
- Erstellen Sie Routentabellen für die öffentlichen und privaten Subnetze und verknüpfen Sie die Routentabellen jeweils mit den öffentlichen und privaten Subnetzen. (Stellen Sie sicher, dass die verwendete VPC für beide ausgewählt ist.)
- Fügen Sie für die Routentabelle der öffentlichen Subnetze zur Route 0.0.0.0/0 hinzu, um den gesamten ausgehenden Datenverkehr über das Internet-Gateway zu leiten.
- Das private Subnetz leitet vorerst keinen ausgehenden Datenverkehr weiter.
Erstellen Sie VPC-Endpunkte für ECR
Dadurch erhält der ECS-Cluster Zugriff auf die Elastic Container Registry (ECR).
HINWEIS: Es werden vier Endpunkte für S3, ECR, DOCKER und CloudWatch erstellt.
- Wählen Sie Endpunkte aus und klicken Sie auf Endpunkt erstellen.
- Benennen Sie den Endpunkt und suchen Sie unter „services com.amazonaws.us-east-1.ecr.api“ nach dem ECR-API-Endpunkt
- Wählen Sie die VPC aus, die wir verwendet haben. Daraufhin wird die Option „Subnetze“ angezeigt, in der die Verfügbarkeitszonen ausgewählt werden, in denen sich unsere privaten Subnetze befinden. Anschließend wählen Sie schließlich unsere privaten Subnetze und die Standardsicherheitsgruppe aus.
- Wählen Sie die Standardeinstellung aus, lassen Sie die Richtlinie unverändert und erstellen Sie dann die VPC.
*Erstellen Sie nun die verbleibenden Endpunkte, indem Sie die Dienste für Docker com.amazonaws.us-east-1.ecr.dkr, für CloudWatch-Protokolle com.amazonaws.us-east-1.logs und für S3 com.amazonaws ändern. us-east-1.s3 bzw. und befolgen Sie alles andere genau, um diese Änderungen zu erwarten.
- HINWEIS: Wählen Sie für den S3-Endpunkt das Gateway aus. Dies wird als S3-Gateway-Endpunkt bezeichnet und fordert Sie auf, ihn mit Ihrer privaten Subnetz-Routentabelle zu verbinden, wodurch eine Route in der Routentabelle dafür erstellt wird.
Erstellen Sie einen Application Load Balancer und eine Zielgruppe
Dies ist ein sehr wichtiger Schritt, da es sich um die ALB handelt
leitet den Datenverkehr an den privaten ECS-Dienst weiter.
Zuerst müssen wir eine Sicherheitsgruppe für die ALB erstellen.
- Gehen Sie zur Sicherheitsgruppe auf der linken Seite und wählen Sie „Sicherheitsgruppe erstellen“. Geben Sie dem Wertpapier einen Namen und eine Beschreibung.
- Fügen Sie eine eingehende Regel für Portbereich 80 und Quelle 0.0.0.0/0 hinzu und fügen Sie eine zweite Regel für Portbereich 443 und Quelle 0.0.0.0/24 für HTTP- bzw. HTTPS-Verkehr hinzu
Schritt 1: Erstellen Sie eine Zielgruppe
- Gehen Sie zur EC2-Konsole und wählen Sie links unter Load Balancing die Zielgruppe aus.
- Wählen Sie unter Grundkonfiguration IP-Adressen aus und benennen Sie die Zielgruppe
- Belassen Sie das Protokoll und den Port auf HTTP:80
- Wählen Sie die VPC aus, in der wir den Load Balancer bereitstellen, scrollen Sie und klicken Sie auf Weiter.
- Entfernen Sie hier die vorhandene IP-Adresse. Alle IPs werden automatisch hinzugefügt. Geben Sie als Nächstes den offengelegten Port an, Port:5000, und erstellen Sie die Zielgruppe.
Erstellen Sie einen Application Load Balancer
- Wählen Sie links in der EC2-Konsole den Load Balancer und dann „Load Balancer erstellen“ aus.
- Wählen Sie „Anwendungs-Load-Balancer erstellen“ aus. Dies wird ein mit dem Internet verbundener Load-Balancer sein. Geben Sie dem ALB einen Namen.
- Wählen Sie im Abschnitt „Netzwerkzuordnung“ die erstellte VPC und die öffentlichen Subnetze in den beiden Verfügbarkeitszonen aus.
- Wählen Sie im Bereich „Listener und Routing“ die erstellte Zielgruppe aus. Der ALB lauscht auf Port:80 und leitet ihn an die Zielgruppe weiter.
- Erstellen Sie die ALB.
Erstellen Sie Aufgabendefinitionen
Gehen Sie zur ECS-Konsole und wählen Sie Aufgabendefinitionen aus.
Schritt 1:
- Benennen Sie die Aufgabendefinitionsfamilie
- Belassen Sie die standardmäßigen Infrastrukturanforderungen unverändert, Sie können jedoch die vCPU und den Speicher nach Ihrem Ermessen ändern.
Schritt 2: Für Container 1
- Geben Sie einen Namen an
- Gehen Sie zu Ihrem ECR und kopieren Sie den URI des Docker-Images, das wir in früheren Abschnitten dieses Projekts gepusht haben. Kehren Sie zum Abschnitt „Container 1“ der Aufgabendefinitionen zurück, die wir erstellen, und fügen Sie ihn in den Image-URI für den Container ein.
- Stellen Sie für die Portzuordnungen den Wert 5000 ein, da dies der Port war, den wir in unserem Docker-Container bereitgestellt haben, und geben Sie ihm einen Namen. HINWEIS: Es ist sehr wichtig, dass die Portzuordnungen mit denen des offengelegten Docker-Ports übereinstimmen
Umgebungsvariablen hinzufügen
Dies wird im CI/CD-Bereich dieses Projekts wichtig sein. Wird aber vorerst übersprungen.Fahren Sie fort und überspringen Sie die verbleibenden Abschnitte und erstellen Sie die Aufgabendefinition
Erstellen Sie einen Fargate-Cluster und -Dienst
Sicherheitsgruppe für den ECS-Dienst erstellen
- Gehen Sie zur Sicherheitsgruppe auf der linken Seite und wählen Sie „Sicherheitsgruppe erstellen“. Geben Sie dem Wertpapier einen Namen und eine Beschreibung.
- Fügen Sie eine Eingangsregel für Portbereich 5000 hinzu und die Quelle ist die Sicherheitsgruppe „Application Load Balancers“.
Schritt 1: Cluster erstellen
- Gehen Sie zur Registerkarte „Cluster“ und wählen Sie „Cluster erstellen“. Dadurch gelangen Sie zur Cluster-Konfigurationsseite. Benennen Sie den Cluster und stellen Sie sicher, dass auf der Registerkarte „Infrastruktur“ nur AWS Fargate (Serverless) ausgewählt ist, und erstellen Sie dann den Cluster.
Schritt 2: Erstellen Sie einen Dienst
- Wählen Sie den erstellten Cluster aus und klicken Sie auf „Erstellen unter Dienst“.
Dies führt Sie zu einer neuen Seite, auf der Sie die Konfiguration des Fargate-Dienstes angeben.
- Scrollen Sie über den Abschnitt „Umgebung“ hinaus und wechseln Sie zur Bereitstellungskonfiguration. Geben Sie hier die Aufgabendefinitionsfamilie an, die automatisch auch die Revision auswählt.
Wählen Sie die gewünschte Anzahl der zu startenden Aufgaben aus. Einer ist für dieses Projekt in Ordnung.
Scrollen Sie zur Registerkarte „Netzwerk“ und wählen Sie die erstellte VPC und dann die privaten Subnetze aus
Wählen Sie im Abschnitt „Load Balancer“ den Load Balancer-Typ „Application Load Balancer“ und dann „Vorhandenen Load Balancer verwenden“ aus. Dadurch wird der ALB angezeigt, der in den vorherigen Abschnitten erstellt wurde. Wählen Sie es aus.
Scrollen Sie und Sie werden sehen, Zuhörer. Wählen Sie „Einen vorhandenen Listener verwenden“ und wählen Sie den dort vorhandenen Port 80-Listener aus. Machen Sie unter „Zielgruppe“ dasselbe und wählen Sie die vorhandene Zielgruppe aus, die wir erstellt haben.
Als nächstes kommt Service Auto Scaling. Dies ist optional, stellt aber eine gute Ergänzung dar, wenn Sie auf der Grundlage definierter Metriken auf eine App skalieren müssen. Aktivieren Sie dies und geben Sie die minimale und maximale Anzahl der Aufgaben an, die Sie ausführen möchten. Als nächstes fügen Sie eine Skalierungsrichtlinie hinzu. Für dieses Projekt wird neben der ECS-Dienstmetrik ALBrequestCountPerTarget eine Zielverfolgungsrichtlinie verwendet, mit dem Zielwert 50, der Abklingzeit für die Skalierung und der Abklingzeit für die Skalierung 60 Sekunden
Erstellen Sie den Dienst.
Sobald der Dienst erstellt ist, wird die gewünschte Anzahl an Aufgaben erstellt.
Erstellen Sie eine gehostete Zone in Route 53
Wenn die obigen Anweisungen vollständig befolgt wurden, sollten Sie über eine voll funktionsfähige Web-App verfügen. Um darauf zuzugreifen, gehen Sie zu Ihrem Load Balancer, kopieren Sie den DNS-Namen und fügen Sie ihn in Ihren Browser ein. Aber das ist mühsam und erfordert keine Best Practices. Idealerweise sollte sich vor dem ALB oder CloudFront eine Webanwendungs-Firewall befinden, der Einfachheit halber verwenden wir jedoch nur Route 53.
HINWEIS: Für diesen Abschnitt ist es erforderlich, dass Sie über einen registrierten Domänennamen entweder bei AWS oder einem anderen Anbieter verfügen
Schritt 1: Erstellen Sie ein gehostetes In
- Gehen Sie zur Route 53-Konsole.
- Wählen Sie auf der linken Registerkarte „Gehostete Zonen“ aus. Das solltest du haben.
- Wählen Sie „Gehostete Zone erstellen“ aus
- Geben Sie Ihren Domainnamen ein und geben Sie eine Beschreibung ein. Behalten Sie den Typ „Öffentlich gehostete Zone“ bei und wählen Sie „Gehostete Zone erstellen“ aus.
Schritt 2: Fügen Sie den ALB-DNS-Namen zu den gehosteten Zoneneinträgen hinzu
- Gehen Sie zu Ihrer ALB-Konsole und kopieren Sie deren DNS-Namen.
- Kehren Sie zur gehosteten Zone zurück und wählen Sie „Datensatz erstellen“.
- Der Standard-Datensatztyp ist der A-Datensatz, der verwendet wird.
- Betätigen Sie den Alias-Schalter
- Wählen Sie unter „Endpunkt auswählen“ den Alias für die Anwendung und den klassischen Lastausgleichsdienst aus
- Als nächstes wählen Sie die Region aus, in der Sie Ihren Load Balancer gestartet haben. In diesem Fall ist es us-east-1. Stellen Sie sicher, dass es sich um Ihre On-Region handelt.
- Wählen Sie Ihren Load Balancer aus dem Dropdown-Menü.
- Datensatz erstellen.
Dies setzt voraus, dass Sie Ihren Domainnamen bei AWS haben
GLÜCKWUNSCH!!
Wenn Sie die Schritte bis zum T befolgt haben, sollten Sie über eine voll funktionsfähige Web-App verfügen, auf die Sie über Ihren Domainnamen zugreifen können.
Dies war ein sehr spannendes Projekt, da ich mit VPCs, privaten und öffentlichen Subnetzen, VPC-Endpunkten, ECS-Diensten, ECR, Zielgruppen, Sicherheitsgruppen und Application Load Balancer gearbeitet habe, die alle zusammenkamen, um dieses Web zu erstellen. App.
Das obige ist der detaillierte Inhalt vonBereitstellung eines Flask-basierten Intrusion Detection Systems in AWS ECS mit CI/CD. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Python und C haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1) Python ist aufgrund seiner prägnanten Syntax und der dynamischen Typisierung für die schnelle Entwicklung und Datenverarbeitung geeignet. 2) C ist aufgrund seiner statischen Tipp- und manuellen Speicherverwaltung für hohe Leistung und Systemprogrammierung geeignet.

Die Auswahl von Python oder C hängt von den Projektanforderungen ab: 1) Wenn Sie eine schnelle Entwicklung, Datenverarbeitung und Prototypdesign benötigen, wählen Sie Python. 2) Wenn Sie eine hohe Leistung, eine geringe Latenz und eine schließende Hardwarekontrolle benötigen, wählen Sie C.

Indem Sie täglich 2 Stunden Python -Lernen investieren, können Sie Ihre Programmierkenntnisse effektiv verbessern. 1. Lernen Sie neues Wissen: Lesen Sie Dokumente oder sehen Sie sich Tutorials an. 2. Üben: Schreiben Sie Code und vollständige Übungen. 3. Überprüfung: Konsolidieren Sie den Inhalt, den Sie gelernt haben. 4. Projektpraxis: Wenden Sie an, was Sie in den tatsächlichen Projekten gelernt haben. Ein solcher strukturierter Lernplan kann Ihnen helfen, Python systematisch zu meistern und Karriereziele zu erreichen.

Zu den Methoden zum effizienten Erlernen von Python innerhalb von zwei Stunden gehören: 1. Überprüfen Sie das Grundkenntnis und stellen Sie sicher, dass Sie mit der Python -Installation und der grundlegenden Syntax vertraut sind. 2. Verstehen Sie die Kernkonzepte von Python wie Variablen, Listen, Funktionen usw.; 3.. Master Basic und Advanced Nutzung unter Verwendung von Beispielen; 4.. Lernen Sie gemeinsame Fehler und Debugging -Techniken; 5. Wenden Sie Leistungsoptimierung und Best Practices an, z. B. die Verwendung von Listenfunktionen und dem Befolgen des Pep8 -Stilhandbuchs.

Python ist für Anfänger und Datenwissenschaften geeignet und C für Systemprogramme und Spieleentwicklung geeignet. 1. Python ist einfach und einfach zu bedienen, geeignet für Datenwissenschaft und Webentwicklung. 2.C bietet eine hohe Leistung und Kontrolle, geeignet für Spieleentwicklung und Systemprogrammierung. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Python eignet sich besser für Datenwissenschaft und schnelle Entwicklung, während C besser für Hochleistungen und Systemprogramme geeignet ist. 1. Python -Syntax ist prägnant und leicht zu lernen, geeignet für die Datenverarbeitung und wissenschaftliches Computer. 2.C hat eine komplexe Syntax, aber eine hervorragende Leistung und wird häufig in der Spieleentwicklung und der Systemprogrammierung verwendet.

Es ist machbar, zwei Stunden am Tag zu investieren, um Python zu lernen. 1. Lernen Sie neues Wissen: Lernen Sie in einer Stunde neue Konzepte wie Listen und Wörterbücher. 2. Praxis und Übung: Verwenden Sie eine Stunde, um Programmierübungen durchzuführen, z. B. kleine Programme. Durch vernünftige Planung und Ausdauer können Sie die Kernkonzepte von Python in kurzer Zeit beherrschen.

Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

Dreamweaver Mac
Visuelle Webentwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version