인터넷 게이트웨이 + NAT 게이트웨이 생성 및 라우트 테이블 설정
- 아키텍처 개요 (링크)
- CodeBuild + ECR 생성 (링크)
- VPC + 서브넷 생성 (링크)
- 인터넷 게이트웨이 + NAT 게이트웨이 생성 및 라우트 테이블 설정 (현재 글)
- 로드밸런서(ALB) + 보안 그룹(Security Group) + 대상 그룹(Target Group) 생성 (링크)
- ECS 클러스터 생성 + 태스크 정의 + 서비스 생성 (링크)
- S3 버킷 생성 + CodePipeline 설정 및 최종 배포 (링크)
인터넷 게이트웨이 생성
인터넷 게이트웨이의 이름 태그를 설정해 준 후 생성하였다. 인터넷 게이트웨이가 생성되면 VPC 연결을 통해 사용하고자 하는 VPC를 연결시켜 주면 끝난다.
인터넷 게이트웨이(IGW)란?
인터넷 게이트웨이는 VPC와 인터넷 간의 논리적인 연결이다. 간략하게 VPC에서 인터넷으로 나가는 관문이라고 할 수 있다. 이러한 IGW는 VPC 당 1개만 연결 가능하다.
IGW를 통해 외부 인터넷으로 통신할 수 있는 대상은 퍼블릭 IP를 사용하는 퍼블릭 서브넷 내의 자원 뿐이다. 이러한 퍼블릭 서브넷은 자신의 라우트 테이블에 외부 인터넷으로 나가는 타겟을 인터넷 게이트웨이로 지정해주어야 한다.
퍼블릭 서브넷의 리소스(nat gateway 또는 인스턴스)가 외부 인터넷과 통신하기 위하여 인터넷 게이트웨이가 관문이 되어 이를 통해 통신이 된다. 인터넷 게이트웨이는 양방향으로 연결을 지원하기 때문에 외부 인터넷에서 퍼블릭 서브넷의 퍼블릭 IP로도 정상적인 통신이 가능하다. 퍼블릭 서브넷 안에서 통신 흐름은 아래와 같이 정리할 수 있다.
- 퍼블릭 서브넷의 리소스(nat gateway 또는 인스턴스)가 외부 인터넷 구간과 통신하기 위해서 데이터를 전송한다.
- 해당 데이터는 라우팅 테이블을 통해 경로를 확인한다.
- 퍼블릭 서브넷의 라우팅 테이블에는 기본적으로 0.0.0.0/0에 대해 인터넷 게이트웨이로 가는 경로 설정이 되어있음
- 라우팅 테이블은 데이터를 인터넷 게이트웨이로 전달하고, 인터넷 게이트웨이를 통해 데이터는 외부 인터넷으로 전송된다.
- 외부 사용자로부터 퍼블릭 서브넷의 리소스에 대한 요청이 들어오는 경우, 인터넷 게이트웨이를 통해 해당 요청이 전달된다.
- 리소스의 퍼블릭 IP 또는 Elastic IP가 대상이 되며, 요청이 라우팅 테이블과 보안 그룹의 규칙에 따라 허용되면 정상적으로 통신이 이루어진다.
NAT 게이트웨이 및 라우트 테이블 생성
총 2가지의 NAT 게이트웨이를 생성해 주었다.
- 퍼블릭 서브넷 하나에 생성 (첫 번째)
- 퍼블릭 서브넷 하나에 생성 (두 번째)
총 3가지의 라우팅 테이블을 생성해 주었다.
- 퍼블릭 서브넷 2개를 배치할 라우팅 테이블
- 프라이빗 서브넷 1개를 배치할 라우팅 테이블 (첫 번째)
- 프라이빗 서브넷 1개를 배치할 라우팅 테이블 (두 번째)
생성하는 사진은 포함시키지 못하였다.. ⇒ 급하게 오류 찾으면서 하느라ㅠㅠ
1. Route - 퍼블릭 서브넷 2개를 배치할 라우팅 테이블
기본적으로 생성되었던 라우팅 테이블에 인터넷 게이트웨이를 연결해주었다.
위의 사진이 연결된 상태
위와 같이 서브넷 연결을 통하여 퍼블릭 서브넷 2개를 배치해 주었다.
2. NAT - 퍼블릭 서브넷 하나에 생성 (첫 번째)
scp-subnet-public-01이라는 서브넷에 nat gateway를 설정해 주었다.
3. Route - 프라이빗 서브넷 1개를 배치할 라우팅 테이블 (첫 번째)
해당 nat gateway를 첫 번째 라우팅 테이블을 만들어 배치해 주었고,
서브넷은 scp-subnet-private-01을 연결해 주었다.
4. NAT - 퍼블릭 서브넷 하나에 생성 (두 번째)
scp-subnet-public-02이라는 서브넷에 nat gateway를 설정해 주었다.
5. Route - 프라이빗 서브넷 1개를 배치할 라우팅 테이블 (두 번째)
해당 nat gateway를 두 번째 라우팅 테이블을 만들어 배치해 주었고,
서브넷은 scp-subnet-private-02을 연결해 주었다.
NAT Gateway란?
NAT Gateway도 인터넷 게이트웨이처럼 외부 인터넷과 연결하는 관문 역할을 하고 있다. NAT은 Network Address Translation의 약자로 네트워크 주소 즉, IP 주소를 변환해 주는 기술이다.
인터넷은 공공 네트워크 구간으로 퍼블릭 IP를 통해 통신이 이루어진다. 그러므로 프라이빗 IP로는 인터넷에 접근할 수 없는데, 이때 NAT Gateway가 프라이빗 IP로 변환하여 통신을 도울 수 있다.
인터넷 게이트웨이는 퍼블릭 서브넷의 외부 인터넷 구간을 연결하는 반면에 NAT Gateway는 프라이빗 서브넷 내에 리소스가 가지고 있는 프라이빗 IP를 퍼블릭 IP로 변환하여 외부 인터넷 구강에 연결할 수 있다. 여기서 NAT Gateway는 한쪽 방향으로만 동작하기 때문에 프라이빗 서브넷에서 외부 인터넷으로 통신은 가능하지만, 반대로 외부 인터넷에서 프라이빗 서브넷으로 통신은 불가능하다.
⇒ 이러한 구조를 갖는 이유는 외부에서의 접근은 막고, 서브넷 내에 배치된 자원이 외부에서 패키지를 설치받는 경우에 인터넷에 접근이 필요하기 때문이다.
프라이빗 서브넷의 통신 흐름은 다음과 같이 정리할 수 있다.
- 프라이빗 서브넷의 Fargate 컨테이너(또는 인스턴스)가 외부 인터넷 구간과 통신하기 위해 데이터를 전송한다. (프라이빗 IP 사용)
- 해당 데이터는 프라이빗 라우팅 테이블을 참고하여 NAT Gateway로 향하는 라우트 경로를 확인한다.
- 가상 라우터는 데이터를 NAT Gateway로 전달하고, NAT Gateway에서는 Fargate 컨테이너의 프라이빗 IP를 퍼블릭 IP로 변환한다.
- NAT Gateway는 데이터를 수신한 후 소스 IP를 Fargate 컨테이너의 프라이빗 IP에서 NAT Gateway에 할당된 퍼블릭 IP로 변환함
- NAT Gateway는 인터넷 구간을 넘어가기 위해 데이터를 인터넷 게이트웨이를 통해 외부로 전송된다.
- 변환된 퍼블릭 IP를 통해 데이터는 인터넷 게이트웨이를 거쳐 외부 인터넷으로 전송됨
- 외부 사용자는 NAT Gateway에서의 변환된 퍼블릭 IP를 통해 데이터를 수신한다.
- 외부 서버는 NAT Gateway의 퍼블릭 IP를 소스로 응답을 보내며, NAT Gateway는 이 응답을 수신함
- NAT Gateway는 응답 데이터를 수신하고, 이를 Fargate 컨테이너(또는 인스턴스)의 프라이빗 IP로 변환하여 전달한다.
가상 라우터와 라우팅 테이블이란?
VPC를 생성하면 자동으로 가상 라우터가 생성된다. 이 가상 라우터는 라우팅 테이블을 가지고 있는데, 라우팅 테이블은 트래픽의 전송 방향을 결정하는 라우트와 관련된 규칙을 담고 있는 테이블이며, 목적지를 향한 최적의 경로로 데이터 패킷을 전송하기 위한 모든 정보를 담고 있다.
가상 라우터는 최초에 기본 라우팅 테이블을 보유하고 있으며 로컬 네트워크에 대한 라우트 경로만 설정되어 있다. 여기서 로컬 네트워크는 VPC의 자체 IP 대역으로 VPC 내에 생성된 서브넷은 라우팅 테이블의 로컬 네트워크에 의해 통신이 가능하다.
아래의 사진과 같이 가상 라우터에서는 서브넷별로 라우팅 테이블을 생성하고 매핑하여 서브넷 당 개별적인 라우팅 테이블을 가질 수 있다.
- 퍼블릭 서브넷 매핑 라우트 테이블
- 퍼블릭 서브넷을 인터넷과 직접적으로 연결될 수 있도록 인터넷 게이트웨이에 대한 라우트를 라우팅 테이블에 포함시키게 된다. 라우트 테이블의 기본 경로는 기본적으로 같은 VPC 내 서브넷 간 트래픽의 경우 라우팅 테이블에 자동으로 설정되고, 0.0.0.0/0(모든 트래픽)을 인터넷 게이트웨이로 라우팅하게 된다. 인터넷 게이트웨이는 퍼블릭 서브넷이 인터넷과 연결될 수 있도록 하며, 퍼블릭 IP 주소(또는 탄력적 IP)를 가진 리소스에 아웃바운드 및 인바운드 인터넷 트래픽을 처리한다.
CIDR | Route Targat |
10.0.0.0/16 | local |
0.0.0.0/0 | igw-xxxx (인터넷 게이트웨이) |
- 프라이빗 서브넷 매핑 라우트 테이블
- 프라이빗 서브넷은 인터넷과 직접적으로 연결되지 않음으로 인터넷과 격리된 상태로 리소스 보호가 가능하다. 라우트 테이블의 기본 경로는 VPC 내부의 트래픽의 경우 로컬로 라우팅되며, 외부 트래픽은 NAT 게이트웨이 또는 NAT 인스턴스를 통해 라우팅된다. NAT은 프라이빗 서브넷의 리소스가 아웃바운드 트래픽을 통해 인터넷에 접근하도록 허용하지만, 인터넷에서 직접 접근하지는 못하게 한다. NAT 게이트웨이는 프라이빗 서브넷의 리소스가 소프트웨어 업데이트, API 호출 등 외부 트래픽이 필요한 경우를 지원하며, 때문에 퍼블릭 서브넷에 배치되어 인터넷 게이트웨이를 통해 연결된다.
CIDR | Route Target |
10.0.0.0/16 | local |
0.0.0.0/0 | nat-xxxx |
여기서 계속 언급되는 라우트 테이블과 라우팅 테이블은 같은 의미를 뜻하는 언어이다. 단순히 AWS와 같은 클라우드 환경에서 라우팅 테이블을 라우트 테이블이라 칭하는 경우가 있기에 사용되는 것이다. ⇒ 결국 같은 말임
참고 문헌
https://velog.io/@yenicall/AWS-VPC의-개념
https://aws-hyoh.tistory.com/49
https://inpa.tistory.com/entry/AWS-📚-VPC-개념-사용-보안-설정-Security-Group-NACL
https://uchupura.tistory.com/48
'Project > Cloud' 카테고리의 다른 글
파이프라인 Security에 집중한 DevOps 구현 - ECS 클러스터 생성 + 태스크 정의 + 서비스 생성 (6) (0) | 2025.01.27 |
---|---|
파이프라인 Security에 집중한 DevOps 구현 - 로드밸런서(ALB) + 보안 그룹(Security Group) + 대상 그룹(Target Group) 생성 (5) (0) | 2025.01.27 |
파이프라인 Security에 집중한 DevOps 구현 - VPC + 서브넷 생성 (3) (1) | 2025.01.27 |
파이프라인 Security에 집중한 DevOps 구현 - CodeBuild + ECR 생성 (2) (0) | 2025.01.27 |
파이프라인 Security에 집중한 DevOps 구현 - 아키텍처 개요 (1) (1) | 2025.01.26 |