사설망과 CIDR
사설망(Private Network)
- 한정된 IP 주소를 최대한 활용하기 위해 IP 주소를 분할하고자 만든 개념
- IPv4 기준으로 최대 IP 갯수는 43억개(4,294,967,296)
- 사설망 내부에는 외부 인터넷 망으로 통신이 불가능한 사설 IP로 구성
- 외부로 통신할 때는 통신 가능한 공인 IP로 나누어 사용
- 보통 하나의 망에는 사설 IP를 부여 받은 기기들과 NAT 기능을 갖춘 Gateway로 구성
NAT(Network Address Translation)
사설 IP가 공용 IP로 통신할 수 있도록 주소를 변환해 주는 방법
Dynamic NAT
- 1개의 사설 IP를 가용 가능한 공인 IP로 연결
- 공인 IP 그룹(NAT Pool)에서 현재 사용 가능한 IP를 가져와서 연결

Static NAT
- 하나의 사설 IP를 고정된 하나의 공인 IP로 연결
- AWS Internet Gateway가 사용하는 방식

PAT(Port Address Translation)
- 많은 사설 IP를 하나의 공인 IP로 연결
- NAT Gateway / NAT Instance가 사용하는 방식

CIDR(Classless Inter Domain Routing)
CIDR
- IP 주소의 영역을 여러 네트워크 영역으로 나누기 위해 IP를 묶는 방식
- 여러 개의 사설망을 구축하기 위해 망을 나누는 방법
* CIDR Notation
- IP 주소의 집합
- 네트워크 주소와 호스트 주소로 구성
- 각 호스트 주소 숫자만큼의 IP를 가진 네트워크 망 형성 가능
- A.B.C.D/E 형식
- 예: 10.0.1.0/24, 172.16.0.0/12
- A,B,C,D: 네트워크 주소 + 호스트 주소 표시
- E: 0~32: 네트워크 주소가 몇 bit 인지 표시
* 서브넷
- 네트워크 안의 네트워크
- 큰 네트워크를 잘개 쪼갠 단위
- 일정 IP 주소의 범위를 보유
- 큰 네트워크에 부여된 IP 범위를 조금씩 잘라 작은 단위로 나눈 후 각 서브넷에 할당
VPC와 서브넷

Virtual Private Cloud(VPC)는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. Amazon EC2 인스턴스와 같은 AWS 리소스를 VPC에서 실행할 수 있습니다. IP 주소 범위와 VPC 범위를 설정하고 서브넷을 추가하고 보안 그룹을 연결한 다음 라우팅 테이블을 구성합니다.
VPC
- 가상의 데이터센터
- 원하는 대로 사설망을 구축 가능
- 부여된 IP 대역을 분할하여 사용 가능
- 리전 단위
VPC의 사용 사례
- EC2, RDS, Lambda 등의 AWS의 컴퓨팅 서비스 실행
- 다양한 서브넷 구성
- 보안 설정(IP Block, 인터넷에 노출되지 않는 EC2 등 구성)
기본 VPC와 커스텀 VPC
- 기본 VPC
- AWS 계정 생성 시 자동으로 생성되어 있음
- 기본적으로 각 AZ마다 서브넷을 생성
- 모든 서브넷에서 인터넷 접근이 가능함(퍼블릭 서브넷)
- 다양한 AWS 서비스가 기본 VPC를 이용하기 때문에, 삭제 시 여러 AWS 서비스 사용에 제약
- 커스텀 VPC
- 직접 생성
- 기본적으로 인터넷에 연결되어 있지 않음
- 인터넷 게이트웨이와 라우팅 설정 없이 퍼블릭 서브넷 생성 불가능. 즉, 별도의 조치 없이 인터넷으로 연결 가능한 EC2 생성 불가능
VPC의 구성 요소
- 서브넷
- 인터넷 게이트웨이
- NACL/보안그룹
- 라우트 테이블
- NAT Instance / NAT Gateway
- Bastion Host
- VPC Endpoint

