오프닝
VPC가 왜 중요한가?
VPC는 리소스를 위치시킬 수 있는 기본적인 컴포넌트이다.
VPC는 클라우드 네트워크 내에 나만의 네트워크를 구성하고 가상의 데이터 센터를 사용할 수 있도록 설정할 수 있다.
옛날에는 처음 가입하고 나서 EC2를 만들면 랜덤 AZ에 EC2가 생성되는 EC2 Classic 방식을 사용했다. 2013년부터는 Default VPC에 첫 EC2가 만들어진다. 왜 그랬냐면 앞으로 설명할 것들 때문에..
VPC 내부 구성 살펴보기
- VPC 내부의 엔드 포인트들은 private IP를 가지며, 각 EC2가 종료되기 전까지는 바뀌지 않는다.
- 작은 단위인 서브넷 단위로 공간을 분리해서 가상머신을 위치시킨다.
- 보안이 중요한 DB는 인터넷으로 나가는 길목이 아닌 쪽의 서브넷에 위치시켜서 원하는 레벨의 보안을 적용할 수 있다.
인터넷에 연결된 VPC 설정
1. IP 주소 범위 선택
CIDR 방식을 사용한다.
- 서브넷 마스크로 서브넷 식별
- 나머지 비트로 서브넷 내부의 호스트 식별
권장 방식
- RFC 1918 표준 : 연결할 수 있는 다른 네트워크와 겹치는 범위를 피하기 위함.
- /16 : 큰 VPC를 두어서 많은 워크로드를 운영
2. 가용 영역 별 서브넷 설정
- 리전 안에 여러개의 AZ가 있다. 한국 리전의 경우 ap-northeast-2a와 ap-northeast-2c가 있다.
- VPC는 멀티 리전으로 구성 가능하다.
- 반면 서브넷은 AZ 내에서 구성 가능하다.
- 그림에서 VPC와 서브넷의 구성을 보면 VPC는 172.31.0.0/16이라는 큰 네트워크를 가지고, 그 안에서 서브넷이 겹치지 않도록 주소 범위를 나눠 갖는다.
VPC 서브넷 권고사항
- VPC : /16 (64K 개)
- Subnets : /24 (251개) 첫 주소는 네트워크 주소, 마지막 주소는 브로드 캐스트 주소, 두번째부터 네번째까지 AWS가 관리 목적으로 사용하므로 호스트에 할당 불가
- AZ 하나에 Subnet 하나 권장
3. 인터넷으로 향하는 경로 만들기
라우트 테이블
- 패킷이 이동하는 규칙을 포함한다.
- VPC에 기본 라우트 테이블이 존재하나, 서브넷에 다른 라우트 테이블을 할당할 수 있다.
- 어떤 라우트 테이블을 할당하느냐에 따라 어떤 서브넷은 인터넷과 통신할 수 있고, 어떤 서브넷은 그럴 수 없다.
- 기본 라우트 테이블 : Destination이 VPC 전체 대역폭이고, Target이 local이므로 VPC 안에서만 패킷이 돈다
인터넷 게이트웨이
- 인터넷으로 나가는 컴포넌트를 VPC에 연결하면 VPC 라우트 테이블에 다음과 같은 규칙이 추가된다.
- Any where로 향하는 패킷은 모두 igw로 보낸다.
4. VPC의 트래픽 설정 (보안 정책)
Network ACLs : Stateless Firewalls
- 서브넷 단위로 적용
- Stateless기 때문에 Inbound와 Outbound 규칙이 항상 짝을 이루어야 한다.
Security Groups : Stateful Firewalls
- 인스턴스 단위로 적용
- Stateful이므로 Inbound 규칙만 설정하면 된다. Inbound를 통과한 트래픽을 기억해두었다가 Outbound에서 허용한다.
- Web Server의 SG는 80포트를 Any Where로 열어두고, Backend Server의 SG는 Web Server의 SG Id로 설정해서 프론트 엔드에서 오는 트래픽을 허용한다.
- 최소 권한 원칙을 준수해야한다. 필요하지 않은 규칙은 만들지 않는다.
- VPC는 ingress, egress에 대한 Security Group을 생성할 수 있다.
VPC 연결 옵션
인터넷 액세스 제한 : NAT GW
서브넷 별로 다른 라우팅 규칙
- 프론트엔드 서버 : IGW와 연결 (public subnet)
- 백엔드 서버 : 프론트엔드 서버만 연결 (private subnet)
NAT Gateway
- 아웃바운드 전용 인터넷 허용
- private 서브넷에 NAT Gateway를 연결하면 서브넷에서는 인터넷으로 요청을 보낼 수 있지만, 인터넷에서는 서브넷으로 요청을 보낼 수 없다. public IP가 없기 때문!
- NAT은 서버에서 인터넷으로 요청을 보내고, 응답을 해당 서버에 돌려준다.
- private 서브넷 라우팅 테이블에 Target이 nat이고 Dest이 Any where인 규칙을 추가한다.
다른 VPC와 연결 : VPC Peering
- 완전히 분리된 네트워크 사용하여 서비스 모듈을 분리할 수 있다. 마치 데이터 센터를 private 하게 연결한 것처럼
- 공통 VPC : 인증, 디렉터리, 모니터링, 로깅, 원격 관리, 스캐닝 등
- VPC Security Group : 다른 VCP SG를 참조해서 보안 규칙을 강화할 수 있다.
- 제약 사항 : Transit VPC를 지원하지 않는다. 즉 말단에 있는 C와 D는 서로 연결되지 않는다.
경로 생성 시 피어링 게이트웨이(pcx)를 만들어 연결한다.
회사 네트워크에 연결 : VPN과 DX
사내의 중요한 데이터를 AWS로 마이그레이션할 때 인터넷이 아닌 Private network를 통해 전송하는 방법
- VPN : 인터넷을 통한 IPSec 터널을 연결
- Direct Connect : private 망을 직접 설치해 연결
- 보안을 위해 둘다 사용
VPC 및 다른 AWS 서비스
VPC에 위치하는 AWS 서비스
- RDS
- EC2
- Lambda
- RedShift
- ElasticCache
- ElasticSearch
VPC EndPoint for Amazon S3
- S3는 publicly accessible한 서비스
- VPC 내의 인스턴스가 S3에 요청을 보내려면 VPC 밖으로 나와야함
- VPC EndPoint를 사용하면 private 연결을 유지할 수 있다
- 특정 S3 버킷만 허용하거나 VPC EndPoint를 통한 액세스만 허용하도록 설정할 수 있다
'Cloud > AWS' 카테고리의 다른 글
EC2 생성하고 Spring Boot 프로젝트 도커로 배포하기 (0) | 2023.10.29 |
---|---|
[AWS Session 기록] 12가지 디자인 패턴으로 알아보는 클라우드 네이티브 마이크로서비스 아키텍처 - 김형일, AWS / 박진현, AWS :: AWS Summit Seoul 2023 (0) | 2023.10.27 |
[콘솔과 테라폼 구현] 사용자 > 1000 : 서버와 RDS 이중화, ALB, Read Replica 추가 (1) | 2023.10.22 |
[콘솔과 테라폼 구현] 첫 사용자 1명 : 단일 EC2 + EIP (0) | 2023.10.22 |
테라폼 실습 : 천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 (1) | 2023.10.22 |