AWS ALB + Private EC2 인프라 구성 실습

y001·2025년 3월 23일
0
post-thumbnail

이번 실습에서는 프라이빗 서브넷을 활용한 EC2 접근 제한ALB(Application Load Balancer)를 통한 트래픽 분산을 직접 확인한다.
이를 통해 보안성을 강화하면서도 고가용성을 유지하는 방법을 경험할 수 있다.


1. 환경 구성하기

전체 인프라 구성도

VPC, 퍼블릭 서브넷, 프라이빗 서브넷, NAT 게이트웨이, 인터넷 게이트웨이, ALB, 프라이빗 EC2 인스턴스 구성 및 테스트 완료

VPC 및 네트워크 설정

VPC 생성

  • 이름: MyVPC02
  • CIDR: 10.0.0.0/16
  • DNS 해석 및 DNS 호스트 이름 활성화
    • 퍼블릭 IP 부여 시 DNS 이름 자동 부여
    • 처음부터 넉넉한 IP 대역을 설정하는 것이 중요하다.

인터넷 게이트웨이 설정

  • 이름: MyIGW
  • VPC 연결: MyVPC02
  • VPC가 외부 인터넷과 연결될 수 있도록 필수 설정

퍼블릭 서브넷 및 라우팅 테이블 설정

  • MyPublicSubnet01 (10.0.1.0/24, ap-northeast-2a)

  • MyPublicSubnet02 (10.0.2.0/24, ap-northeast-2c)

  • 퍼블릭 IPv4 자동 할당 활성화 (ALB 및 NAT 게이트웨이 배포에 필요)

  • MyPublicRouting

    • 경로: 0.0.0.0/0 → MyIGW
    • 서브넷 연결: MyPublicSubnet01, MyPublicSubnet02

NAT 게이트웨이 및 프라이빗 서브넷 설정

  • MyNatGW01 (MyPublicSubnet01, 탄력적 IP 할당)

  • MyNatGW02 (MyPublicSubnet02, 탄력적 IP 할당)

    • 프라이빗 서브넷의 인터넷 접근을 위한 구성
  • MyPrivateSubnet01 (CIDR: 10.0.100.0/24, ap-northeast-2a)

  • MyPrivateSubnet02 (CIDR: 10.0.200.0/24, ap-northeast-2c)

    • 내부 애플리케이션 및 DB 서버 배치
  • MyPrivateRouting

    • 경로: 0.0.0.0/0 → MyNatGW01, MyNatGW02
    • 서브넷 연결: MyPrivateSubnet01, MyPrivateSubnet02

보안 그룹 설정

  • MyPublicSecugroup (퍼블릭 EC2 및 ALB에 적용)

    • HTTP(80), HTTPS(443), SSH(22), ICMP 허용
  • MyPrivateSecugroup (프라이빗 EC2에 적용)

    • HTTP(80), HTTPS(443)만 허용 (외부 직접 접속 차단)
    • VPC 내부에서만 접근 가능

EC2 인스턴스 생성

  • 퍼블릭 EC2 (MyWeb1) (ALB 관리 및 Bastion 용도)

    • VPC: MyVPC02
    • 서브넷: MyPublicSubnet01
    • 보안 그룹: MyPublicSecugroup
    • 퍼블릭 IP 활성화
  • 프라이빗 EC2 (MyWeb11, MyWeb21) (실제 트래픽 처리 서버)

    • VPC: MyVPC02
    • 서브넷: MyPrivateSubnet01, MyPrivateSubnet02
    • 보안 그룹: MyPrivateSecugroup
    • 퍼블릭 IP 없음

EC2 인스턴스 사용자 데이터 스크립트

#!/bin/bash
hostnamectl --static set-hostname $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
echo "toor1234." | passwd --stdin root
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
systemctl restart sshd
yum install -y httpd
echo "<h1>$(hostname) test web page</h1>" > /var/www/html/index.html
systemctl enable --now httpd.service
  • MyWeb11과 MyWeb21에서 동일한 웹페이지 제공
  • ALB를 통해 접속 시 라운드로빈 방식으로 분배되는지 확인 가능

2. 프라이빗 서브넷과 보안 그룹을 통해 EC2 인스턴스 접근을 제한할 수 있다.

✅ 핵심 개념:

  • 프라이빗 서브넷에 있는 EC2는 퍼블릭 인터넷에 직접 노출되지 않는다.
  • 퍼블릭 서브넷의 Bastion Host 또는 ALB를 통해서만 접근 가능

테스트 1: 퍼블릭 네트워크에서 직접 접근 차단 확인

ssh ec2-user@프라이빗-인스턴스-퍼블릭-IP
  • ❌ 실패 (보안 그룹 및 서브넷 설정으로 인해 직접 접근 불가)

테스트 2: 퍼블릭 EC2에서 프라이빗 EC2로 접근 가능 확인

ssh ec2-user@10.0.100.XX  # MyWeb11 접속
ssh ec2-user@10.0.200.XX  # MyWeb21 접속
  • ✅ 성공 (같은 VPC 내에서는 접근 가능)

3. ALB를 사용하면 트래픽을 여러 EC2 인스턴스에 자동으로 분산시킬 수 있다.

✅ 핵심 개념:

  • ALB는 하나의 엔드포인트로 외부 트래픽을 받아 프라이빗 EC2 인스턴스에 자동으로 분산한다.
  • 인스턴스가 추가되거나 제거되더라도 ALB가 자동으로 조정됨.

ALB 구성

  • ALB (MyALB): 퍼블릭 서브넷에 배포
  • 대상 그룹 (MyELBTargetGroup): MyWeb11, MyWeb21 등록
  • 라우팅 방식: 라운드로빈
  • 헬스체크: 80번 포트로 HTTP 체크

ALB 테스트

  1. ALB DNS로 웹페이지 접속

    curl MyALB-123456789.ap-northeast-2.elb.amazonaws.com
    • 결과: MyWeb11, MyWeb21이 번갈아 출력됨
  2. 브라우저에서 확인


결론

✔️ 프라이빗 서브넷을 활용하면 외부에서 직접 접근할 수 없는 보안 환경을 구성할 수 있다.
✔️ ALB를 활용하면 트래픽을 여러 서버로 분산시켜, 부하 분산 및 고가용성을 확보할 수 있다.
✔️ Bastion Host(퍼블릭 EC2)를 통해 내부 프라이빗 서버에 접근하는 방식으로 운영 환경에서도 보안성을 강화할 수 있다.

0개의 댓글