서브넷
- VPC의 하위 단위로 VPC에 할당된 IP를 더 작은 단위로 분할한 개념
- 하나의 서브넷은 하나의 가용영역(AZ) 안에 위치
- CIDR block range로 IP 주소 지정
- IPv4의 경우 최소 /28 CIDR 이상 ~ 최대 /16
- 호스트 비트가 32-28=4, 따라서 2^4=16 -5 = 11, 최소 11개 IP 이상 보유
- IPv6의 경우 /44 ~ /64
- 서브넷의 종류
- 퍼블릭 서브넷: 외부에서 인터넷을 통해 연결할 수 있는 서브넷
- 인터넷 게이트웨이(IGW)를 통해 외부의 인터넷과 연결되어 있음
- 안에 위치한 인스턴스에 퍼블릭 IP 부여 가능
- 웹 서버, 어플리케이션 서버 등 유저에게 노출되어야 하는 인프라
- 프라이빗 서브넷: 외부에서 인터넷을 통해 연결할 수 없는 서브넷
- 외부 인터넷으로 경로가 없음
- 퍼블릭 IP 부여 불가능
- 데이터베이스, 로직 서버 등 외부에 노출될 필요가 없는 인프라
※ AWS 서브넷의 IP 갯수
- AWS의 사용 가능 IP 숫자는 5개를 제외하고 계산
- 예: 10.0.0.0/24
- 10.0.0.0: 네트워크 어드레스
- 10.0.0.1: VPC Router
- 10.0.0.2: DNS Server
- 10.0.0.3: 미래에 사용을 위해 남겨둠
- 10.0.0.255(마지막 번호): 네트워크 브로드캐스트 어드레스(단, 브로드캐스는 지원하지 않음)
- 총 사용 가능한 IP 갯수는 2^8-5 = 251
VPC Router
- VPC에 있는 가상의 라우터로 서브넷에서 오고 가는 트래픽을 라우팅. 즉, 모든 서브넷의 트래픽은 VPC 라우터를 거쳐서 목적지에 도달
- VPC 생성 시 자동으로 생성되며 별도로 관리할 필요가 없음
- 별도의 설정은 불가능하며, Route Table만 관리 가능
라우트 테이블(Route Table)
- VPC 라우터에서 트래픽이 어디로 가야 할 지 알려주는 이정표
- VPC 생성 시 기본으로 하나 제공
- 구성 요소
- Destination: 트래픽이 가고자 하는 주소
- Target: 트래픽을 실제로 보내줄 대상
인터넷 게이트웨이
- VPC가 외부의 인터넷과 통신할 수 있도록 경로를 만들어주는 리소스
- 기본적으로 확장성과 고가용성이 확보되어 있음
- IPv4, IPv6 지원
- Route Table에서 경로 설정 후에 접근 가능
- 무료
NAT Gateway와 Bastion Host
NAT Gateway

NAT 게이트웨이는 Amazon Virtual Private Cloud(Amazon VPC)의 프라이빗 서브넷에 있는 인스턴스에서 인터넷에 쉽게 연결할 수 있도록 지원하는 가용성이 높은 AWS 관리형 서비스입니다.
NAT Gateway / NAT Instance
- 프라이빗 서브넷의 리소스가 외부의 인터넷과 통신하기 위한 통로
- NAT Instance는 단일 EC2 인스턴스 / NAT Gateway는 AWS에서 제공하는 서비스
- NAT Gateway는 고가용성이 확보된 관리형 서비스
- NAT Gateway / NAT Instance는 모두 서브넷 단위
- Public Subnet에 있어야 함
- 고가용성 확보를 위해서는 두 개 이상의 가용영역(서브넷) 필요

Bastion Host

외부에서 사설 네트워크에 접속할 수 있도록 경로를 확보해주는 서버
Bastion Host
- 프라이빗 서브넷 안의 리소스에 접근하기 위한 EC2 인스턴스
- 퍼블릭 서브넷에 위치해야 함

보안 그룹
보안 그룹
- Network Access Control List(NACL)와 함께 방화벽 역할을 하는 서비스
- Port 허용
- 기본적으로 모든 포트는 비활성화
- 선택적으로 트래픽이 지나갈 수 있는 Port와 Source를 설정 가능
- Deny는 불가능 -> NACL로 가능함
- 인스턴스 단위(정확히는 ENI 단위)
- 하나의 인스턴스에 하나 이사으의 보안 그룹 설정 가능
- NACL의 경우 서브넷 단위
보안 그룹의 Stateful
- 보안 그룹은 Stateful
- Inbound로 들어온 트래픽이 별 다른 Outbound 설정 없이 나갈 수 있음
- NACL은 Stateless

보안 그룹의 Source
- IP Range(CIDR)
- 접두사 목록(Prefix List)
- 하나 이상의 CIDR 블록의 집합
- 보안 그룹 혹은 Route Table에서 많은 대상을 참조하기 위해 사용
- 두 가지 종류
- 고객 관리형: 직접 IP 주소를 생성/수정/삭제 할 수 있으며 다른 계정과도 공유 가능
- AWS 관리형: AWS의 서비스들을 위한 IP 목록. 수정, 삭제, 업데이트가 불가능함(DynamoDB, S3, CloudFront)
- IPv4, IPv6 둘 다 사용 가능. 단, 한 접두사 목록에 두 가지 타입을 동시에 사용 불가능
- 생성 시점에 최대 엔트리 숫자를 지정(이후 변경 가능)

- 다른 보안 그룹(보안 그룹 참조)

