CI/CD를 사용하여 Flask 기반 침입 탐지 시스템을 AWS ECS에 배포
소개
이번 게시물에서는 AWS에 침입 탐지 시스템을 배포하는 과정을 안내하겠습니다
참고: 이 프로젝트에서는 이미 활성 AWS 계정이 있고 코드 편집기에 계정 자격 증명(액세스 키)을 구성했다고 가정하며 이 프로젝트로 인해 콘솔에서 일부 비용이 발생하게 됩니다.
프로젝트 개요
목표
본 프로젝트의 목적은 다음과 같습니다.
- Docker로 애플리케이션 컨테이너화
- 컨테이너 이미지를 ECR로 푸시
- VPC 생성, 프라이빗 서브넷 2개, 퍼블릭 서브넷 2개
- ECR에 액세스하기 위한 프라이빗 서브넷용 VPC 엔드포인트 생성
- ECS 서비스의 퍼블릭 서브넷에 Application Load Balancer 및 대상 그룹 배포
- ECS 서비스에 대한 작업 정의 생성
- 프라이빗 서브넷에서 Fargate 시작 유형을 사용하여 ECS 클러스터와 ECS 서비스를 생성합니다.
- Route 53에 호스팅 영역을 생성하고 이를 ALB의 DNS 이름으로 지정
프로젝트 아키텍처
Docker를 사용하여 애플리케이션 컨테이너화
이 섹션에서는 이 프로젝트를 처음부터 만드는 단계를 보여줍니다
1단계: Flask 애플리케이션 Dockerize
Flask 앱을 패키징하려면 프로젝트 디렉터리에 Dockerfile을 생성하세요.
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"]
2단계: Docker 이미지 빌드 및 테스트
Docker 이미지가 의도한 대로 작동하는지 확인하려면 로컬에서 Docker 이미지를 빌드하고 테스트하는 것이 중요합니다
docker build -t image-name . docker run -p 5000:5000 image-name
Docker 이미지를 ECR에 푸시
1단계. ECR(탄력적 컨테이너 저장소) 생성
- AWS ECR 콘솔로 이동하여 리포지토리를 생성하고 URI(예: 123456789012.dkr.ecr.region.amazonaws.com/repo-name)를 기록해 둡니다.
- 참고: 이미지를 ECR 저장소에 푸시하는 명령을 보려면 ECR 저장소를 입력하고 푸시 명령 보기를 선택하세요. 여기에 사용될 명령이 있습니다.
2단계. ECR에 Docker 인증
ECR로 Docker를 인증하려면 다음 명령을 실행하세요(your-region 및 your-account-id 교체).
aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com
3단계. 이미지 태그 및 푸시
ECR 저장소와 일치하도록 로컬 Docker 이미지에 태그를 지정한 후 푸시하세요.
참고: 계정의 해당 지역 및 계정 ID인지 확인하세요
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
ECR 저장소는 이미지가 성공적으로 푸시된 것과 같아야 합니다
VPC 및 해당 서브넷 생성
모든 리소스가 배치되는 지역이므로 지역을 기록해 두세요
1단계: 새 VPC 생성
- VPC 콘솔로 이동하여 새 VPC를 생성하세요
- CIDR 블록 지정(예: 10.0.0.0/16)
- 참고: VPC를 생성할 때 DNS 호스트 이름 활성화 설정이 선택되어 있는지 확인하세요
2단계: VPC용 인터넷 게이트웨이(IGW) 생성
VPC 콘솔에서 Intergate Gateway 탭을 선택하고 인터넷 게이트웨이를 생성합니다. IGW가 생성되면 이를 VPC에 연결합니다
3단계: 서브넷 생성
- 하나의 가용성 영역(예: us-east-1)에 두 개의 서브넷을 생성합니다
- 다른 가용성 영역(AZ)(예: us-east-2)에 두 개의 서브넷으로 구성된 또 다른 세트를 생성합니다
- 참고: 각 AZ에서 서브넷은 각각 프라이빗 및 퍼블릭 서브넷 역할을 합니다.
참고: ECS 클러스터는 프라이빗 서브넷에 배포되고 Application Load Balancer는 퍼블릭 서브넷에 있으며 프라이빗 서브넷의 ECS 클러스터에 액세스합니다.
4단계: 경로 테이블 업데이트
- 퍼블릭 및 프라이빗 서브넷에 대한 라우팅 테이블을 생성하고 라우팅 테이블을 퍼블릭 및 프라이빗 서브넷에 각각 연결합니다. (둘 다 사용 중인 VPC가 선택되어 있는지 확인하세요.)
- 퍼블릭 서브넷 라우팅 테이블의 경우 인터넷 게이트웨이를 통해 모든 아웃바운드 트래픽 0.0.0.0/0을 전달하려면 경로에 추가하세요.
- 프라이빗 서브넷은 현재 아웃바운드 트래픽을 라우팅하지 않습니다.
ECR용 VPC 엔드포인트 생성
이렇게 하면 ECS 클러스터가 ECR(Elastic Container Registry)에 액세스할 수 있습니다.
참고: S3, ECR, DOCKER 및 CloudWatch용으로 4개의 엔드포인트가 만들어집니다.
- 엔드포인트를 선택하고 엔드포인트 생성을 클릭하세요.
- 엔드포인트 이름을 지정하고 서비스 com.amazonaws.us-east-1.ecr.api에서 ECR API 엔드포인트를 검색하세요.
- 지금까지 사용했던 VPC를 선택하면 프라이빗 서브넷이 있는 가용성 영역을 선택할 수 있는 서브넷 옵션이 표시되고 마지막으로 프라이빗 서브넷과 기본 보안 그룹이 선택됩니다.
- 기본값을 선택하고 정책을 그대로 둔 후 VPC를 생성하세요.
*이제 docker com.amazonaws.us-east-1.ecr.dkr, CloudWatch 로그 com.amazonaws.us-east-1.logs 및 S3 com.amazonaws에 대한 서비스를 변경하여 나머지 엔드포인트를 생성합니다. us-east-1.s3을 각각 선택하고 해당 변경 사항을 정확히 예상하는 다른 모든 항목을 따르세요.
- 참고: S3 엔드포인트의 경우 게이트웨이를 선택하세요. 이를 S3 게이트웨이 엔드포인트라고 하며 프라이빗 서브넷 라우팅 테이블에 연결하라는 메시지가 표시되며, 그러면 라우팅 테이블에 경로가 생성됩니다.
Application Load Balancer 및 대상 그룹 생성
이것은 ALB로서 매우 중요한 단계입니다
트래픽을 개인 ECS 서비스로 라우팅합니다.
먼저 ALB에 대한 보안 그룹을 생성해야 합니다.
- 왼쪽 보안 그룹으로 이동하여 보안 그룹 생성을 선택하세요. 보안에 이름과 설명을 제공합니다.
- 포트 범위 80과 소스 0.0.0.0/0에 인바운드 규칙을 추가하고 HTTP 및 HTTPS 트래픽 각각에 대해 포트 범위 443과 소스 0.0.0.0/24에 두 번째 규칙을 추가합니다
1단계: 대상 그룹 생성
- EC2 콘솔로 이동하여 왼쪽의 로드 밸런싱에서 대상 그룹을 선택하세요.
- 기본 구성에서 IP 주소를 선택하고 대상 그룹의 이름을 지정하세요
- 프로토콜과 포트를 HTTP:80으로 둡니다.
- 로드 밸런서를 배포할 VPC를 선택하고 스크롤하여 다음을 클릭하세요.
- 여기서 기존 IP 주소를 제거하면 모든 IP가 자동으로 추가됩니다. 다음으로 노출된 포트를 Port:5000으로 지정하고 대상 그룹을 생성합니다.
애플리케이션 로드 밸런서 생성
- EC2 콘솔 왼쪽에서 로드 밸런서를 선택하고 로드 밸런서 생성을 선택하세요.
- Create Application Load Balancer를 선택하면 인터넷 연결 로드 밸런서가 됩니다. ALB에 이름을 지정하세요.
- 네트워크 매핑 섹션에서 생성된 VPC와 두 가용 영역의 퍼블릭 서브넷을 선택합니다.
- 리스너 및 라우팅 섹션에서 생성된 대상 그룹을 선택합니다. ALB는 포트:80에서 수신 대기하고 대상 그룹으로 전달합니다.
- ALB를 생성합니다.
작업 정의 만들기
ECS 콘솔로 이동하여 작업 정의를 선택합니다.
1단계:
- 작업 정의 계열 이름 지정
- 기본 인프라 요구 사항은 그대로 두고 vCPU와 메모리는 원하는 대로 변경할 수 있습니다.
2단계: 컨테이너 1
- 이름을 지어주세요
- ECR로 이동하여 이 프로젝트의 이전 섹션에서 푸시한 도커 이미지의 URI를 복사하고 생성 중인 작업 정의의 컨테이너 1 섹션으로 돌아와서 컨테이너의 이미지 URI에 붙여넣습니다.
- 포트 매핑의 경우 5000으로 설정합니다. 이는 도커 컨테이너에 노출된 포트이고 이름을 지정했기 때문입니다. 참고: 포트 매핑이 노출된 Docker 포트와 동일한 것이 매우 중요합니다
환경 변수 추가
이는 이 프로젝트의 CI/CD 섹션에서 중요합니다. 하지만 지금은 생략하겠습니다.나머지 섹션을 건너뛰고 작업 정의를 생성하세요
Fargate 클러스터 및 서비스 생성
ECS 서비스를 위한 보안 그룹 생성
- 왼쪽 보안 그룹으로 이동하여 보안 그룹 생성을 선택하세요. 보안에 이름과 설명을 제공합니다.
- 포트 범위 5000에 인바운드 규칙을 추가하면 소스는 Application Load Balancers 보안 그룹이 됩니다.
1단계: 클러스터 생성
- 클러스터 탭으로 이동하여 클러스터 생성을 선택하면 클러스터 구성 페이지가 나타납니다. 클러스터 이름을 지정하고 인프라 탭에서 AWS Fargate(Serverless)만 선택되어 있는지 확인한 후 클러스터를 생성합니다.
2단계: 서비스 생성
- 생성된 클러스터를 선택하고 서비스 아래에서 생성을 클릭하세요.
Fargate 서비스 구성을 지정하는 새 페이지로 연결됩니다.
- 환경 섹션을 스크롤하여 배포 구성으로 이동합니다. 여기에서 개정도 자동으로 선택하는 작업 정의 제품군을 지정합니다.
실행하려는 작업 수를 선택하세요. 이 프로젝트에는 하나면 충분합니다.
네트워킹 탭으로 스크롤하여 생성된 VPC를 선택한 다음 프라이빗 서브넷을 선택합니다
로드 밸런서 섹션에서 로드 밸런서 유형을 Application Load Balancer로 선택하고 기존 로드 밸런서 사용을 선택합니다. 그러면 이전 섹션에서 생성된 ALB가 나타납니다. 선택하세요.
스크롤하시면 보실 수 있습니다, 청취자님. 기존 리스너 사용을 선택하고 거기에 있는 포트 80 리스너를 선택하고 대상 그룹 아래에서 동일한 작업을 수행하여 우리가 만든 기존 대상 그룹을 선택합니다.
다음은 Service Auto Scaling입니다. 이는 선택 사항이지만 정의된 메트릭을 기반으로 앱을 확장해야 하는 경우 좋은 추가 기능입니다. 이 기능을 활성화하고 실행하려는 최소 및 최대 작업 수를 지정하세요. 다음으로 조정 정책을 추가합니다. 이 프로젝트에서는 대상 추적 정책이 ALBrequestCountPerTarget ECS 서비스 지표와 함께 사용되며 대상 값은 50, 확장 휴지 기간 및 축소 휴지 기간은 60초입니다
서비스를 만듭니다.
서비스가 생성되면 원하는 개수의 작업이 생성됩니다.
Route 53에서 호스팅 영역 생성
위 지침을 따랐다면 완전히 작동하는 웹 앱이 있어야 합니다. 액세스하려면 로드 밸런서로 이동하고 DNS 이름을 복사하여 브라우저에 붙여넣으세요. 그러나 이는 지루하고 모범 사례를 사용하지 않는 것입니다. 이상적으로는 ALB 또는 CloudFront 앞에 웹 애플리케이션 방화벽이 있어야 하지만 단순화를 위해 Route 53만 사용하겠습니다.
참고: 이 섹션에서는 AWS 또는 다른 공급자에 등록된 도메인 이름이 필요합니다
1단계: 호스팅된 호스트 만들기
- Route 53 콘솔로 이동합니다.
- 왼쪽 탭에서 호스팅 영역을 선택합니다. 이거 꼭 갖고 있어야 해.
- 호스팅 영역 생성 선택
- 도메인 이름을 입력하고 설명을 입력하세요. 유형을 공개 호스팅 영역으로 두고 호스트 영역 생성을 선택합니다.
2단계: 호스팅 영역 레코드에 ALB DNS 이름 추가
- ALB 콘솔로 이동하여 DNS 이름을 복사하세요.
- 호스팅 영역으로 돌아와서 기록 생성을 선택하세요.
- 기본 레코드 유형은 A 레코드로 사용됩니다.
- 별칭 스위치 전환
- 엔드포인트 선택에서 애플리케이션 별칭 및 Classical Load Balancer를 선택합니다.
- 다음으로 Load Balancer를 시작한 지역을 선택합니다. 이 경우 us-east-1이며 해당 지역이 맞는지 확인하세요.
- 드롭다운 메뉴에서 로드 밸런서를 선택하세요.
- 기록을 작성하세요.
AWS에 도메인 이름이 있다고 가정합니다
축하해요!!
T 단계를 따랐다면 도메인 이름을 통해 액세스할 수 있고 완벽하게 작동하는 웹 앱을 갖게 될 것입니다.
VPC, 프라이빗 및 퍼블릭 서브넷, VPC 엔드포인트, ECS 서비스, ECR, 대상 그룹, 보안 그룹 및 Application Load Balancer가 모두 함께 모여 이 웹을 생성하면서 작업한 매우 흥미로운 프로젝트였습니다. 앱.
위 내용은 CI/CD를 사용하여 Flask 기반 침입 탐지 시스템을 AWS ECS에 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

정규 표현식은 프로그래밍의 패턴 일치 및 텍스트 조작을위한 강력한 도구이며 다양한 응용 프로그램에서 텍스트 처리의 효율성을 높입니다.

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

이 기사는 Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask 및 요청과 같은 인기있는 Python 라이브러리에 대해 설명하고 과학 컴퓨팅, 데이터 분석, 시각화, 기계 학습, 웹 개발 및 H에서의 사용에 대해 자세히 설명합니다.

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.
