로드밸런서(ALB) + 보안 그룹(Security Group) + 대상 그룹(Target Group) 생성
- 아키텍처 개요 (링크)
- CodeBuild + ECR 생성 (링크)
- VPC + 서브넷 생성 (링크)
- 인터넷 게이트웨이 + NAT 게이트웨이 생성 및 라우트 테이블 설정 (링크)
- 로드밸런서(ALB) + 보안 그룹(Security Group) + 대상 그룹(Target Group) 생성 (현재 글)
- ECS 클러스터 생성 + 태스크 정의 + 서비스 생성 (링크)
- S3 버킷 생성 + CodePipeline 설정 및 최종 배포 (링크)
보안 그룹 생성
보안 그룹은 ALB용 보안그룹 하나, ECS Task용 보안그룹 하나로 총 2개를 생성했다.
보안 그룹 설정은 EC2의 보안 그룹이 아닌 VPC의 보안 그룹으로 생성해주어야 한다.
ALB용 보안 그룹
위의 경우 alb 보안 그룹이다. 이는 ALB를 생성할 때 사용된다.
- 인바운드 규칙
- 아웃바운드 규칙 ⇒ 변경 전 (최종적으로 해당 규칙은 사용하지 않음)
ECS 태스크용 보안 그룹을 생성해준 후 아웃바운드 규칙을 아래와 같이 수정했다.
- 아웃바운드 규칙 ⇒ 변경 후 (최종적으로 해당 규칙으로 사용해야 함)
에러가 뜨는 경우 기존의 아웃바운드 규칙을 삭제하고 다시 추가해 주면 된다.
ECS Task용 보안 그룹
위의 경우 ECS Task용 보안 그룹이다. 이는 서비스를 생성 할 때 사용된다.
- 인바운드 규칙 ⇒ ALB 보안 그룹을 만든 후 설정 가능유형 프로토콜 포트 범위 소스
- 아웃바운드 규칙
보안 그룹이란?
보안 그룹은 인바운드, 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 한다.
인바운드 규칙은 외부에서 리소스로 들어오는 트래픽을 제어하는 것이고,
아웃바운드 규칙은 리소스에서 외부로 나가는 트래픽을 제어하는 것이다.
보안그룹을 2개 만든 이유는 다음과 같다.
- ALB용 보안 그룹의 경우 외부에서 들어오는 트래픽을 처리하고 ECS 태스크로 전달하는 역할을 한다. ⇒ ALB가 외부 트래픽을 받아와 ECS Task로 전달하게 됨
- ECS Task용 보안 그룹의 경우 ALB에서 전달된 트래픽만 허용하고, 외부로 지나가는 트래픽을 제어하는 역할을 한다. ⇒ ALB에서 전달된 트래픽만을 허용하여 ECS Task의 외부 요청을 제어하게 됨
- 각 리소스가 필요로 하는 트래픽만 하용하여 보안을 강화할 수 있기 때문에 이렇게 사용하는 것이다.
대상 그룹 생성
대상 유형은 IP 주소로 선택해주고, 그룹 이름은 juice-shop-target-group로 설정해 주었다.
프로토콜 및 포트는 HTTP(80)로 설정해 주고, IP 주소 유형은 IPv4, VPC는 사용할 VPC를 선택했다.
프로토콜 버전은 HTTP1로 해주었고, 상태 검사 프로토콜은 HTTP로 /health 경로에서 이루어지도록 했다.
대상 그룹이란?
대상 그룹은 로드 밸런서로 들어오는 트래픽을 전송할 위치를 정의한다.
기본적으로 로드밸런서는 대상 그룹에 대해 지정한 프로토콜과 포트 번호를 사용하여 등록된 대상으로 요청을 전송한다.
로드 밸런서에서 대상 그룹의 대상으로 트래픽을 라우팅하려면 리스너에 대상 그룹을 지정한다.
- 대상 유형 선택에서 IP 주소를 선택하는 이유는 ECS, 컨테이너, 특정 네트워크 환경에서 가상 네트워크 인터페이스나 IP 기반의 리소스를 대상으로 사용하기 위한 것이다.
- ECS Fargate 환경에서 Task가 특정 IP 주소를 사용하기 때문에 ALB와 연동하려면 IP 주소로 선택해야 함
- ECS Fargate가 아닌 다른 환경에서는 다른 유형으로 선택해야 함
- 상태 검사란 ALB가 대상으로 요청을 보내고, 해당 대상이 예상된 응답을 반환하는지 아닌지 확인하는 과정이다. 상태 검사 경로에서 상태 검사를 수행할 HTTP 또는 HTTPS 요청을 보내고 응답 상태 코드가 올바른지 확인하여 정상인 대상만 클라이언트 트래픽을 라우팅하게 되는 것이다. ⇒ 이 경로는 사용자 지정이기 때문에 어떤 엔드포인트를 설정하던 상관없지만, 의미에 맞고 직관적인 간단한 단어를 선택해 주는 것이 좋기에 권장되는 /health로 설정해 주었다.
로드밸런서 생성
로드밸런서는 ALB로 생성해주었고, 이름은 juice-shop-scp로 작성했다.
체계는 인터넷 경계로 해주고, IP 주소 유형은 IPv4로 선택했다.
네트워크 매핑에서는 생성한 VPC를 선택해 주고, 각 가용 영역을 선택하여 퍼블릭 서브넷을 각각 선택해 주었다.
보안 그룹은 ALB용으로 생성한 보안 그룹만 지정해주었다.
리스너는 대상 그룹을 선택하고 HTTP(80)으로 선택했다.
로드 밸런서란?
다수의 사람들이 동일한 시간에 서비스를 이용할 경우 한 번에 많은 트래픽이 몰리게 된다. 이 경우 서버는 그 트래픽을 감당하기 어려워지고 많은 부하를 받게 된다. 때문에 동일한 서버를 여러 대 구비해 두고 트래픽을 분산해서 처리하는 방법을 사용한다. 하지만 단순히 서버를 여러 대 구비한다고 트래픽을 적절하게 분산시킬 수는 없다. 이를 위해 한 곳의 서버에 트래픽이 몰리는 것을 방지하고 여러 서버에 적절히 분산시켜 주는 기술이 바로 로드 밸런싱이다.
로드 밸런싱에는 OSI 7계층에서 전송 계층과 애플리케이션 계층에서 동작하는 L4로드밸런싱과 L7로드밸런싱이 많이 활용되며 ALB는 7계층에서 이루어지는 L7로드밸런싱이다.
그렇다면 ALB는 무엇일까?
ALB(Application Load Balancer)란?
ALB는 AWS에서 제공하는 로드밸런서 중 하나로 OSI 7계층인 애플리케이션 계층에서 동작하는 로드밸런서이다.
리스너란?
리스너는 구성한 프로토콜 및 포트로 서버 연결 요청을 확인하는 프로세스이다. 로드밸런서를 통한 서버 접근 경로에 따라 어떤 서버로 요청을 보낼지를 설정한다. 리스너에 정의한 규칙에 따라 로드밸런서에 등록된 대상 그룹으로 요청을 라우팅하는 방법이 결정된다
- 대상 그룹의 상태 검사 프로토콜 및 포트와 동일하게 설정해 주었다.
참고 문헌
https://velog.io/@yenicall/AWS-VPC의-개념
https://aws-hyoh.tistory.com/49
https://inpa.tistory.com/entry/AWS-📚-VPC-개념-사용-보안-설정-Security-Group-NACL
https://uchupura.tistory.com/48
'Project > Cloud' 카테고리의 다른 글
파이프라인 Security에 집중한 DevOps 구현 - S3 버킷 생성 + CodePipeline 설정 및 최종 배포 (7) (0) | 2025.01.27 |
---|---|
파이프라인 Security에 집중한 DevOps 구현 - ECS 클러스터 생성 + 태스크 정의 + 서비스 생성 (6) (0) | 2025.01.27 |
파이프라인 Security에 집중한 DevOps 구현 - 인터넷 게이트웨이 + NAT 게이트웨이 생성 및 라우트 테이블 설정 (4) (0) | 2025.01.27 |
파이프라인 Security에 집중한 DevOps 구현 - VPC + 서브넷 생성 (3) (1) | 2025.01.27 |
파이프라인 Security에 집중한 DevOps 구현 - CodeBuild + ECR 생성 (2) (0) | 2025.01.27 |