
기초
- CIDR(Classless Inter-Domain Routing): IP 주소 할당하는 방법
ex) 192.168.10.10 255.255.255.0 <-> 192.168.10.10/24
- 공용 IP VS 사설IP
- IANA(Internet Assigned Numbers Authority)
특정 IPv4 주소 블록 사설 LAN 네트워크나 공용 인터넷 주소이다.
- 사설 IP 범위
10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
VPC(Virtual Private Cloud)
- 단일 리전에 여러 VPC 생성 가능(리전당 최대 5개)
엄격하게 제한하고 있진 않음.
- VPC에서 할당된 CIDR는 5개이다.
- VPC가 사설 리소스이기 때문에 사설 IPv4 범위만 허용된다.
10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
- VPC CIDR가 다른 VPC나 네트워크 혹은 기업 네트워크와 겹치지 않도록 주의하자.
함께 연결하려면 겹치지 않아야 하기때문
- VPC 만들때 테넌시 옵션은 VPC 내에서 EC2 인스턴스가 실행되는 방법을 정의한다.
Default: 공유 하드웨어
Dedicated: 전용 하드웨어
서브넷
- 서브넷: VPC 내부에 있는 IPv4 주소의 부분 범위
AWS가 IP 주소 다섯 개를 예약한다.
IP 주소 처음 4개, 마지막 1 개를 서브넷마다 예약한다.
ex: 192.168.0.0/27 -> 192.168.0.0 - 192.168.0.3, 192.168.0.31
192.168.0.32/27 -> 192.168.0.32 - 192.168.0.35, 192.168.0.63
은 사용할 수 없다. 미리 예약 되어있음(네트워크 주소, 브로드캐스트 주소 등등)
첫 번째 주소: 네트워크 주소
두 번째 주소: AWS VPC 라우터용으로 예약
세 번째 주소: Amazon 제공 DNS에 매핑
네 번째 주소: 당장 사용되진 않지만 예비로 예약한 주소
마지막 주소: 브로드캐스트 주소(AWS는 VPC에서 브로드캐스트를 지원하지 않아 사용은 하지 않는다.)
IGW
- IGW: VPC의 리소스를 인터넷에 연결을 허용
- 수평으로 확장되고 가용성과 중복성이 높다.
- VPC는 IGW 하나에만 연결된다.
- IGW 자체는 인터넷 액세스를 허용하지 않는다.
허용하기 위해 라우팅 테이블을 수정해야 함.
Bastion Hosts
- Bastion Host EC2를 public subnet에 위치시켜 private subnet에 있는 EC2 인스턴스에 액세스하도록 한다.
SG의 SSH를 bastion에 연결하고 bastion 호스트가 다시 SSH를 프라이빗 서브넷의 EC2 인스턴스에 연결
- Bastion 호스트를 위해 SG가 반드시 인터넷 액세스를 허용해야 한다.
그러나 모든 인터넷 액세스를 허용하면 안된다.
기업의 퍼블릭 CIDR만 허용하거나 사용자의 인ㅇ터넷 액세스만 허용하는 등의 SG설정이 필요하다.
- 프라이빗 서브넷의 EC2의 SG는 반드시 SSH를 허용해야 하고, 그 SSH는 bastion 호스트의 프라이빗 IP이거나 bastion의 SG이어야 한다.
NAT GW
- NAT: 네트워크 주소 변환
- AWS의 관리형 NAT 인스턴스이고 높은 가용성과 높은 대역폭을 가지고 있음.
- 사용량과 NAT GW의 대역폭에 따라 청구된다.
- NAT GW는 특정 AZ에서 생성되고 탄력적 IP를 이어받는다.
- EC2 인스턴스와 같은 서브넷에서 사용할 수 없어서 다른 서브넷에서 액세스할 때만 NAT GW가 도움 된다.
- public 서브넷에서 NAT GW를 만들고 private 서브넷의 인스턴스와 연결해 사용
- 경로
private 서브넷에 위치한 EC2 인스턴스 -> NAT GW -> IGW
- 대역폭: 초당 5GB
자동으로 초당 45GB까지 확장 가능
- 따로 보안 그룹을 관리할 필요가 없음.
NAT GW의 고가용성
- NAT GW는 단일 AZ에서 복원 가능하고, 단일 AZ 내에서만 중복되지만 AZ가 중지될 경우를 위해 다중 NAT GW를 여러 AZ에 두면 결함 허용을 할 수 있다.

- 라우팅 테이블을 통해 AZ를 서로 연결할 필요가 없다.
만약 AZ가 중지되면 그 AZ의 EC2 인스턴스가 액세스 불가 상태가 된다.
SG(Security Groups) & NACLs(네트워크 ACL)

