📄 2025.12.04 (Day 29) [AWS VPC: 네트워크 구성 및 연결]
1. 핵심 개념 정리 (Concepts & Theory)
| # | 핵심 개념 | 간결한 설명 |
|---|---|---|
| 1 | Amazon VPC (Virtual Private Cloud) | AWS 클라우드 내에서 논리적으로 격리된 가상 네트워크 를 생성하는 서비스입니다. 사용자가 정의한 IP 주소 범위(CIDR 블록), 서브넷, 라우팅 테이블, 게이트웨이를 구성하여 완전한 제어 권한을 가집니다. On-Premise 데이터센터처럼 네트워크를 설계할 수 있습니다. |
| 2 | CIDR (Classless Inter-Domain Routing) | IP 주소 범위를 표기하는 방식으로 IP주소/서브넷 마스크 형태입니다. 예: 10.0.0.0/16은 10.0.0.0 ~ 10.0.255.255 (65,536개 IP). /16은 앞 16비트가 네트워크 부분이고, 나머지 16비트가 호스트 부분입니다. VPC 생성 시 CIDR 블록을 지정합니다. |
| 3 | 서브넷 (Subnet) | VPC 내에서 IP 주소 범위를 더 작은 단위로 분할한 네트워크 세그먼트입니다. 각 서브넷은 하나의 가용 영역(AZ) 에 속하며, Public Subnet (인터넷 게이트웨이 연결)과 Private Subnet (인터넷 직접 접근 불가)으로 구분됩니다. |
| 4 | 인터넷 게이트웨이 (Internet Gateway, IGW) | VPC와 인터넷 간 양방향 통신 을 가능하게 하는 게이트웨이입니다. Public Subnet의 라우팅 테이블에 IGW를 기본 게이트웨이(0.0.0.0/0)로 설정하여 인터넷 접속을 허용합니다. 수평 확장 가능하고 고가용성이 보장됩니다. |
| 5 | NAT Gateway / NAT Instance | Private Subnet의 인스턴스가 인터넷에 아웃바운드 연결 (예: 소프트웨어 업데이트, API 호출)을 가능하게 하지만, 인바운드 연결은 차단 합니다. NAT Gateway는 AWS 관리형 서비스(고가용성, 자동 확장), NAT Instance는 EC2 인스턴스(사용자 관리). |
| 6 | 라우팅 테이블 (Route Table) | 네트워크 트래픽의 경로를 결정 하는 규칙 집합입니다. 각 서브넷은 하나의 라우팅 테이블과 연결되며, 목적지 IP 범위(Destination)와 타겟(Target: IGW, NAT Gateway, VPC Peering 등)을 정의합니다. 가장 구체적인 경로(Longest Prefix Match)가 우선 적용됩니다. |
| 7 | 보안 그룹 (Security Group) | EC2 인스턴스 등 리소스에 연결되는 가상 방화벽 으로, 상태 저장형(Stateful) 입니다. 인바운드/아웃바운드 규칙을 정의하며, 기본적으로 모든 인바운드 차단, 모든 아웃바운드 허용 입니다. Allow 규칙만 정의 가능(Deny 불가). |
| 8 | 네트워크 ACL (NACL, Network Access Control List) | 서브넷 레벨에서 작동하는 무상태형(Stateless) 방화벽 입니다. 인바운드/아웃바운드 규칙을 번호 순서대로 평가하며, Allow와 Deny 모두 정의 가능 합니다. 응답 트래픽도 명시적 규칙 필요. |
| 9 | VPC Peering | 두 VPC 간 프라이빗 네트워크 연결 을 제공합니다. AWS 백본 네트워크를 사용하여 두 VPC가 같은 네트워크에 있는 것처럼 통신. 리전 간(Inter-Region) 또는 계정 간(Cross-Account) Peering 가능. CIDR 블록이 겹치면 안 됩니다. 비전이적(Non-transitive): A-B, B-C Peering 시 A-C 직접 통신 불가. |
| 10 | AWS Transit Gateway | 여러 VPC와 On-Premise 네트워크를 중앙 허브로 연결 하는 서비스입니다. 수천 개의 VPC를 하나의 Transit Gateway에 연결 가능하며, 라우팅을 중앙 집중식으로 관리. VPC Peering의 풀 메쉬 복잡도 해결. |
| 11 | VPC Endpoint | VPC 내 리소스가 인터넷 게이트웨이, NAT, VPN 없이 AWS 서비스에 프라이빗 연결 하는 기능입니다. Interface Endpoint (ENI 기반, PrivateLink 사용, 대부분 서비스 지원)와 Gateway Endpoint (S3, DynamoDB만 지원, 무료)로 구분. |
| 12 | VPN (Virtual Private Network) | On-Premise 네트워크와 AWS VPC를 암호화된 터널로 연결 합니다. Site-to-Site VPN (On-Premise 라우터 ↔ AWS VGW)과 Client VPN (개별 사용자 ↔ VPC) 제공. IPsec 프로토콜 사용. |
| 13 | AWS Direct Connect | On-Premise와 AWS 간 전용 물리적 네트워크 연결 을 제공합니다. 인터넷을 경유하지 않아 일관된 네트워크 성능, 높은 대역폭(1Gbps ~ 100Gbps), 낮은 지연시간 제공. |
2. 실습 코드 & 응용 (Practice & Code Walkthrough)
(A) VPC 생성 및 기본 구성
VPC 생성 (AWS CLI):
# VPC 생성
aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=my-vpc}]'
# 출력: VPC ID 확인 (예: vpc-0abcd1234efgh5678)
# VPC 정보 조회
aws ec2 describe-vpcs --vpc-ids vpc-0abcd1234efgh5678
# DNS 호스트 이름 활성화 (중요: EC2 인스턴스에 DNS 이름 부여)
aws ec2 modify-vpc-attribute \
--vpc-id vpc-0abcd1234efgh5678 \
--enable-dns-hostnames
CIDR 계산 예시:
10.0.0.0/16:
- 네트워크 부분: 10.0 (16비트 고정)
- 호스트 부분: 0.0 ~ 255.255 (16비트 가변)
- IP 범위: 10.0.0.0 ~ 10.0.255.255
- 사용 가능 IP: 65,536개 - 5개(AWS 예약) = 65,531개
10.0.1.0/24:
- 네트워크 부분: 10.0.1 (24비트 고정)
- 호스트 부분: 0 ~ 255 (8비트 가변)
- IP 범위: 10.0.1.0 ~ 10.0.1.255
- 사용 가능 IP: 256개 - 5개(AWS 예약) = 251개
AWS 예약 IP (각 서브넷마다):
- 10.0.1.0: 네트워크 주소
- 10.0.1.1: VPC 라우터
- 10.0.1.2: DNS 서버
- 10.0.1.3: 향후 사용 예약
- 10.0.1.255: 브로드캐스트 주소 (VPC에서는 미지원이지만 예약)
(B) 서브넷 생성 (Public & Private)
Public Subnet 생성:
# Public Subnet 1 (AZ-A)
aws ec2 create-subnet \
--vpc-id vpc-0abcd1234efgh5678 \
--cidr-block 10.0.1.0/24 \
--availability-zone ap-northeast-2a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-subnet-1}]'
# Public Subnet 2 (AZ-C, 고가용성)
aws ec2 create-subnet \
--vpc-id vpc-0abcd1234efgh5678 \
--cidr-block 10.0.2.0/24 \
--availability-zone ap-northeast-2c \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-subnet-2}]'
# Public IP 자동 할당 활성화
aws ec2 modify-subnet-attribute \
--subnet-id subnet-0xyz123 \
--map-public-ip-on-launch
Private Subnet 생성:
# Private Subnet 1 (AZ-A)
aws ec2 create-subnet \
--vpc-id vpc-0abcd1234efgh5678 \
--cidr-block 10.0.11.0/24 \
--availability-zone ap-northeast-2a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=private-subnet-1}]'
# Private Subnet 2 (AZ-C)
aws ec2 create-subnet \
--vpc-id vpc-0abcd1234efgh5678 \
--cidr-block 10.0.12.0/24 \
--availability-zone ap-northeast-2c \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=private-subnet-2}]'
서브넷 설계 예시:
VPC: 10.0.0.0/16
Public Subnets (인터넷 연결):
- 10.0.1.0/24 (ap-northeast-2a) → 웹 서버, 로드 밸런서
- 10.0.2.0/24 (ap-northeast-2c) → 웹 서버, 로드 밸런서
Private Subnets (애플리케이션):
- 10.0.11.0/24 (ap-northeast-2a) → 애플리케이션 서버
- 10.0.12.0/24 (ap-northeast-2c) → 애플리케이션 서버
Private Subnets (데이터베이스):
- 10.0.21.0/24 (ap-northeast-2a) → RDS, ElastiCache
- 10.0.22.0/24 (ap-northeast-2c) → RDS, ElastiCache
(C) 인터넷 게이트웨이 및 NAT Gateway 설정
인터넷 게이트웨이 (IGW) 설정:
# IGW 생성
aws ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=my-igw}]'
# 출력: igw-0abc123def456789
# VPC에 IGW 연결
aws ec2 attach-internet-gateway \
--internet-gateway-id igw-0abc123def456789 \
--vpc-id vpc-0abcd1234efgh5678
NAT Gateway 설정:
# 1. Public Subnet에 Elastic IP 할당
aws ec2 allocate-address --domain vpc
# 출력: AllocationId: eipalloc-0xyz123
# 2. NAT Gateway 생성 (Public Subnet에 배치)
aws ec2 create-nat-gateway \
--subnet-id subnet-0xyz123 \
--allocation-id eipalloc-0xyz123 \
--tag-specifications 'ResourceType=nat-gateway,Tags=[{Key=Name,Value=my-nat-gateway}]'
# 출력: nat-0abc123def (상태: pending → available까지 대기)
# NAT Gateway 상태 확인
aws ec2 describe-nat-gateways --nat-gateway-ids nat-0abc123def
# 고가용성: 각 AZ마다 NAT Gateway 생성 권장
(D) 라우팅 테이블 구성
Public Subnet 라우팅 테이블:
# 라우팅 테이블 생성
aws ec2 create-route-table \
--vpc-id vpc-0abcd1234efgh5678 \
--tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=public-rt}]'
# 출력: rtb-0public123
# 인터넷 게이트웨이로 가는 기본 경로 추가
aws ec2 create-route \
--route-table-id rtb-0public123 \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-0abc123def456789
# Public Subnet과 라우팅 테이블 연결
aws ec2 associate-route-table \
--route-table-id rtb-0public123 \
--subnet-id subnet-0xyz123 # public-subnet-1
aws ec2 associate-route-table \
--route-table-id rtb-0public123 \
--subnet-id subnet-0xyz456 # public-subnet-2
Private Subnet 라우팅 테이블:
# Private 라우팅 테이블 생성
aws ec2 create-route-table \
--vpc-id vpc-0abcd1234efgh5678 \
--tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=private-rt}]'
# 출력: rtb-0private456
# NAT Gateway로 가는 기본 경로 추가
aws ec2 create-route \
--route-table-id rtb-0private456 \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id nat-0abc123def
# Private Subnet과 연결
aws ec2 associate-route-table \
--route-table-id rtb-0private456 \
--subnet-id subnet-0private111 # private-subnet-1
aws ec2 associate-route-table \
--route-table-id rtb-0private456 \
--subnet-id subnet-0private222 # private-subnet-2
라우팅 테이블 구조 예시:
Public Route Table (rtb-0public123): +———————–+———————+——–+ | Destination | Target | Status | +———————–+———————+——–+ | 10.0.0.0/16 | local | Active | | 0.0.0.0/0 | igw-0abc123 | Active | +———————–+———————+——–+
Private Route Table (rtb-0private456): +———————–+———————+——–+ | Destination | Target | Status | +———————–+———————+——–+ | 10.0.0.0/16 | local | Active | | 0.0.0.0/0 | nat-0abc123 | Active | +———————–+———————+——–+
해석:
- 10.0.0.0/16 → local: VPC 내부 트래픽은 로컬 라우팅
- 0.0.0.0/0 → igw/nat: 외부 인터넷 트래픽 경로
(E) 보안 그룹 및 NACL 설정
보안 그룹 생성 (웹 서버용):
# 보안 그룹 생성
aws ec2 create-security-group \
--group-name web-server-sg \
--description "Security group for web servers" \
--vpc-id vpc-0abcd1234efgh5678
# 출력: sg-0web123
# HTTP 인바운드 허용 (전체 인터넷에서)
aws ec2 authorize-security-group-ingress \
--group-id sg-0web123 \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
# HTTPS 인바운드 허용
aws ec2 authorize-security-group-ingress \
--group-id sg-0web123 \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0
# SSH 인바운드 허용 (특정 IP만)
aws ec2 authorize-security-group-ingress \
--group-id sg-0web123 \
--protocol tcp \
--port 22 \
--cidr 203.0.113.0/24
보안 그룹 vs NACL 비교:
+——————-+——————-+——————-+ | 특성 | 보안 그룹 | NACL | +——————-+——————-+——————-+ | 작동 레벨 | 인스턴스 | 서브넷 | | 상태 | Stateful | Stateless | | 규칙 타입 | Allow만 | Allow + Deny | | 규칙 평가 | 모든 규칙 평가 | 번호 순서대로 | | 응답 트래픽 | 자동 허용 | 명시적 규칙 필요 | | 기본 설정 | 모든 트래픽 차단 | 모든 트래픽 허용 | +——————-+——————-+——————-+
방어 전략:
- NACL: 서브넷 경계 방어 (거친 필터링, IP 대역 차단)
- 보안 그룹: 인스턴스 세밀한 제어 (포트별, 소스별)
(F) VPC Peering 설정
VPC Peering 연결:
# VPC Peering 요청 생성 (VPC-A → VPC-B)
aws ec2 create-vpc-peering-connection \
--vpc-id vpc-aaaaa \
--peer-vpc-id vpc-bbbbb \
--peer-region ap-northeast-2 \
--tag-specifications 'ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=vpc-a-to-vpc-b}]'
# 출력: pcx-0peering123 (상태: pending-acceptance)
# VPC-B에서 Peering 요청 수락
aws ec2 accept-vpc-peering-connection \
--vpc-peering-connection-id pcx-0peering123
라우팅 테이블 업데이트 (양방향):
# VPC-A의 라우팅 테이블: VPC-B CIDR → Peering 연결
aws ec2 create-route \
--route-table-id rtb-vpc-a \
--destination-cidr-block 10.1.0.0/16 \
--vpc-peering-connection-id pcx-0peering123
# VPC-B의 라우팅 테이블: VPC-A CIDR → Peering 연결
aws ec2 create-route \
--route-table-id rtb-vpc-b \
--destination-cidr-block 10.0.0.0/16 \
--vpc-peering-connection-id pcx-0peering123
(G) 실습 시나리오: 완전한 VPC 네트워크 구성
목표: 고가용성 웹 애플리케이션 아키텍처
인터넷 | | (IGW) | +—+———————————–+ | VPC: 10.0.0.0/16 | | | | [Public Subnet 1: 10.0.1.0/24] | | - ALB (Application Load Balancer) AZ-A | - NAT Gateway 1 | | | | [Public Subnet 2: 10.0.2.0/24] | | - ALB AZ-C | | - NAT Gateway 2 | | | | [Private Subnet 1: 10.0.11.0/24] | | - Web Server 1 (EC2) AZ-A | | | | [Private Subnet 2: 10.0.12.0/24] | | - Web Server 2 (EC2) AZ-C | | | | [Private Subnet 3: 10.0.21.0/24] | | - RDS Primary (AZ-A) | | | | [Private Subnet 4: 10.0.22.0/24] | | - RDS Standby (AZ-C) | +————————————–+
3. 실무/보안 관점 분석 (Insight & Scenario Mapping)
| 분야 | 적용 시나리오 |
|---|---|
| 네트워크 아키텍처 설계 | 다층 방어 구조: Public Subnet(ALB/Bastion) → Private Subnet(App Server) → Private Subnet(Database)로 계층 분리. 공격자가 DMZ를 침투해도 내부망 접근 차단. 고가용성 설계: 최소 2개 AZ에 리소스 분산 배치. 각 AZ마다 NAT Gateway 구성으로 AZ 장애 시에도 다른 AZ에서 인터넷 접속 가능. IP 주소 관리: VPC CIDR은 변경 불가하므로 초기 설계 시 충분한 IP 확보(/16 권장). 서브넷은 /24로 분할하여 256개 IP씩 할당. |
| 보안 강화 전략 | 최소 권한 네트워크 접근: 보안 그룹은 필요한 포트와 소스만 허용(SSH는 Bastion에서만). NACL로 알려진 공격 IP 대역 차단. Bastion Host 패턴: Private Subnet EC2는 직접 SSH 불가. Public Subnet에 Bastion Host 배치 → 여기서만 Private EC2 접속. VPC Flow Logs: 모든 네트워크 트래픽 로그를 S3 또는 CloudWatch에 저장. 의심스러운 트래픽 패턴 분석, 포트 스캔 탐지, 데이터 유출 추적. |
| 하이브리드 클라우드 | VPN 연결: On-Premise 데이터센터와 VPC를 Site-to-Site VPN으로 연결. 초기 클라우드 마이그레이션 시 빠르게 구축. BGP 동적 라우팅으로 자동 경로 업데이트. Direct Connect: 전용선으로 On-Premise와 AWS 연결. 일관된 네트워크 성능, 대용량 데이터 전송. Transit Gateway 활용: 여러 VPC, On-Premise, Direct Connect를 하나의 Transit Gateway에 연결. 중앙 집중식 라우팅 관리. |
| 비용 최적화 | NAT Gateway 비용 절감: NAT Gateway는 시간당 + 데이터 처리 비용. S3/DynamoDB는 Gateway Endpoint(무료) 사용. 다른 서비스는 Interface Endpoint(시간당 비용, 데이터 무료)로 NAT 우회. VPC Peering vs Transit Gateway: 소수 VPC 연결은 Peering(무료, 데이터 전송만 과금). 다수 VPC는 Transit Gateway(시간당 + 데이터 처리 비용, 관리 간소화). Elastic IP 비용: 사용 중인 EIP는 무료, 미사용 EIP는 시간당 과금. |
| 모니터링 & 트러블슈팅 | VPC Flow Logs 분석: 비정상 트래픽 패턴 탐지(예: 짧은 시간 대량 연결 시도). 보안 그룹/NACL 차단 로그(REJECT) 확인으로 공격 시도 파악. Athena로 쿼리: SELECT * FROM vpc_flow_logs WHERE action='REJECT' AND dstport=22. Reachability Analyzer: 네트워크 경로 진단 도구. 소스에서 목적지까지 라우팅 테이블, 보안 그룹, NACL, IGW/NAT 등 모든 홉 분석. 연결 실패 원인 자동 식별. |
4. 개인 인사이트 및 다음 단계 (Reflection & Next Steps)
배운 점/느낀 점:
- VPC는 AWS 네트워크의 기초: 모든 리소스가 VPC 안에서 동작하므로, VPC를 제대로 설계하지 않으면 나중에 아키텍처 변경이 매우 어렵습니다. CIDR 블록은 변경 불가하므로 초기 IP 주소 계획이 중요함을 깨달았습니다.
- Public/Private Subnet 분리의 중요성: 웹 서버는 Public Subnet에, 데이터베이스는 Private Subnet에 배치하여 공격 표면을 최소화하는 것이 기본입니다.
- 보안 그룹과 NACL의 차이: 보안 그룹은 Stateful(응답 자동 허용), NACL은 Stateless(명시적 규칙 필요). 두 개를 조합하여 다층 방어를 구현하는 것이 Best Practice입니다.
- 라우팅 테이블의 역할: 트래픽이 어디로 가야 하는지 결정하는 핵심 요소입니다. Public Subnet은 IGW로, Private Subnet은 NAT Gateway로 라우팅.
- VPC Peering의 제약: 비전이적(Non-transitive)이라는 점이 중요합니다. A-B, B-C Peering이 있어도 A-C는 직접 통신 불가. 다수 VPC 연결 시 Transit Gateway가 훨씬 효율적입니다.
심화 방향:
- AWS Transit Gateway 실습: 여러 VPC를 Transit Gateway로 연결하고, 라우팅 테이블로 VPC 간 통신 제어.
- VPN 연결 실습: On-Premise 시뮬레이션(VirtualBox)과 AWS VPC를 Site-to-Site VPN으로 연결. IPsec 터널 설정, BGP 동적 라우팅 구성.
- VPC Flow Logs 분석: Flow Logs를 S3에 저장하고 Athena로 쿼리. 의심스러운 트래픽 패턴(포트 스캔, 대량 연결 시도) 탐지.
- AWS Network Firewall 실습: Suricata 룰 작성하여 애플리케이션 레벨 공격 차단.
- Terraform으로 VPC 자동화: VPC 모듈 작성하여 서브넷, IGW, NAT Gateway, 라우팅 테이블, 보안 그룹을 코드로 관리.
5. 추가 참고사항 (Quick Reference)
CIDR 블록 계산표
| CIDR | 서브넷 마스크 | 사용 가능 IP | 용도 |
|---|---|---|---|
| /32 | 255.255.255.255 | 1개 | 단일 호스트 |
| /28 | 255.255.255.240 | 11개 (16-5) | 매우 작은 서브넷 |
| /24 | 255.255.255.0 | 251개 (256-5) | 일반적인 서브넷 |
| /20 | 255.255.240.0 | 4,091개 (4096-5) | 큰 서브넷 |
| /16 | 255.255.0.0 | 65,531개 (65536-5) | VPC 권장 크기 |
| /12 | 255.240.0.0 | 1,048,571개 | 매우 큰 VPC |
| /8 | 255.0.0.0 | 16,777,211개 | 최대 VPC 크기 |
VPC 구성 요소 제한 (기본값)
| 리소스 | 제한 | 증가 가능 여부 |
|---|---|---|
| VPC/리전 | 5개 | Yes (수백 개) |
| 서브넷/VPC | 200개 | Yes |
| IGW/VPC | 1개 | No |
| NAT Gateway/AZ | 5개 | Yes |
| VPC Peering 연결/VPC | 50개 | Yes (125개) |
| 보안 그룹/VPC | 2,500개 | Yes |
| 보안 그룹/인스턴스 | 5개 | Yes (16개) |
| 규칙/보안 그룹 | 60개 (In+Out) | Yes (1000개) |
| NACL/VPC | 200개 | Yes |
| 규칙/NACL | 20개 (In+Out) | Yes (40개) |
주요 AWS 서비스 포트 (보안 그룹 설정용)
| 서비스 | 포트 | 프로토콜 | 설명 |
|---|---|---|---|
| SSH | 22 | TCP | Linux 원격 접속 (Bastion에서만 허용) |
| RDP | 3389 | TCP | Windows 원격 데스크톱 (Bastion에서만) |
| HTTP | 80 | TCP | 웹 트래픽 (ALB에서 허용) |
| HTTPS | 443 | TCP | 암호화 웹 트래픽 (ALB에서 허용) |
| MySQL/Aurora | 3306 | TCP | 데이터베이스 (App SG에서만 허용) |
| PostgreSQL | 5432 | TCP | 데이터베이스 (App SG에서만 허용) |
| Redis | 6379 | TCP | ElastiCache (App SG에서만) |
| Custom App | 8080, 8443 | TCP | 애플리케이션 (Web SG에서만) |
| NFS | 2049 | TCP | EFS 마운트 (App SG에서만) |
| DNS | 53 | UDP/TCP | Route 53 (VPC 내부) |
| Ephemeral | 1024-65535 | TCP | 응답 트래픽 (NACL에서 허용 필요) |
보안 그룹 설계 패턴
1. 웹 계층 (ALB/Web Server):
Security Group: web-tier-sg Inbound:
- HTTP (80) from 0.0.0.0/0
- HTTPS (443) from 0.0.0.0/0 Outbound:
- All traffic (기본값)
2. 애플리케이션 계층:
Security Group: app-tier-sg Inbound:
- Custom TCP (8080) from web-tier-sg
- Custom TCP (8443) from web-tier-sg Outbound:
- MySQL (3306) to db-tier-sg
- HTTPS (443) to 0.0.0.0/0 (외부 API 호출)
3. 데이터베이스 계층:
Security Group: db-tier-sg Inbound:
- MySQL (3306) from app-tier-sg Outbound:
- None (또는 최소 필요)
4. Bastion Host:
Security Group: bastion-sg Inbound:
- SSH (22) from <관리자 IP>/32 Outbound:
- SSH (22) to app-tier-sg
- SSH (22) to db-tier-sg
네트워크 트러블슈팅 체크리스트
☑ CIDR 블록 충돌 확인 (VPC Peering, On-Premise) ☑ 서브넷이 올바른 AZ에 배치되었는지 확인 ☑ 인터넷 게이트웨이가 VPC에 연결되었는지 확인 ☑ NAT Gateway가 Public Subnet에 있고 EIP가 할당되었는지 확인 ☑ 라우팅 테이블이 올바른 서브넷에 연결되었는지 확인 ☑ Public Subnet 라우팅: 0.0.0.0/0 → IGW ☑ Private Subnet 라우팅: 0.0.0.0/0 → NAT Gateway ☑ 보안 그룹 인바운드 규칙 확인 (필요한 포트 허용) ☑ NACL 인바운드/아웃바운드 규칙 확인 (Ephemeral 포트 허용) ☑ EC2 인스턴스에 Public IP 또는 EIP 할당 확인 (Public Subnet) ☑ VPC Peering 시 양쪽 라우팅 테이블 업데이트 확인 ☑ VPC Flow Logs로 REJECT 로그 확인 ☑ Reachability Analyzer로 네트워크 경로 진단