1. Introduction
AWS에서 EC2 인스턴스를 생성하여 SSH로 접속하고자할 때 VPC에 대한 필요한 리소스들을 정리해보자.
Terraform 기준으로 전체적으로 아래의 리소스들이 필요하다.
aws_vpc
: VPC 생성
aws_subnet
: VPC 내부의 서브넷 생성
aws_internet_gateway
: VPC를 인터넷에 연결하기 위한 인터넷 게이트웨이
aws_route_table
: VPC의 라우팅 테이블
aws_route
: 인터넷 게이트웨이의 라우팅 규칙 생성
aws_route_table_association
: 서브넷과 라우팅 테이블 연결
aws_security_group
: SSH를 허용하는 보안 그룹 생성
aws_security_group_rule
: 보안 그룹의 인바운드와 아웃바운드 규칙 생성
코드는 아래의 깃허브 링크에 있다.
dongminlee94/terraform-with-cloud/aws
한 가지씩 자세히 알아보자.
2. Resources of VPC
2.1 aws_vpc
- AWS의 가상 네트워크 환경을 제공함
- 이 환경 내에서만 리소스들이 상호작용을 하게됨
2.2 aws_subnet
- VPC 내의 특정 IP 주소 범위를 가진 세그먼트
- EC2, ECS, RDS 등 여러가지 리소스들이 서브넷 내에서 실행
2.3 aws_internet_gateway
- VPC와 인터넷 간의 연결을 가능하게 하는 게이트웨이
- EC2에 SSH 요청을 할 때 인터넷 게이트웨이를 통해 VPC 내부로 전달됨
2.4 aws_route_table & aws_route
- 트래픽의 라우팅 방향을 결정
aws_route
를 통해 라우트 테이블 내에 라우팅 규칙을 추가
- SSH 요청이 VPC 내부로 들어오면, 라우트 테이블이 어디로 트래픽을 전달해야 하는지 결정함
2.5 aws_route_table_association
- 특정 서브넷을 라우트 테이블에 연결
- SSH 요청이 특정 서브넷 내의 EC2 인스턴스로 전달되기 전에 해당 서브넷이 어떤 라우트 테이블과 연결되어 있는지 확인
2.6 aws_security_group & aws_security_group_rule
- EC2 인스턴스의 인바운드 및 아웃바운드 트래픽을 제어
- SSH 접속 요청이 들어오면 보안 그룹의 규칙들이 허용할지 말지를 결정함
3. SSH Access Flow of EC2
![](https://velog.velcdn.com/images/dongminlee94/post/88728b3f-695f-4cf1-b0a6-78805909cf85/image.jpg)
- 외부 SSH 클라이언트에서 요청이 발생
- 요청은 인터넷을 통해 AWS의 VPC으로 전달됨
- 요청이 VPC의 경계에 도달하면, 먼저 인터넷 게이트웨이를 통해 AWS 네트워크로 진입
- 인터넷 게이트웨이를 통과한 후, 해당 VPC의 라우트 테이블이 요청을 어떤 서브넷으로 라우팅할지 결정
- 라우트 테이블에 따라 트래픽이 지정된 서브넷 내의 EC2 인스턴스로 전달됨
- 서브넷에 도착한 트래픽은 EC2 인스턴스와 연결된 보안 그룹의 인바운드 규칙에 의해 검사됨
- 보안 그룹이 인바운드 SSH 트래픽을 허용한다면, SSH 세션은 성립되며 접속이 완료됨
4. Inbound Traffic vs Outbound Traffic
4.1 Inbound Traffic
인터넷에서 VPC 내의 EC2 인스턴스로 들어오는 트래픽을 가정
-
인터넷 게이트웨이:
- 외부 트래픽은 먼저 인터넷 게이트웨이를 통해 AWS VPC로 들어온다. 이는 VPC와 외부 인터넷 간의 주요 진입점 역할을 한다.
-
라우트 테이블
- 들어오는 트래픽은 라우트 테이블의 규칙을 따른다.
- 인바운드 트래픽에 대한 구체적인 라우팅 경로는 특정 서브넷의 라우팅 경로이다. (3번)
-
서브넷 연결:
- 특정 서브넷은 라우트 테이블에 연결되어 있다.
- 이 연결을 통해 해당 서브넷으로 들어오는 인바운드 트래픽이 처리된다.
- SSH 요청이 해당 서브넷에 연결된 EC2 인스턴스로 전달된다.
4.2 Outbound Traffic
VPC 내의 EC2 인스턴스에서 인터넷으로 나가는 트래픽을 가정
-
출발지 (EC2 인스턴스):
- 트래픽은 VPC 내의 EC2 인스턴스에서 시작한다.
-
서브넷 연결:
- EC2 인스턴스가 위치한 서브넷은 특정 라우트 테이블에 연결되어 있다.
-
라우트 테이블 및 라우트 규칙:
- 나가는 트래픽은 라우트 테이블의 규칙을 따른다.
- 라우트는 0.0.0.0/0과 같은 목적지에 대한 트래픽을 특정 대상(e.g., 인터넷 게이트웨이)으로 라우팅하는 규칙을 정의한다.
-
인터넷 게이트웨이 (aws_internet_gateway):
- 라우트 규칙에 따라 트래픽은 인터넷 게이트웨이를 통해 외부 인터넷으로 라우팅된다.