네트워크 ACL
네트워크 ACL(액세스 제어 목록)은 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 위한 방화벽 역할을 하는 VPC를 위한 선택적 보안 계층입니다.
NACL(Network Access Control List)
- 보안 그룹처럼 방화벽 역할을 담당
- 서브넷 단위
- 인스턴스 단위로 제어 불가능
- 다양한 서브넷에 연동 가능(1:N)
- 포트 및 아이피를 직접 Deny 가능
- 외부 공격을 받는 상황 등 특정 아이피를 블록하고 싶을 때 사용
- Stateless
- 들어오는 트래픽과 나가는 트래픽을 구분하지 않음. 즉, 일반적으로 Outbound에 Ephemeral Port(임시 포트) 범위를 열어 주어야 정상적으로 통신 가능

NACL 규칙
- 규칙 번호: 규칙에 부여되는 고유 숫자이며 규칙이 평가되는 순서(낮은 번호부터)
- 유형: 트래픽 유형(예: ssh=22, DNS=53, UDP=17 등)
- 프로토콜: 통신 프로토콜(예: TCP, UDP, SMP 등)
- 포트 범위: 허용 혹은 거부할 포트 범위
- 소스: IP 주소의 CIDR 블록
- 허용/거부: 허용 혹은 거부 여부
※ NACL 고려할 점
- Stateless 방화벽이기 때문에 원할한 통신을 위해서는 Outbound도 신경을 써야함
- 임시포트 Allow
- Linux: 32768~61000
- Windows: 1025~5000(XP), 49152~65535(Vista 이상부터)
- 서브넷에서 나가거나 들어오는 트래픽에만 적용. 즉, 서브넷 내부의 트래픽에 대해서는 적용되지 않음
- 다양한 서브넷으로 구성되어 있는 멀티티어 아키텍처라면 더 많은 고민이 필요함. 따라서 가능한 보안 그룹으로 먼저 처리 후 꼭 필요할 때 NACL 활용
- VPC 생성 시, 혹은 AWS 계정 생성 시 주어지는 VPC에 기본 하나 제공
- 모든 트래픽 Allow. 단, 직접 생성하는 NACL의 경우 모든 트래픽 Deny
- 하나의 서브넷은 하나의 NACL만 연동 가능. 단, 하나의 NACL은 여러 서브넷에 연동 가능
* NACL 인바운드/아웃바운드 규칙 편집

실습 - VPC 생성
VPC 구축하기

-
VPC 생성

※ VPC 등 선택 시 VPC 관련 리소스 자동 생성

-
서브넷 생성


※ 퍼블릭 서브넷 생성 시 자동 할당 IP 설정

-
인터넷 게이트웨이 생성 및 VPC 연결


-
라우팅 테이블 생성 및 서브넷 연결

a. 퍼블릭 서브넷 라우팅 테이블 생성 및 연결

b. 프라이빗 서브넷 라우트 테이블 연결 (기본으로 생성된 라우팅 테이블)

-
퍼블릭 서브넷에 EC2 프로비전

-
프라이빗 서브넷에 EC2 프로비전(DB용)

-
프라이빗 서브넷에 EC2 프로비전(WEB용)
Bastion Host를 통해 프라이빗 서브넷에 접근
- 퍼블릭 서브넷 EC2 연결
- keyfile 복사
a. sudo -s
b. nano keyfile.pem
c. 키페어 복사-붙여넣기
d. chmod 400 keypair.pem
e. ssh -i "keyfile.pem" ec2-user@{private_주소}
NAT Gateway를 통해 프라이빗 서브넷에 접근
- NAT Gateway 생성


- 프라이빗 라우팅 테이블 편집

프라이빗 서브넷에 있는 WEB 인스턴스에 접근
- 퍼블릭 서브넷 EC2 연결
ssh -i "keyfile.pem" ec2-user@{private_주소}
sudo -s
dnf install httpd -y
service httpd start
curl localhost
exit - exit
curl{private_주소}
VPC Endpoint

VPC 엔드포인트를 통해 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결을 필요로 하지 않고 AWS PrivateLink 구동 지원 AWS 서비스 및 VPC 엔드포인트 서비스에 비공개로 연결할 수 있습니다. VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다. VPC와 기타 서비스 간의 트래픽은 Amazon 네트워크를 벗어나지 않습니다.
VPC Endpoint
- 외부 인터넷을 거치지 않고 AWS 서비스에 연결시켜주는 리소스
- Interface Endpoint: ENI(Elastic Network Interface) 기반
- Private IP를 만들어 서비스로 연결
- 많은 서비스들을 지원(SQS, SNS, Kinesis, SageMaker 등)
- 서비스 지정 필요
- 보안 그룹 / 정책을 통해 보호 가능

- Gateway Endpoint: 라우팅 테이블에서 경로의 대상으로 지정
- S3 및 DynamoDB 지원
- 정책 적용 가능(보안 그룹 x)

