Maison >développement back-end >Tutoriel Python >Déploiement d'un système de détection d'intrusion basé sur Flask sur AWS ECS avec CI/CD

Déploiement d'un système de détection d'intrusion basé sur Flask sur AWS ECS avec CI/CD

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 12:05:12700parcourir

Introduction

Dans cet article, je vais vous guider à travers le processus de déploiement d'un système de détection d'intrusion sur AWS

REMARQUE : ce projet suppose que vous disposez déjà d'un compte AWS actif et que vous avez configuré les informations d'identification de votre compte (clés d'accès) sur votre éditeur de code et ce projet entraînera certains coûts dans votre console

Aperçu du projet

Objectifs

Les objectifs de ce projet sont les suivants :

  • Containeriser l'application avec Docker
  • Poussez l'image du conteneur vers ECR
  • Créez un VPC, deux sous-réseaux privés et deux sous-réseaux publics
  • Créez des points de terminaison VPC pour que les sous-réseaux privés accèdent à ECR
  • Déployer un équilibreur de charge d'application et un groupe cible dans les sous-réseaux publics pour le service ECS
  • Créer une définition de tâche pour le service ECS
  • Créez un cluster ECS et un service ECS avec le type de lancement fargate dans les sous-réseaux privés.
  • Créez une zone hébergée dans la route 53 et pointez-la vers le nom DNS de l'ALB

Architecture du projet

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Conteneuriser l'application avec Docker

Cette section montrera les étapes impliquées dans la création de ce projet à partir de zéro

Étape 1 : Dockeriser l'application Flask

Créez un Dockerfile dans le répertoire du projet afin de packager l'application flask.

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"]

Étape 2 : Créer et tester l'image Docker

Il est important de créer et de tester l'image Docker localement pour s'assurer qu'elle fonctionne comme prévu

docker build -t image-name .
docker run -p 5000:5000 image-name

Transférer l'image Docker vers ECR

Étape 1. Créer un référentiel de conteneurs élastiques (ECR)

  • Accédez à la console AWS ECR, créez un référentiel et notez l'URI (par exemple, 123456789012.dkr.ecr.region.amazonaws.com/repo-name)
  • REMARQUE : entrez votre dépôt ECR et sélectionnez Afficher les commandes push afin de voir les commandes permettant de transférer l'image vers votre dépôt ECR. Ce sont ces commandes qui seront utilisées ici.

Étape 2. Authentifier Docker auprès d'ECR

Exécutez la commande suivante pour authentifier Docker avec ECR (remplacez votre région et votre identifiant de compte) :

aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com

Étape 3. Marquez et poussez l'image

Marquez votre image Docker locale pour qu'elle corresponde au référentiel ECR, puis envoyez-la :

REMARQUE : assurez-vous qu'il s'agit de la région et de l'identifiant de compte respectifs de votre compte

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

Votre dépôt ECR devrait ressembler à ceci si l'image est poussée avec succès

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Créer un VPC et ses sous-réseaux

Prenez note de la Région, car c'est là que toutes les ressources seront déployées

Étape 1 : Créer un nouveau VPC

  • Allez sur la console VPC et créez un nouveau VPC
  • Spécifiez le bloc CIDR (par exemple 10.0.0.0/16)

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • REMARQUE : assurez-vous que le paramètre Activer les noms d'hôte DNS est coché lors de la création du VPC

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Créer une passerelle Internet (IGW) pour le VPC

Dans la console VPC, sélectionnez l'onglet Intergate Gateway et créez la passerelle Internet. Une fois l'IGW créé, attachez-le à votre VPC

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 3 : Créer des sous-réseaux

  • Créez deux sous-réseaux dans une zone de disponibilité (par exemple us-east-1)
  • Créez un autre ensemble de deux sous-réseaux dans différentes zones de disponibilité (AZ) (par exemple us-east-2)
  • REMARQUE : Dans chaque AZ, les sous-réseaux serviront respectivement de sous-réseaux privés et publics.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

REMARQUE : le cluster ECS sera déployé sur le sous-réseau privé et l'Application Load Balancer sera dans le sous-réseau public et accédera au cluster ECS dans le sous-réseau privé

Étape 4 : Mettre à jour les tables de routage

  • Créez des tables de routage pour les sous-réseaux publics et privés et associez les tables de routage aux sous-réseaux publics et privés respectivement. (Assurez-vous que le VPC utilisé est sélectionné pour les deux.)
  • Pour la table de routage des sous-réseaux publics, ajoutez à la route pour diriger tout le trafic sortant 0.0.0.0/0 via la passerelle Internet.
  • Le sous-réseau privé n'acheminera pas le trafic sortant pour l'instant.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Créer des points de terminaison d'un VPC pour ECR

Cela permettra au cluster ECS d'avoir accès à Elastic Container Registry (ECR).
REMARQUE : Quatre points de terminaison seront créés pour S3, ECR, DOCKER et CloudWatch.

  • sélectionnez Endpoints et cliquez sur créer un point de terminaison.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Nommez le point de terminaison et recherchez le point de terminaison de l'API ECR sous services com.amazonaws.us-east-1.ecr.api
  • Sélectionnez le VPC que nous avons utilisé, cela fera apparaître l'option de sous-réseaux dans laquelle les zones de disponibilité dans lesquelles se trouvent nos sous-réseaux privés seront sélectionnées, puis enfin sélectionnerons nos sous-réseaux privés et le groupe de sécurité par défaut.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sélectionnez la valeur par défaut et laissez la stratégie telle quelle, puis créez le VPC.

* Créez maintenant les points de terminaison restants en modifiant les services pour docker com.amazonaws.us-east-1.ecr.dkr, pour les journaux CloudWatch com.amazonaws.us-east-1.logs et pour S3 com.amazonaws. us-east-1.s3 respectivement et suivez tout le reste exactement comme prévu pour ces changements.

  • REMARQUE : Pour le point de terminaison S3, sélectionnez la passerelle. C'est ce qu'on appelle le point de terminaison de la passerelle S3 et vous invitera à le connecter à votre table de routage de sous-réseau privé, ce qui créera une route dans la table de routage pour cela.

Créer un équilibreur de charge d'application et un groupe cible

C'est une étape très importante car c'est l'ALB qui
acheminera le trafic vers le service ECS privé.

Tout d'abord, nous devons créer un groupe de sécurité pour l'ALB.

  • Accédez au groupe de sécurité sur la gauche et sélectionnez Créer un groupe de sécurité. donnez un nom et une description à la sécurité.
  • Ajoutez une règle entrante sur la plage de ports 80 et la source 0.0.0.0/0 et ajoutez-en une seconde sur la plage de ports 443 et la source 0.0.0.0/24 pour le trafic HTTP et HTTPS respectivement

Étape 1 : Créer un groupe cible

  • Allez sur la console EC2 et à gauche, sous Load Balancing, sélectionnez le groupe cible.
  • Sous la configuration de base, sélectionnez les adresses IP et nommez le groupe cible
  • Laissez le protocole et le port sur HTTP : 80
  • Sélectionnez le VPC dans lequel nous déployons l'équilibreur de charge, faites défiler et cliquez sur Suivant.
  • Ici, supprimez l'adresse IP qui s'y trouve, toutes les adresses IP seront automatiquement ajoutées. Ensuite, spécifiez le port qui a été exposé, Port : 5000 et créez le groupe cible.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Créer un équilibreur de charge d'application

  • Sur la gauche de la console EC2, sélectionnez l'équilibreur de charge et sélectionnez créer un équilibreur de charge.
  • Sélectionnez Créer un équilibreur de charge d'application, ce sera un équilibreur de charge accessible sur Internet. donnez un nom à l'ALB.
  • Dans la section Mappage du réseau, sélectionnez le VPC créé et les sous-réseaux publics dans les deux zones de disponibilité.
  • Dans la section Auditeurs et Routage, sélectionnez le groupe cible créé. L'ALB écoutera sur le port 80 et transmettra au groupe cible.
  • Créez l'ALB.

Créer des définitions de tâches

Accédez à la console ECS et sélectionnez les définitions de tâches.

Étape 1 :

  • Nommez la famille de définition de tâche
  • Laissez les exigences d'infrastructure par défaut telles quelles, mais vous pouvez modifier le processeur virtuel et la mémoire en fonction de votre discrétion. Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Pour le Conteneur 1

  • Donnez un nom
  • Accédez à votre ECR et copiez l'URI de l'image Docker que nous avons poussée dans les sections précédentes de ce projet et revenez à la section conteneur 1 des définitions de tâches que nous créons et collez-la dans l'URI de l'image du conteneur.
  • Pour les mappages de ports, définissez-le sur 5000, car il s'agit du port que nous avons exposé dans notre conteneur Docker et donnez-lui un nom. REMARQUE : Il est très important que les mappages de ports soient les mêmes que ceux du port Docker exposé
  • Ajouter des variables d'environnement
    Cela sera important dans la section CI/CD de ce projet. Mais sera ignoré pour l'instant.

  • Allez-y, sautez les sections restantes et créez la définition de la tâche

Créer un cluster et un service Fargate

Créer un groupe de sécurité pour le service ECS

  • Accédez au groupe de sécurité sur la gauche et sélectionnez Créer un groupe de sécurité. donnez un nom et une description à la sécurité.
  • Ajoutez une règle entrante sur la plage de ports 5000 et la source sera le groupe de sécurité des Application Load Balancers.

Étape 1 : Créer un cluster

  • Allez dans l'onglet clusters et sélectionnez créer un cluster, cela vous amènera à la page de configuration du cluster. Nommez le cluster et assurez-vous que seul AWS Fargate (Serverless) est sélectionné sous l'onglet Infrastructure, puis créez le cluster.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Créer un service

  • Sélectionnez le cluster créé et cliquez sur créer sous service.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Cela vous mènera à une nouvelle page où vous préciserez la configuration du service Fargate.

  • Faites défiler la section Environnement et accédez à la configuration de déploiement. Ici, spécifiez la famille de définition de tâche, qui sélectionnera également automatiquement la révision.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sélectionnez le nombre souhaité de tâches à lancer. Un seul convient à ce projet.

  • Faites défiler jusqu'à l'onglet Réseau et sélectionnez le VPC créé, puis le(s) sous-réseau(s) privé(s)

  • Dans la section Équilibreur de charge, sélectionnez le type d'équilibreur de charge comme Application Load Balancer, puis sélectionnez utiliser un équilibreur de charge existant. Cela fera apparaître l'ALB créé dans les sections précédentes. sélectionnez-le.

  • Faites défiler et vous verrez, auditeur. sélectionnez Utiliser un écouteur existant et sélectionnez l'écouteur du port 80 qui est là et sous le groupe cible, faites de même, en sélectionnant le groupe cible existant que nous avons créé.

  • Vient ensuite Service Auto Scaling. Ceci est facultatif mais constitue un bon ajout pour devoir évoluer vers une application en fonction de métriques définies. Activez cette option et spécifiez le nombre minimum et maximum de tâches que vous souhaitez exécuter. Ajoutez ensuite une stratégie de mise à l’échelle. Pour ce projet, une stratégie de suivi cible est utilisée parallèlement à la métrique du service ALBrequestCountPerTarget ECS, avec la valeur cible de 50, la période de refroidissement de montée en charge et la période de refroidissement de montée en charge de 60 s

  • Créez le service.

  • Une fois le Service créé, le nombre de tâches souhaité sera créé.

Créer une zone hébergée dans la route 53

Si les instructions ci-dessus ont été suivies, vous devriez disposer d'une application Web entièrement fonctionnelle, pour y accéder, accédez à votre équilibreur de charge, copiez le nom DNS et collez-le dans votre navigateur. Mais c'est fastidieux et ne fait pas appel aux meilleures pratiques. Idéalement, il devrait y avoir un pare-feu d'application Web devant l'ALB ou CloudFront, mais par souci de simplicité, nous utiliserons uniquement la Route 53.

REMARQUE : Cette section nécessite que vous ayez un nom de domaine enregistré auprès d'AWS ou de tout autre fournisseur

Étape 1 : Créer un hébergement dans

  • Accédez à la console Route 53.
  • Dans l'onglet de gauche, sélectionnez Zones hébergées. tu devrais avoir ça.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sélectionnez Créer une zone hébergée
  • Entrez votre nom de domaine et donnez une description. Laissez le type comme Zone hébergée publique et sélectionnez Créer une zone hébergée.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Ajouter le nom DNS ALB aux enregistrements de zone hébergée

  • Accédez à votre console ALB et copiez son nom DNS.
  • Revenez dans la zone hébergée et sélectionnez créer un enregistrement.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Le type d'enregistrement par défaut qui existe est l'enregistrement A, qui sera utilisé.
  • Basculez le commutateur d'alias

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sous Choisir le point de terminaison, sélectionnez l'alias de l'application et l'équilibreur de charge classique.
  • Ensuite, choisissez la région dans laquelle vous avez lancé votre équilibreur de charge. Dans ce cas, c'est us-east-1, assurez-vous qu'il s'agit bien de votre région.
  • Choisissez votre équilibreur de charge dans le menu déroulant.
  • Créer un enregistrement.

Cela suppose que vous avez votre nom de domaine avec AWS

FÉLICITATIONS!!

Si vous avez suivi les étapes vers le T, vous devriez disposer d'une application Web entièrement fonctionnelle et accessible via votre nom de domaine.

Ce fut un projet très passionnant car j'ai travaillé avec des VPC, des sous-réseaux privés et publics, des points de terminaison de VPC, des services ECS, ECR, des groupes cibles, des groupes de sécurité et un équilibreur de charge d'application alors qu'ils se sont tous réunis pour créer ce site Web. application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn