전체 인프라 구성도
VPC, 퍼블릭 서브넷, 프라이빗 서브넷, NAT 게이트웨이, 인터넷 게이트웨이, 퍼블릭 및 프라이빗 EC2 인스턴스 구성
1. 환경 구성하기
VPC 생성
- 이름: MyVPC01
- CIDR: 10.0.0.0/16
- DNS 해석 및 DNS 호스트 이름 활성화
- VPC는 한 번 잘못 설계하면 수정이 어렵기 때문에 처음부터 충분히 넓게 잡아야 한다.
인터넷 게이트웨이 생성 및 연결
- 이름: MyIGW
- MyVPC01에 연결
- 인터넷과의 연결을 위한 필수 요소
퍼블릭 서브넷 생성
- MyPublicSubnet (10.0.1.0/24, ap-northeast-2a)
- 퍼블릭 IPv4 자동 할당 활성화
퍼블릭 라우팅 테이블 생성 및 연결
- 이름: MyPublicRouting
- 라우팅 경로:
- 10.0.0.0/16 → local
- 0.0.0.0/0 → MyIGW
- MyPublicSubnet에 연결
퍼블릭 보안 그룹 생성 (MyPublicSecugroup)
- 인바운드: HTTP(80), HTTPS(443), SSH(22), ICMP
- 태그: Name = MyPublicSecugroup
퍼블릭 EC2 인스턴스 생성 (MyWeb1)
- Amazon Linux 2023, t3.micro
- 퍼블릭 서브넷 선택 및 퍼블릭 IP 자동 할당
- 보안 그룹: MyPublicSecugroup
- 사용자 데이터 스크립트:
#!/bin/bash
hostnamectl --static set-hostname MyWeb1
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><p style=\"color:red\">MyWeb1 test web page</p></h1>" > /var/www/html/index.html
systemctl enable --now httpd.service
EC2 접속 및 웹 서버 확인
2. EC2 인스턴스를 프라이빗 서브넷에 배치하면 외부 접근을 막을 수 있다.
NAT 게이트웨이 생성 (MyNatGW)
- 퍼블릭 서브넷에 생성
- 탄력적 IP 연결
- 외부 요청은 가능하지만 외부에서 직접 접근은 불가능하게 만드는 핵심 요소
프라이빗 서브넷 생성
- MyPrivateSubnet (10.0.100.0/24, ap-northeast-2a)
프라이빗 라우팅 테이블 생성 및 연결
- 이름: MyPrivateRouting
- 라우팅 경로:
- 10.0.0.0/16 → local
- 0.0.0.0/0 → MyNatGW
- MyPrivateSubnet에 연결
프라이빗 보안 그룹 생성 (MyPrivateSecugroup)
- 인바운드: HTTP, HTTPS, SSH, ICMP
- 추천: 소스 IP를 VPC 내부 대역으로 제한
프라이빗 EC2 인스턴스 생성 (MyWeb11)
- Amazon Linux 2023, t3.micro
- MyPrivateSubnet에 배포 (퍼블릭 IP 없음)
- 보안 그룹: MyPrivateSecugroup
- 사용자 데이터 스크립트:
#!/bin/bash
hostnamectl --static set-hostname MyWeb11
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><p style='color:blue'>MyWeb11 test web page</p></h1>" > /var/www/html/index.html
systemctl enable --now httpd.service
public ec2(MyWeb1)에서 SSH, ping, curl 테스트
👉 이렇게 구성하면 외부에서는 접근할 수 없고 내부에서만 관리가 가능하다.
보안을 강화하는 가장 기본적인 설계 패턴이다.
3. NAT Gateway를 사용하면 프라이빗 EC2 인스턴스에서 인터넷을 사용할 수 있다.
- 프라이빗 인스턴스는 인터넷과 직접 연결되지 않는다.
- 하지만
yum update나 패키지 설치, 외부 API 호출 등 외부 요청은 가능해야 한다.
- 이때 NAT Gateway를 통해 프라이빗 EC2 인스턴스는 인터넷으로 outbound 요청을 할 수 있다.
- 외부에서는 절대 그 인스턴스에 직접 들어올 수 없으면서도, 내부에서는 필요한 작업을 자유롭게 할 수 있는 구조이다.