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"]
Nach dem Login kopieren
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
Nach dem Login kopieren
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
Nach dem Login kopieren
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
Nach dem Login kopieren
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!