📌 NAT(Network Address Translation) Gateway
프라이빗 서브넷(Private Subnet)에 있는 EC2 인스턴스들이 인터넷과 통신할 수 있도록 도와주는 AWS 서비스
❌ 하지만 외부에서 프라이빗 서브넷의 EC2 인스턴스로 직접 접속할 수는 없음
✅ 즉, 프라이빗 서브넷의 인스턴스가 인터넷에 요청을 보낼 수 있지만, 외부에서 직접 접근은 불가능함.
📌왜 NAT-GW가 필요할까?
프라이빗 서브넷에 있는 EC2 인스턴스는 퍼블릭 IP가 없어서 인터넷에 직접 접근할 수 없음
하지만 보안상의 이유로 웹 서버처럼 외부에서 접근할 필요가 없는 서버(예: 데이터베이스, 내부 API 서버 등)는 프라이빗 서브넷에 배치하는 게 좋아.
💡 문제
- 프라이빗 서브넷의 서버가 OS 업데이트를 해야 함.
- 외부 API나 S3 같은 AWS 서비스에 요청을 보내야 함.
- 하지만 인터넷에 직접 나갈 수 없음.
💡 해결 방법 → NAT Gateway 사용
- NAT Gateway를 퍼블릭 서브넷에 배치함.
- 프라이빗 서브넷의 인스턴스가 NAT Gateway를 통해 인터넷과 통신할 수 있음.
✅ 반드시 주의할점은 이 NAT-GW는 퍼블릭서브넷에 존재한다는점
과금이 많이 되니까 주의!! (시간당 기본요금 + 트래픽요금 + EIP요금)
📌 IGW랑 NAT-GW의 차이
# 사실 VPC에 존재하는 자원들이 통신이 되냐 안되냐의 차이는 기본적으로 공인아이피가 있냐 없냐로 볼 수 있음. 공인아이피를 달고있는 서버가 IGW를 next-hop으로 라우팅이 되어있다면(=퍼블릭서브넷에 있다면) 인바운드, 아웃바운드 다 된다. 마찬가지로 프라이빗 서브넷에 존재하는 서버가 외부로 통신이 안되는 이유는 공인아이피도 없고 라우팅도 안되어있기때문이다. 따라서 아웃바운드라도 가능하게 하기위해서 NAT-GW에 EIP를 붙여서 PAT를 해준다고 생각하면 좋다.
- VPC에 존재하는 자원들이 통신이 되냐 안되냐의 차이는 기본적으로 공인아이피가 있냐 없냐로 나뉨.
- 공인아이피를 달고 있는 서버가 IGW를 next-hop으로 라우팅이 되어있다면(= 퍼블릭서브넷에 있다면) 인바운드, 아웃바운드 다 됨. 마찬가지로 프라이빗 서브넷에 존재하는 서버가 외부로 통신이 안되는 이유는 공인아이피도 없고 라우팅도 안되어 있기 때문임. 따라서 아웃바운드라도 가능하게 하기위해서 NAT-GW에 *EIP를 붙여서 PAT을 해준다고 생각하면 좋음
*EIP란?
- AWS에서 제공하는 고정 퍼블릭 IP 주소
- 보통 EC2 인스턴스를 시작하면 동적 퍼블릭 IP가 할당되는데, EC2를 재부팅하면 IP 주소가 변경됩니다. 하지만, EIP를 사용하면 EC2가 재부팅되어도 동일한 IP 주소를 유지할 수 있음
❌ 반드시 주의할점❌
NAT-GW는 퍼블릭서브넷에 존재한다는점이다.
과금이 많이 되니까 주의하세요.(시간당기본요금 + 트래픽요금 + EIP요금)
실습)
pri-srv를 프라이빗 서브넷에 하나 만들고, bastion을 퍼블릭 서브넷에 하나 만든 다음 scp로 bastion 서버에 pem파일을 전송해보세요.
전송한 pem파일로 pri-srv에 접근해서, 패키지(nginx)가 다운로드되는지 확인해보세요.
이후 외부에서는 웹 접속이 안되지만, bastion에선 curl로 통신이 되는걸 확인해보세요.
정리)
*scp: ssh를 이용하여 파일을 원격 서버와 안전하게 전송하는 프로토콜
*pem: 암호화된 키와 인증서를 저장하는 파일 형식
bastion 생성
얘는 전에 만든 거 활용
pri-srv 생성
관리자 명령 프롬프트 들어가서 확인
root@ip-10-10-1-131:/home/ubuntu# chmod 400 aws8.pem
root@ip-10-10-1-131:/home/ubuntu# ssh -i aws8.pem ubuntu@10.10.2.173
# 생성한 서버로 ssh 접속
root@ip-10-10-2-173:~# apt install -y nginx
# 웹서버 설치. NAT-GW가 구성되어있기때문에 아웃바운드 트래픽이 가능하다.
# bastion에서도 접속이 잘 됨
실습)
172.16.0.0 /16 대역에 tom-vpc를 생성하여web-was-db 3 tier를 구성해보세요.
각 티어별로 서브넷을 생성하고 최소 두개의 가용영역(a,c)을 갖게 하세요.
web서버는 퍼블릭 서브넷, was-db는 프라이빗 서브넷. was는 톰캣, db는 rds를 쓰세요.
web은 tom-web.pem was는 tom-was.pem 키페어를 쓰도록하세요.
was 인스턴스는 web대역을 허용, db는 was 대역에서의 접속만 허용.
RDS의 포트는 33306으로 하세요.
정리)
public
tom-vpc 생성
pri
web, was 인스턴스 생성
db는 RDS
was는 톰캣, db는 rds 생성
key
web은 tom-web.pem 생성
was는 tom-was.pem 생성
allow
was 인스턴스는 web대역을 허용
db는 was 대역에서의 접속만 허용
tom-vpc 생성
IGW(Internet GateWay) - 외부랑 소통 가능하게 만들어주기
퍼블릭 서브넷 생성 - web
web- sub1
was- sub2
(캡처 못함)
- 프라이빗도 해주기
db- sub3
db 대역도 그렇게 만들어주기
라우팅 테이블
- tom-vpc-pub-sub1 연결해주기
- 서브넷을 만들면 이 라우팅테이블이 자동으로 선택되니까(비명시적,따로 라우팅테이블을 지정안하면) 이 기본라우팅테이블을 프라이빗서브넷을 위한 라우팅테이블로 이름을 붙여주자.
다른 가용 영역에 라우팅 연결
- 프라이빗 공간에 was랑 db 연결
web 인스턴스 생성
- 키 페어 생성
was 인스턴스
- web을 허용해줘야되기 때문에 사용자지정 a서브넷을 허용해줌
근데 80으로 설정해줘야됨 잘못 설정함. 수정해주고 싶을 때는 보안 그룹 클릭
RDS 포트 만들기
- DB 서브넷 그룹 생성 부터
- 데이터베이스
was인스턴스에 nat-gw해주기
tam-web 접속
- red hat은 ec2-user
tom-web
[ec2-user@ip-172-16-1-203 ~]$ sudo -i
[root@ip-172-16-1-203 ~]# yum install -y httpd
[root@ip-172-16-1-203 ~]# systemctl restart httpd
[root@ip-172-16-1-203 ~]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@ip-172-16-1-203 ~]# echo 'was-db connection success' > /var/www/html/index.html
[root@ip-172-16-1-203 ~]# curl 3.34.196.182
was-db connection success
[root@ip-172-16-1-203 ~]# vi tom-was.pem
[root@ip-172-16-1-203 ~]# chmod 600 tom-was.pem
[root@ip-172-16-1-203 ~]# ssh ubuntu@172.16.4.115 -i tom-was.pem
# was 프라이빗 ip
ubuntu@ip-172-16-4-115:~$ 잘 바뀐 걸 확인할 수 있음
ubuntu@ip-172-16-4-115:~$ sudo -i
root@ip-172-16-4-115:~# apt update
root@ip-172-16-4-115:~# apt install -y openjdk-11-jdk
root@ip-172-16-4-115:~# apt install -y unzip
root@ip-172-16-4-115:~# unzip apache-tomcat-10.1.35.zip > /dev/null
root@ip-172-16-4-115:~# mv apache-tomcat-10.1.35/ tomcat
root@ip-172-16-4-115:~# cd tomcat/
root@ip-172-16-4-115:~/tomcat# chmod 777 -R /root/tomcat
root@ip-172-16-4-115:~/tomcat# sh ./bin/startup.sh
'AWS' 카테고리의 다른 글
Route53 (4) | 2025.02.25 |
---|---|
Launch Template (시작 템플릿) / Auto-scaling (0) | 2025.02.24 |
커스텀 AMI(Amazon Machine Image)/ Auto-Scaling/ELB(Elastic Load Balancer)/ systemd (2) | 2025.02.22 |
AWS 기본(VPC,EC2,RDS) (4) | 2025.02.21 |
AWS 클라우드 기초 개념 (2) | 2024.12.14 |