- SG와 NACL의 특징
- SG
- 상태 유지
- 요청이 보안 그룹의 인바운드 규칙을 통과해 EC2 인스턴스에 도달하면 그 응답으로 애플리케이션 관점에서 응답할 내용을 모두 회신한다.
즉, 아웃바운드 규칙을 평가하지 않는다.
- 반대로 내부에서 아웃바운드 규칙이 허용 되었으면 인바운드 규칙을 검사하지 않고 통과한다.
- 먼저 통과된 상태를 저장하고, 이에 대한 응답 요청이 왔을때 저장된 상태를 확인하여 통과 시키는 것 = 상태 유지
- NACL
- 무상태
- 무상태이기 때문에 NACL 인바운드/아웃바운드의 규칙이 평가된다.
- 규칙이 통과하지 못하면 요청도 통과하지 못한다.
NACL

- NACL 역할
- 서브넷에 오가는 트래픽을 제어하는 방화벽 역할
- 서브넷 마다 하나의 NACL을 가지고 있고, 새로운 서브넷에는 기본 NACL이 할당된다.
- NACL 규칙 정의에서 규칙에는 숫자가 있고 1 ~ 32,766까지이다.
- 이는 우선순위를 나타내고 1이 가장 우선순위가 높다.
- 첫 번째 규칙 비교로 결정이 난다.
10.0.0.10/32 CIDR에서 ALLOW를 정의하고 같은 CIDR인 특정 IP를 DENY로 정의하면 ALLOW는 100이고, DENY가 200이니까 IP 주소는 허용된다.
- 마지막 규칙은 (*)이다.
일치하는 규칙이 없으면 모든 요청을 거부한다.
- AWS는 규칙을 100씩 추가하는 것을 권장한다.
- 만들어지는 NACL은 기본적으로 DENY이다.
- 사용 사례
서브넷 수준에서 특정한 IP 주소를 차단하는데 적합
Default NACL
- 기본 NACL은 연결된 서브넷을 가지고 인바운드/아웃바운드의 모든 요청을 허용하고 있다.
- 기본 NCAL은 수정하지 않는것이 좋다.
임시 포트(Ephemeral Ports)
- 클라이언트와 서버가 연결되면 포트를 사용해야 한다.
즉 IP주소와 포트가 있다.
- 클라이언트는 규정된 포트의 서버에 연결한다.(well-known port)
ex: HTTP:80, HTTPS:443, SSH:22 ,,,,,
- 서버가 서비스를 올릴 때 클라이언트는 규정된 포트에 접속한다.
클라이언트가 서버에서 회신 받을 때는 제외
서버도 응답하기 위해서 클라이언트에 연결해야 한다.
클라이언트는 기본적으로 개방된 포트가 없다.
클라이언트가 서버에 접속할 때 자체적으로 특정한 포트를 열게 된다.
이 포트는 임시 포트이기 때문에 클라이언트오 서버 간 연결이 끊어지면 할당이 해제된다.
- 임시 포트
OS에 따라 포트 범위가 달라진다.
- WIN 10
49152 - 65535
- 리눅스
32768 - 60999
NACL에서의 임시포트

- 예시(클라이언트가 DB에 연결)
- 클라이언트 측
클라이언트가 DB 인스턴스에 연결을 시작하면 허용해야 하는 규칙
3306(MySQL)포트를 통해 TCP부터 DB의 서브넷 CIDR까지 아웃바운드를 허용
- DB 측
DB NACL는 웹 서브넷 CIDR에서 3306포트으로 TCP를 인바운드
- 클라이언트는 임시 포트가 할당된다.
그러면 DB는 임시포트에서 아웃바운드 TCP를 허용하는데 범위는 1,024 ~ 65,535이다.
- 웹 서브넷 CIDR로 아웃 바운드 되면 웹 NACL은 DB 서브넷 CIDR의 임시 포트 범위에서 인바운드 TCP를 허용해야 한다.
각각의 대상 서브넷 CIDR에 대한 NACL 규칙 생성

- 다중 NACL 및 서브넷이 있다면 각 NACL 조합이 NACL 내에서 허용되어야 한다.
CIDR 사용 시, 서브넷이 고유의 CIDR을 갖기 때문이다.
NACL에 서브넷을 추가하면 NACL 규칙도 업데이트해서 연결 조합이 가능한지 확인해야 한다.
SG VS NACL 요약
- 차이점
- SG
- 인스턴스 수준의 보안
- 허용 규칙을 지원
- 상태 유지
- 모든 규칙이 평가되고 트래픽 허용 여부를 결정
- NACL
- 서브넷 수준의 보안
- 허용/거부 규칙 지원
- 무상태
- 가장 높은 우선순위가 먼저 평가