AWS ECS Private 배포와 VPC Endpoint 활용 정리

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가 필요하다.

  1. com.amazonaws.<region>.ecr.api (Interface)
  2. com.amazonaws.<region>.ecr.dkr (Interface)
  3. com.amazonaws.<region>.logs (Interface)
  4. 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 차이 정리

항목FargateEC2
인프라 관리서버리스 (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.09.29