반응형
ALB를 적용시킨 ECS의 동작원리
이전 포스트에서 배포를 완료하고 실행했는데 ALB의 DNS주소 뒤에 8081포트를 입력하고 접속하니 접속이 불가능했는데 아무런 포트를 입력하지 않고 접속하니 잘 동작했다.
이에 ALB(Application Load Balancer)를 적용시킨 ECS(Elastic Container Service)의 동작원리를 알아보고 이 포스트를 작성한다.
1. ALB 리스너 포트 설정
- ALB의 리스너 포트를 80으로 설정하면, ALB는 클라이언트로부터 80 포트에서 들어오는 요청을 수신한다. 클라이언트는 이 경우 ALB의 DNS 주소만 입력하여 접속할 수 있다 (예: http://ALB-DNS-Address/).
- 아래와 같이 80 포트를 ALB의 리스너 포트로 설정한 상황이다.
2. ECS 포트 매핑 설정
- ECS의 태스크 정의에서 호스트 포트를 0으로 설정하고, 컨테이너 포트를 8081로 설정하면, ECS는 랜덤한 호스트 포트를 할당하여 컨테이너의 8081 포트와 매핑한다.
3. ALB와 ECS의 연결
- ALB 리스너를 ECS 서비스에 연결하면, ALB는 들어오는 요청을 ECS의 태스크(컨테이너)로 라우팅한다. 이 경우, ALB 리스너의 포트와 ECS의 랜덤 호스트 포트 사이에 매핑이 자동으로 생성된다.
4. 요청의 라우팅
- 클라이언트는 ALB의 DNS 주소를 사용하여 요청을 보낸다. ALB는 이 요청을 ECS의 랜덤 호스트 포트로 라우팅하고, ECS는 이를 다시 컨테이너의 8081 포트로 라우팅한다. 이렇게 하면, 요청은 최종적으로 컨테이너의 8081 포트로 도달하며, 이 포트에서 동작하는 Tomcat 서버에 접속하게 된다.
- 이 구성을 통해, 클라이언트는 ALB의 DNS 주소만 사용하여 서비스에 접속할 수 있으며, ALB와 ECS는 요청을 적절한 컨테이너와 포트로 라우팅하여 처리한다.
5. 호스트의 포트는 동적 할당인데 그럼 인바운드는 어떻게 처리되는가?
AWS ECS(Elastic Container Service)에서 ALB(Application Load Balancer)를 사용할 때, 인바운드 트래픽은 ALB를 통해 관리되며, ALB는 클라이언트의 요청을 ECS 태스크의 랜덤 호스트 포트로 라우팅한다.
5-1. ALB 리스너 구성
- ALB의 리스너는 클라이언트의 요청을 수신하는 포트(예: 80)를 정의한다. 리스너는 클라이언트의 요청을 타겟 그룹에 라우팅한다.
5-2. 타겟 그룹 구성
- 타겟 그룹은 요청을 라우팅할 ECS 태스크를 정의한다. 타겟 그룹은 특정 포트 또는 동적 포트 매핑을 사용하여 이 태스크에 대한 트래픽을 라우팅할 수 있다. (ALB 생성 과정 또는 ECS 서비스를 만드는 과정에서 로드밸런서를 설정할때 타겟 그룹 구성이 가능하다.)
5-3. 동적 포트 매핑
- ECS 서비스를 생성할 때 동적 포트 매핑을 활성화하면, ECS는 랜덤 호스트 포트를 자동으로 할당하고 이 정보를 ALB에 제공한다. ALB는 이 정보를 사용하여 클라이언트의 요청을 적절한 호스트 포트로 라우팅한다.
- 여기서 동적 포트 매핑이란 "태스크 정의"에서 컨테이너의 호스트 포트를0으로 설정해 주는것을 의미한다.
이러한 구성을 통해, 인바운드 트래픽은 ALB의 리스너 포트로 들어오고, ALB는 이 트래픽을 동적으로 할당된 호스트 포트로 라우팅하여 ECS 태스크의 컨테이너 포트로 전달한다.
동적 포트 매핑을 사용하면, 별도로 인바운드 규칙을 설정하지 않아도 ALB와 ECS가 함께 작동하여 트래픽을 올바르게 라우팅할 수 있다.
5-4. ACL 설정 확인하는 방법
- 아래와 같이 네트워크 ACL에 들어가서 나의 "네트워크 ACL ID"를 클릭해서 들어간다.
- 아래처럼 "세부 정보" 화면이 나올텐데 여기서 하단의 "인바운드 규칙"을 확인한다.
- 아래 사진을 보면 인바운드 규칙은 규칙 번호(내가 원하는 값으로 설정) 100번에 유형은 "모든 트래픽"으로 열어주었다. 소스는 0.0.0.0/0으로 설정해서 모든곳에서 들어올 수 있도록 설정했다.
주의사항
- 이러한 방식으로 설정하면 네트워크 보안에 문제를 일으킬 수 있다. 모든 트래픽을 허용하면 악의적인 트래픽도 네트워크에 액세스할 수 있게 된다. 따라서 가능하다면, 보안 그룹 또는 ACL 규칙을 더 세밀하게 구성하여 필요한 트래픽만 허용하는 것이 좋다. 예를 들어, ALB의 IP 주소와 포트만 허용하고, 나머지는 차단하는 등의 보안 조치를 고려해볼 수 있다.
6. 동적 포트 할당을 쓰면서 ACL의 보안을 유지하는 방법
AWS ECS의 동적 포트 할당 기능을 사용할 때, 특정 포트를 미리 예측하거나 제한하기 어렵다.이는 동적 포트 할당이 각 태스크에 대해 랜덤한 호스트 포트를 자동으로 선택하기 때문이다. 그러나 이러한 동적 포트 할당을 사용하더라도, 보안을 유지하고 네트워크 액세스를 제어하는 데 여러 방법이 있다.
6-1. 보안 그룹
- AWS의 보안 그룹은 인스턴스에 대한 인바운드와 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 한다. ALB(Application Load Balancer)와 ECS(Elastic Container Service) 호스트를 동일한 VPC(Virtual Private Cloud) 내에 위치시키고, 각각에 대해 보안 그룹을 구성할 수 있다.
- ALB의 보안 그룹에서는 외부에서의 HTTP/HTTPS 트래픽을 허용하며, ECS 호스트의 보안 그룹에서는 ALB로부터의 트래픽만 허용하도록 설정할 수 있다. 이렇게 하면, 외부에서는 ALB를 통해서만 ECS 호스트에 접근할 수 있으며, 이는 네트워크 보안을 강화하는데 도움이 된다.
6-2.Private Subnet 구성
- AWS VPC 내에 Public Subnet과 Private Subnet을 구성할 수 있다. ECS 클러스터를 Private Subnet 내에 배치하고, ALB를 Public Subnet 내에 배치하면, 인터넷에서는 ALB만이 접근 가능하며, ALB는 트래픽을 Private Subnet의 ECS 호스트로 라우팅한다. 이 구성은 인터넷에서의 직접적인 ECS 호스트 접근을 차단하며, 트래픽의 보안을 높이는데 도움이 된다.
6-3. Service-Linked Role
- Service-Linked Role은 AWS 서비스 간의 상호 작용을 관리하는데 사용되는 IAM (Identity and Access Management) 역할이다. ECS는 Service-Linked Role을 사용하여 ALB와의 통신을 자동으로 구성하며, ALB에 타겟 그룹을 등록하고, 라우팅 설정을 업데이트하는 데 필요한 권한을 제공한다. 이 역할은 ECS와 ALB 간의 통신을 간소화하고, 서비스의 올바른 작동을 보장하는 데 도움이 된다.
이러한 방법들을 조합하여, 동적 포트 할당을 사용하면서도 네트워크 보안을 유지할 수 있다. ECS와 ALB의 구성을 올바르게 설정하고, 필요한 보안 그룹 및 네트워크 액세스 규칙을 적용하여 외부 액세스를 제한하면 됩니다.
여기까지가 ALB를 적용시킨 ECS의 동적 포트 할당관계 동작원리에 대한 내용이다.
ECS배포를 하고 대체 왜 스프링 프로젝트에 연결해준 8081포트를 DNS주소 뒤에 입력하고 request 요청을 보냈을때 응답이 오지 않는가에 대한 궁금증에 그 내용을 탐구하며 이 글을 작성하게 되었다.
2023.10.31 - [AWS] - AWS ECS와 ALB: 동적 포트 vs 명시적 포트 설정의 EC2 DNS 접속 이슈
2023.10.30 - [AWS] - AWS CI/CD: CodePipeline 배포 최종 점검 (8편)
반응형
'AWS > ECS, ECR' 카테고리의 다른 글
AWS Secrets & ECS SpringBoot 설정 (1): Secret 생성 (0) | 2023.11.03 |
---|---|
AWS ECS와 ALB: 동적 포트 vs 명시적 포트 설정의 EC2 DNS 접속 이슈 (1) | 2023.10.31 |
AWS - ALB(로드 밸런서)없이 ECS 생성하기 (1) | 2023.10.28 |
AWS EC2를 사용하는 ECS 클러스터 생성 및 사용 (1) | 2023.10.28 |
AWS ECS를 위한 ALB세팅: 실전 예제와 함께 (0) | 2023.10.27 |