AWS ECS(Fargate/EC2)를 Private Subnet에 배치할 때는 인터넷 게이트웨이와 NAT Gateway 없이도 ECR/ECS/CloudWatch Logs와 통신할 수 있다. 이때 핵심은 VPC Endpoint 구성을 통해 필요한 AWS 서비스에 Private 네트워크로 접근하는 것이다.
아키텍처 시나리오
- VPC Subnet
- Public Subnet ×2 → ALB 배치
- Private Subnet ×2 → ECS(Task/Service) 배치
- 서비스 노출
- Private ECS → Public ALB → Internet
- NAT Gateway
- 필수 아님.
- ECS가 ECR/Logs 등과 통신할 때는 VPC Endpoint로 충분.
- 다른 외부 인터넷 통신이 필요하다면 추가로 NAT GW 구성 가능.
ECS 배포 준비
1. 애플리케이션 도커라이징
- 로컬 또는 별도 EC2에서 Docker 빌드 환경 준비
Dockerfile작성 및 이미지 빌드- IAM Role 부여 (ECR Push 권한 포함)
2. ECR 생성
aws ecr create-repository --repository-name my-app
- ECR Repository 생성
- Private 여부 확인
- Scan on Push 활성화 권장
- 콘솔에서 View push commands 참고 → 빌드한 이미지를 ECR에 Push
ALB 생성
- ALB를 Public Subnet에 생성
- 기본 리스너(예: HTTP 80) 사용 가능
- Target Group(TG)은 ECS 서비스 생성 시 자동으로 매핑 가능
Task Definition 작성
- Task Role: ECS 컨테이너가 다른 AWS 서비스 접근 필요 시 사용 (예: SSM, DynamoDB 등)
- Task Execution Role: 필수, ECR에서 이미지 Pull 및 CloudWatch Logs 권한 필요
- Port Mapping: 실제 컨테이너 서비스 포트 정의
VPC Endpoint 구성
ECS를 Private Subnet에서 실행할 경우, 최소 4개의 VPC Endpoint가 필요하다.
- com.amazonaws.<region>.ecr.api (Interface)
- com.amazonaws.<region>.ecr.dkr (Interface)
- com.amazonaws.<region>.logs (Interface)
- com.amazonaws.<region>.s3 (Gateway)
S3 Gateway Endpoint는 Route Table에 연결해야 하며, 나머지 3개는 Private Subnet에 Interface Endpoint로 연결한다.
ECS Service 생성
- Launch Type 선택
- Fargate: 서버리스. 인프라 관리 불필요. Fargate Spot으로 비용 절감 가능.
- EC2: 클러스터 EC2 인스턴스를 직접 관리. 세밀한 커스터마이징 가능.
- 네트워크:
- Private Subnet 선택
- Public IP 비활성화
- 위에서 만든 VPC Endpoint와 같은 VPC 내 배치
- Load Balancer 연동:
- Service 생성 시 ALB와 연결, TG 자동 생성 가능
보안그룹 설계
1. 단일 SG 사용 (간단)
- 모든 리소스(ALB, ECS, VPC Endpoint)에 동일 SG 적용
- 필수 정책:
- Inbound: 소스 = ECS Subnet CIDR, Port 443
- Outbound: All destinations, Port 443
2. SG 분리 (권장)
- VPC Endpoint SG
- Inbound: Source = ECS SG, Port 443
- Outbound: All, Port 443
- ALB SG
- Inbound: Source = 0.0.0.0/0 (또는 특정 CIDR), Port 80/443
- Outbound: All, All
- ECS SG
- Inbound: Source = ALB SG, Port = 컨테이너 매핑 포트
- Outbound: All, Port 443
Fargate vs EC2 차이 정리
| 항목 | Fargate | EC2 |
|---|---|---|
| 인프라 관리 | 서버리스 (AWS 관리) | 사용자가 EC2 직접 관리 |
| 배포 단위 | Task 단위 | ECS Cluster 내 EC2 용량 기반 |
| 비용 | 초 단위 과금, Spot 지원 | EC2 인스턴스 과금 |
| 커스터마이징 | 제한적 | OS/커널/에이전트 커스터마이징 가능 |
| 네트워크 | ENI가 Task 단위로 붙음 | 인스턴스 단위로 ENI 관리 |
대부분의 경우 운영 편의성 때문에 Fargate를 먼저 고려하고, 세밀한 제어(예: GPU, 특수 AMI)가 필요할 때만 EC2 런치타입을 쓴다.
결론
- ECS를 Private Subnet에 배치할 때 NAT Gateway 없이도 VPC Endpoint를 활용해 안전하게 서비스 가능하다.
- Fargate는 서버리스로 운영이 간편하고, EC2는 더 많은 제어권을 제공한다.
- 보안그룹은 단일 구성도 가능하지만, 리소스별로 분리하는 것이 권장된다.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. 본문 및 이미지를 무단 복제·배포할 수 없습니다. 공유 시 반드시 원문 링크를 명시해 주세요.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.
🛠 마지막 수정일: 2025.09.29
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.