AWS에서 VPC란?
서버를 구축하는데 있어서 중요한 것은 배포도 있지만 배포한 서비스를 외부 공격에 있어서 안전하게 설계하는 것도 중요하다. 그래서 핵심 시스템은 네트워크 망을 분리시켜서 외부에 노출되지 않도록 설계를 해야된다. AWS는 이러한 네트워크 망을 쉽게 분리시키고 관리할 수 있도록 인터페이스를 제공해준다.
AWS VPC 생성
1. VPC 설정
- 이름 태그(선택): VPC의 이름을 지정합니다.
- IPv4 CIDR 블록: 우리가 흔하게 알고있는 192.168.0.1형태의 IP를 어떤 방법으로 선택할 지 고르는 항목
- IPv4 CIDR 수동 입력: 10.0.0.0/24로 설정하게 되면 10.0.0.0 ~ 10.0.0.255까지 IP를 사용할 수 있다.
- IPAM 할당 IPv4 CIDR 블록: AWS에서 지원하는 자동화된 워크플로우를 사용
- IPv6 CIDR 블록: VPC에 대한 IPv6 CIDR 블록을 지정합니다.
- IPv6 CIDR 블록 없음
- IPAM 할당 IPv6 CIDR 블록: AWS에서 지원하는 자동화된 워크플로우를 사용
- 아마존에서 제공 IPv6 CIDR 블록: 아마존에서 사용자 대신 IPv6 CIDR 블록을 제공합니다.
- 내가 소유한 IPv6 CIDR: 내가 등록 해놓은 IPv6를 사용하는 것입니다.
- 테넌시:
- 기본값: 공유되는 하드웨어를 사용하여 VPC를 생성한다.
- 전용: 전용 하드웨어에서 실행되도록 설정한다.
이름 태그 | IPv4 CIDR 블록 | IPv6 CIDR 블록 | 테넌시 |
my-vpc | 10.0.0.0/16 | IPv6 CIDR 블록 설정 안함 | 기본값 |
설정한 VPC
2. VPC 생성
10.0.0.0 ~ 10.0.255.255의 아이피를 가진 VPC가 생성되었다.
AWS 서브넷 생성
VPC에서 지정한 10.0.0.0 ~ 10.0.255.255를 하나의 네트워크망으로 사용한다면 인터넷과 연결 시킬 네트워크망과 내부에서 접속이 가능한 네트워크망을 분리시키는 것이 쉽지 않기 때문에 서브넷을 통해 프라이빗한 망과 퍼블릭한 망을 분리시켜야한다.
1. VPC 설정
2. 새 서브넷 추가
가용 영역은 a 영역과 c 영역에 2개씩 설정하여 서브넷을 생성하도록 할 것이다. a, b가 아니라 a, c를 선택한 이유는 원래 기존의 a, b만 있었지만 이후에 c, d영역이 추가되게 되었다. 그래서 물리적으로 보자면 a,b가 하나로 되어있고 c,d가 하나로 이루어져 있다는 것을 알 수 있다. 그래서 a,b영역의 물리 하드웨어가 문제가 발생했을 때 서버 전체의 문제가 발생하는 상황이 생기게 된다. 그런 이유로 a,c를 가용영역으로 선택한 것이다.
※ 가용 영역: 리전이 논리적으로 분리된 4개의 섹션.
2.1. 추가해야되는 서브넷 리스트
서브넷 이름 | 가용 영역 | CIDR 블록 |
ecs-public-subnet-1 | ap-northeast-2a | 10.0.1.0/24 |
서브넷 이름 | 가용 영역 | CIDR 블록 |
ecs-private-subnet-1 | ap-northeast-2a | 10.0.2.0/24 |
서브넷 이름 | 가용 영역 | CIDR 블록 |
ecs-public-subnet-2 | ap-northeast-2c | 10.0.3.0/24 |
서브넷 이름 | 가용 영역 | CIDR 블록 |
ecs-public-subnet-2 | ap-northeast-2c | 10.0.4.0/24 |
3. 서브넷 생성 클릭
인터넷 게이트 웨이 연결
아래와 같은 네트워크 망을 구축했다. 이제 VPC에 있는 내부 서버가 외부 인터넷망과 통신할 수 있도록 인터넷 게이트 웨이를 연결해야한다.
1. 인터넷 게이트 웨이 생성
인터넷 게이트웨이의 이름을 지정하고 생성해준다.
2. 인터넷 게이트웨이 연결
인터넷 게이트 웨이를 클릭하고 작업을 누르게되면 아래와 같은 화면에서 VPC에 연결하기가 활성화 되어있다. 선택 후 연결하고자 VPC를 연결한다.
이제 아래와 같은 형태로 인터넷 게이트웨이가 연결된 것이다.
NAT 게이트 웨이 연결
NAT 게이트웨이는 NAT(네트워크 주소 변환) 서비스다. 프라이빗 서브넷의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만 외부 서비스에서 이러한 인스턴스와의 연결을 시작할 수 없도록 NAT 게이트웨이를 사용하여 망을 구성할 수 있다. NAT 게이트웨이 서비스는 유료이기 때문에 주의하여 사용하여야 한다.
1. NAT 게이트웨이 설정
NAT-Gateway의 이름을 지정하고 인터넷 게이트웨이과 연결 시키기 위해 NAT Gateway를 퍼블릭 서브넷에 지정 후 탄력적 IP를 생성 후 저장하도록 합니다.
이름 | 서브넷 | 연결유형 | 탄력적 IP 할당 |
my-nat-gateway | ecs-public-subnet-1 | 퍼블릭 | 탄력 IP 할당 |
NAT-Gateway를 생성하고 나면 이제 아래와 같은 구조의 아키텍처를 구성하게 되었다. 인터넷 연결 요청이 NAT 게이트 웨이와 인터넷 게이트 웨이로 전달되도록 라우팅 테이블을 구성해야된다.
라우팅 테이블 구성
1. 퍼블릭 라우팅 테이블 생성
라우팅 테이블탭으로 들어가서 라우팅 테이블 생성을 클릭한다. 이름과 VPC를 지정해주고 생성하면 라우팅 테이블이 생성되게 된다.
2. 라우팅 테이블 편집
라우팅 테이블을 클릭 후 편집하기를 누르게 되면 아래와 같은 인터페이스로 이동하게 된다. 인터넷 게이트웨이와 퍼블릭 서브넷을 연결할 라우팅 테이블이기 때문에 모든 IP를 허용하도록 한다.
대상 | 대상 |
0.0.0.0 | 인터넷 게이트 웨이 |
3. 퍼블릭 서브넷 추가
퍼블릭 라우팅 테이블을 클릭하여 서브넷 탭을 클릭하게 되면 서브넷 편집버튼이 있다. 해당 버튼을 클릭 후 퍼블릭 서브넷들을 추가한다.
4. 프라이빗 라우팅 테이블 생성
프라이빗 서브넷에서 NAT-Gateway로 네트워크 요청을 전달하기 위해 프라이버트 라우팅 테이블을 생성해줍니다.
5. 프라이빗 라우팅 테이블 편집
마찬가지로 모든 IP로 들어오는 요청을 nat-gateway로 전달이 될 수 있도록 변경한다.
6. 프라이빗 서브넷 추가
퍼블릭 서브넷 처럼 연결 시켜야 되는 프라이빗 서브넷을 추가한다.
이제 라우팅 테이블구성하게 되면서 요청이 들어오면 아래와 같은 형태로 인터넷 게이트 웨이와 NAT 게이트웨이에 전달된다.
보안 그룹 생성
VPC에서 내부에 있는 서버의 인스턴스의 보안을 위해서 인바운드 규칙, 아웃 바운드 규칙을 지정해줘야한다. ALB(로드 밸런서)에서 외부 HTTP로 송수신하기 위한 보안그룹과 ALB에서 서버 인스턴스로 전달하기 위한 보안그룹을 생성한다.
1. EC2<보안그룹<보안그룹 생성으로 이동
2. 로드밸런서 보안그룹 생성
VPC를 선택하고 인바운드 규칙은 외부와 HTTP 통신할 수 있도록 모든 IP를 허용하는 보안그룹을 생성합니다.
3. ALB의 인스턴스 보안그룹 생성
로드밸런서로 들어오는 HTTP 트래픽을 허용하도록 alb-sg를 설정한다.
ALB 생성
외부로 들어오는 트래픽을 분산하고 배포된 웹 서비스로 전달하기 위해 로드밸런서를 생성해야된다.
1. 로드밸런서 생성 페이지로 이동
EC2->로드밸런서->로드밸런서 생성으로 이동한다.
2. 어플리케이션 로드밸런서를 생성
'aws' 카테고리의 다른 글
AWS EC2 서버 장애 후기 (0) | 2023.06.24 |
---|---|
[AWS] ECR 시작하기 (0) | 2023.04.05 |
AWS EC2에서 웹드라이버 환경 설정. (0) | 2021.06.11 |
(AWS EC2)Mysql Server 설정 (0) | 2021.05.15 |
(Flask)AWS 원격접속 종료해도 홈페이지 접속유지 및 종료 (0) | 2021.05.01 |