- 상시 비용 발생
실습 - VPC 엔드포인트 생성

실습 - VPC 엔드포인트 생성: S3 Gateway Endpoint 생성
- S3 서비스 검색

- 엔드포인트를 생성할 VPC 선택

- 라우팅 테이블 선택

실습 - VPC 엔드포인트 생성: SQS Interface Endpoint 생성
- SQS 서비스 검색

- 엔드포인트를 생성할 VPC 선택

- 서브넷 선택

※ 다른 서브넷이라도 같은 가용영역이라면 엔드포인트 모두 생성
EC2 접속 방법 - 고급
Systems Manager Session Manager

실습 - SSM Session Manager를 활용한 Private EC2 연결
요구사항
- EC2 Instance에 SSM Agent가 설치되어 있을 것(Amazon Linux에는 기본 설치)
- EC2 AmazonEC2RoleforSSM Managed Policy가 포함된 Role이 적용돼 있을 것
- VPC Endpoint가 해당 VPC에 있을 것
- ssm
- ssm-messages
- ec2-messages
- logs(로깅 활성화 시)
- s3(s3 로깅 활성화 시)
- Amazon EC2RoleforSSM 권한을 가진 IAM 역할 생성

- 프라이빗 서브넷에 IAM 역할을 가진 EC2 생성

- 엔드포인트 생성
a. ssm

b. ssm-messages

c. ec2-messages

d. logs

- SSM 메뉴 선택

- 세션 시작

※ CloudWatch 로깅 활성화


EC2 Instance Connect Endpoint


실습 - Instance Connect Endpoint를 활용한 Private EC2 연결
요구사항
- EIC Endpoint에 접근 가능할 것
- 보안 그룹에 22번 포트가 열려 있을 것
- EC2 인스턴스 연결 엔드포인트 생성

- 인스턴스 연결 시 EC2 인스턴스 연결 엔드포인트를 사용하여 연결

VPC의 연결
VPC 피어링 연결

VPC 피어링 연결은 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결입니다. 동일한 네트워크에 속하는 경우와 같이 VPC의 인스턴스가 서로 통신할 수 있습니다.
VPC Peering
- 두 개의 다른 VPC를 연결하여 VPC 안의 리소스끼리 통신이 가능하고록 설정하는 것

- 다른 리전, 다른 계정의 VPC끼리 연결 가능
- CIDR Range의 중첩 불가능
- Transitive Peering 불가능
- 통신을 위해서는 직접 연결되어 있어야 함
- 혹은 Transit Gateway 이용
- Peering 설정 이후 라우팅 테이블을 업데이트해서 경로 설정 필요

AWS Transit Gateway

- 중앙 허브를 통해 VPC들과 온프레미스 네트워크를 연결하는 서비스
- 복잡한 Peering 관계를 제거하여 간소화
- 리전 간에는 서로 다른 Transit Gateway끼리 연결
VPN

AWS Virtual Private Network 솔루션은 온프레미스 네트워크, 원격 사무실, 클라이언트 디바이스 및 AWS 글로벌 네트워크 사이에서 보안 연결을 설정합니다.
Site-to-Site VPN
- 데이터센터와 AWS를 연결하는 하드웨어-하드웨어 연결(1:1 연결)
- IPSec 프로토콜 사용
Client VPN
- AWS와 온프레미스 / AWS VPN 장비와 사용자의 PC를 연결하는 하드웨어-소프트웨어 연결(1:N 연결)

AWS Direct Connect

AWS Direct Connect 클라우드 서비스는 AWS 리소스에 대한 최단 경로입니다.
AWS Direct connect
- AWS와 온프레미스 간에 DX Location을 경유한 전용선을 통해 연결
- 외부 인터넷과 분리되어 있음
- 외부에서 접근이 불가능하기 때문에 높은 보안
- 인터넷 환경에 상관없이 일정한 속도 보장
- Direct Connect Gateway: 여러 리전의 VPC를 한번에 Direct Connect로 연결할 수 있는 서비스
- 성능이 좋고 빠른 대신 비싸고 설치가 오래 걸림

실습 - VPC Peering 연결하기
- VPC 피어링 연결 생성


- 라우팅 테이블 설정


VPC 설계
VPC 설계 시 고려할 점
- VPC 간의 IP Range
- VPC Peering을 위해서는 서로 IP Range가 겹치지 않아야 함
- 고가용성을 위한 서브넷 및 어플리케이션 티어
- 고가용성 - 적어도 3개 이상의 가용영역에 분산 필요 + 추가 가용영역
- 어플리케이션 티어 - 보통 3Tier 아키텍처가 기본 _ 추가로 예비 티어
- 서브넷 단위는 /20 or /24
- /20: 많은 IP 숫자
- /24: 알아보기 쉬움

참고
https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard