필자는 WAF 테스트를 하고자 하였으나, WAF는 아래와 같이 ALB 구성이 먼저 선행조건이라서
이번 게시물에서는 웹서버를 간단하게 만들고, ALB에 대해 정의하도록 한다.
ALB(Application Load Balancer) 란?
ALB는 말 그대로 Load Balancer. 즉, 사용자 요청을 적절하게 분배하는 역할을 한다.
필요에 따라 사용자 요청을 Lambda 또는 API Gateway로 전달할 수도 있지만, 필자는 인스턴스로 선택했다.
조금 더 논리적으로 구성도를 그려보면 아래와 같이 된다.
즉, 2개의 WEB Server(이하 A, B 서버) 한번은 A 서버, 한번은 B서버 부하를 분산하는 역할을 한다.
ALB(Application Load Balancer) 설정 방법
ALB는 대상 그룹을 먼저 생성한 다음에, 해당 대상 그룹에 대한 로드 밸런서를 생성하는 것으로 사용 가능하다.
1. 로드 밸런싱 - 대상그룹 지정
ALB 설정 시에는 내가 어떤 대상(인스턴스, Lambda 기타 등등)으로 부하 분산을 할지 대상그룹을 정하는게 가장 우선이다.
1) 인스턴스 > 로드 밸런싱 > 대상 그룹 > 대상 그룹 생성
2) 대상 그룹 유형 성택하기
필자는 2개의 WEB Sserver를 만들었고, 해당 WEB Server로 LB 할 것이기에 인스턴스를 선택했다.
3) 대상 그룹 Port 설정하기
대상 그룹 만들기에서 가장 중요한 부분이다. 어떤 Port를 LB 받을지 정하는 부분이다.
간략하게 설명하면 아래 프로토콜:포트 부분의 내용을 전달 받아서 대상그룹으로 LB 하게 된다.
그리고 상태 검사 경로는 대상그룹에 대한 Health Check 기능이다.
해당 페이지로 PING을 보내 응답 여부를 보고, 대상 그룹의 활성화 여부를 모니터링할 수 있다.
4) 대상 그룹 상태 확인
대상 그룹 지정과 Port 그리고 위에서 설정한 상태 검사 경로가 이상이 없다면 아래와 같이 상태에 Healythy가 표기 된다.
※ ALB 설정을 하지 않으면 상태 값이 뜨지 않는게 정상입니다.ㅎㅎ
2. 로드 밸런싱 - 로드 밸런서 설정
대상 그룹을 만들었다면, 이제 ALB는 50% 이상 진행된겁니다!!
1) 인스턴스 > 로드 밸런싱 > 로드 밸런서 > 로드 밸랜서 생성
2) 로드 밸런서 종류 선택하기
필자는 내부 시스템에 대한 로드 밸런서가 아니라 외부에 공개 된 WEB Server의 로드 밸런서 이므로 인터넷 경계를 선택했다.
- 만약 내부 시스템의 LB라면 내부를 선택하면 된다.
3) 로드 밸런서 리스너 포트 설정하기
위 대상 그룹에서 대상 그룹 Port 설정하는 부분이 있었다.
마찬가지로 로드 밸런서에서도 동일한 Port 기준으로 리스너 포트를 설정해야 한다.
아래와 같이 HTTP(TCP 80)을 선택할 경우,
TCP 80으로 인입되는 트래픽을 대상 그룹의 인스턴스로 한개씩 요청을 분산하게 된다.
리스너는 로드 밸런서를 다 만들고 나서도 수정이 가능하므로, 지금은 선택만 하면 된다.
4) 로드 밸런서, 대상 그룹 상태 확인
위에서 대상 그룹 상태가 Healythy가 된것을 확인했고, 로드 밸런서도 만들면 아래와 같이 상태값이 바뀌고
모니터링 탭에서 요청/응답에 대한 값을 볼 수 있다.
3. 최종 로드 밸런서 서비스 상태 확인
결과적으로 대상그룹의 도메인으로 접속해보면 WEB Server 1번/2번이 한번씩 호출됨을 알 수 있다.
필자는 어떤 WEB Server로 접속하는지 구분하기 위해서 html 파일을 다르게 설정하였는데,
같은 파일로 설정하게 되면 사용자 입장에서는 전혀 눈치챌수가 없다. (사실 궁금해하지도 않을것이다ㅎㅎㅎ)
참고로 웹서버는 Docker를 이용해서 만들었으며, 아래 게시물을 참고하였다. 아주아주 잘 설명되어 있습니다!!
[Docker] AWS EC2에서 Docker를 이용한 Apache 웹서버 구축 (tistory.com)
추가로 처음에는 대상 그룹을 만들고, 로드 밸런서를 만들었는데
대상 그룹에서 계속해서 로드 밸런서의 트래픽을 받을 수 없다고 Request Timeout이 발생하는 문제가 있었다.
당연히 로드 밸런서가 트래픽을 받아서, WEB Server로 전달하면 이상이 없을것이라 생각했는데, 잘 되지 않았다...
[AWS] Elastic Load Balancer (tistory.com) << 찾아보던 中 WEB Server에서 ALB의 트래픽을 받을 수 있도록
S/G에 추가해야 된다는 사실을 알았고, S/G에 본래의 S/G ID를 넣으니 그때부터 ALB가 정상 동작하였다.
아직까지도 S/G의 개념이 어렵다.. 아직은 하나하나씩 배워가는 입장이다 보니 언젠가 알게되었지..ㅎㅎ
암튼 오늘은 2개의 WEB Server에 대한 대상 그룹 그리고 ALB 생성을 마무리하였다!! 좋아!!
다음에는 해당 ALB를 가지고 WAF 서비스에 대해 알아보기로 하자!
'기술 이모저모 > [AWS] Workshop' 카테고리의 다른 글
[AWS][SNS] Cloudwatch 경보 Slack 연동[1/2] (0) | 2022.05.06 |
---|---|
[AWS][WAF] WEB SERVER WAF 설정 (0) | 2022.05.02 |
[Secworkshop] DevSecOps: Integrating security into pipelines (0) | 2022.03.01 |
[AWS][GuardDuty] AWS Resource 위협탐지 서비스 (0) | 2022.03.01 |
[AWS][Forensic][GuardDuty] 내 테스트 서버에 공격이 들어오다(2/2) (0) | 2022.03.01 |