[2026 주요정보통신기반시설] CA-07 VPC네트워크서브넷관리

단일 가상 네트워크 내 Public/Private 서브넷을 혼용하여 사용하는지 여부 점검

CA-07 VPC네트워크서브넷관리

가이드라인 원문

항목내용
항목코드CA-07
점검내용단일 가상 네트워크 내 Public/Private 서브넷을 혼용하여 사용하는지 여부 점검
점검대상클라우드 플랫폼
판단기준양호: 공개용 네트워크와 내부 네트워크를 분리한 경우
판단기준취약: 공개용 네트워크와 내부 네트워크를 분리하지 않은 경우
조치방법각 서브넷별 네트워크 리소스 설정

상세 설명

1. 항목 개요

VPC(Virtual Private Cloud) 내에서 서브넷은 IP 주소 범위를 분할하는 네트워크 영역입니다. Public 서브넷은 인터넷 게이트웨이를 통해 직접 인터넷과 통신할 수 있는 네트워크이고, Private 서브넷은 NAT 게이트웨이나 VPN을 통해서만 접근할 수 있는 내부 네트워크입니다. 이 두 서브넷을 적절하게 분리하지 않으면 내부 리소스가 외부에 노출될 수 있습니다.

2. 왜 이 항목이 필요한가요?

보안 위협 시나리오:

  1. Public 서브넷에 내부 리소스 배치: 데이터베이스나 내부 애플리케이션을 Public 서브넷에 배치하면 인터넷에서 직접 접근 가능
  2. 잘못된 라우팅 설정: Private 서브넷의 트래픽이 인터넷 게이트웨이를 통해 외부로 유출
  3. 보안 그룹 설정 오류: Public 서브넷과 Private 서브넷 간의 격리가 제대로 이루어지지 않음

실제 사례

  • Public 서브넷에 배치된 데이터베이스가 인터넷에서 직접 접속 가능하여 대규모 데이터 유출 사고 발생
  • Private 서브넷의 인스턴스에 퍼블릭 IP가 할당되어 외부에서 직접 접속 가능

3. 점검 대상

  • 모든 클라우드 플랫폼 (AWS, Azure, GCP, Naver Cloud, Kakao Cloud 등)
  • VPC 및 서브넷 구성
  • 인터넷 게이트웨이 및 NAT 게이트웨이
  • 라우팅 테이블

4. 판단 기준

구분기준
양호공개용 네트워크(Public 서브넷)와 내부 네트워크(Private 서브넷)가 철저히 분리된 경우
취약공개용 네트워크와 내부 네트워크가 분리되지 않아 Private 리소스가 외부에 노출된 경우

5. 점검 방법

Step 1: VPC 및 서브넷 구성 확인

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# AWS CLI 예시
# VPC 목록 확인
aws ec2 describe-vpcs

# 서브넷 목록 확인
aws ec2 describe-subnets

# Public 서브넷 식별 (인터넷 게이트웨이가 연결된 서브넷)
aws ec2 describe-route-tables --query "RouteTables[?Routes[?GatewayId!='null']]"

# Private 서브넷 식별 (NAT 게이트웨이가 연결된 서브넷)
aws ec2 describe-route-tables --query "RouteTables[?Routes[?NatGatewayId!='null']]"
1
2
3
4
5
6
7
# Azure CLI 예시
# VNet 및 서브넷 확인
az network vnet list
az network vnet subnet list --vnet-name vnet-name

# Public IP가 할당된 리소스 확인
az network public-ip list
1
2
3
4
5
6
7
# GCP CLI 예시
# VPC 및 서브넷 확인
gcloud compute networks list
gcloud compute networks subnets list

# Private IP Google Access 설정 확인
gcloud compute networks subnets describe subnet-name --region region

Step 2: 서브넷별 리소스 배치 확인

1
2
3
4
5
# AWS - 서브넷별 인스턴스 확인
aws ec2 describe-instances --query "Reservations[].Instances[].{InstanceId:InstanceId,SubnetId:SubnetId,PrivateIpAddress:PrivateIpAddress,PublicIpAddress:PublicIpAddress}"

# Public IP를 가진 인스턴스 식별
aws ec2 describe-instances --query "Reservations[].Instances[?PublicIpAddress!=null]"

Step 3: 라우팅 테이블 확인

1
2
3
4
5
# AWS - 라우팅 테이블 확인
aws ec2 describe-route-tables --route-table-ids rtb-xxxxxxxx

# Public 서브넷의 라우팅 테이블 (0.0.0.0/0 -> igw-xxxxxxx)
# Private 서브넷의 라우팅 테이블 (0.0.0.0/0 -> nat-xxxxxxx)

6. 조치 방법

Step 1: Public/Private 서브넷 분리 설계

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌─────────────────────────────────────────────────────────┐
│                        VPC                               │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌──────────────────┐         ┌──────────────────┐     │
│  │  Public Subnet   │         │ Private Subnet   │     │
│  │  (10.0.1.0/24)   │         │  (10.0.2.0/24)   │     │
│  ├──────────────────┤         ├──────────────────┤     │
│  │                  │         │                  │     │
│  │  - Web Server    │         │  - Application  │     │
│  │  - Load Balancer │         │  - Database     │     │
│  │  - NAT Gateway   │         │  - Cache        │     │
│  │                  │         │                  │     │
│  │  [Public IP]     │         │  [Private IP]   │     │
│  │       │          │         │       │          │     │
│  │       ▼          │         │       ▼          │     │
│  │  Internet Gateway│         │  NAT Gateway    │     │
│  │       │          │         │       │          │     │
│  └───────┼──────────┘         └───────┼──────────┘     │
│          │                            │                │
│          ▼                            ▼                │
│       Internet                    Internet             │
│                                                         │
└─────────────────────────────────────────────────────────┘

Step 2: Public 서브넷 구성

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# AWS - Public 서브넷 생성
aws ec2 create-subnet \
  --vpc-id vpc-xxxxxxxx \
  --cidr-block 10.0.1.0/24 \
  --availability-zone ap-northeast-2a

# 인터넷 게이트웨이 생성 및 VPC 연결
aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway \
  --vpc-id vpc-xxxxxxxx \
  --internet-gateway-id igw-xxxxxxxx

# 라우팅 테이블 생성 및 Public 서브넷 연결
aws ec2 create-route-table --vpc-id vpc-xxxxxxxx
aws ec2 associate-route-table \
  --route-table-id rtb-public \
  --subnet-id subnet-public

# 인터넷으로의 라우팅 추가
aws ec2 create-route \
  --route-table-id rtb-public \
  --destination-cidr-block 0.0.0.0/0 \
  --gateway-id igw-xxxxxxxx

# 퍼블릭 IP 자동 할당 활성화
aws ec2 modify-subnet-attribute \
  --subnet-id subnet-public \
  --map-public-ip-on-launch

Step 3: Private 서브넷 구성

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# AWS - Private 서브넷 생성
aws ec2 create-subnet \
  --vpc-id vpc-xxxxxxxx \
  --cidr-block 10.0.2.0/24 \
  --availability-zone ap-northeast-2a

# NAT 게이트웨이 생성 (Public 서브넷에 배치)
aws ec2 allocate-address --domain vpc
aws ec2 create-nat-gateway \
  --subnet-id subnet-public \
  --allocation-id eipalloc-xxxxxxxx

# Private 서브넷용 라우팅 테이블 생성
aws ec2 create-route-table --vpc-id vpc-xxxxxxxx
aws ec2 associate-route-table \
  --route-table-id rtb-private \
  --subnet-id subnet-private

# NAT 게이트웨이를 통한 인터넷 라우팅
aws ec2 create-route \
  --route-table-id rtb-private \
  --destination-cidr-block 0.0.0.0/0 \
  --nat-gateway-id nat-xxxxxxxx

# 퍼블릭 IP 자동 할당 비활성화
aws ec2 modify-subnet-attribute \
  --subnet-id subnet-private \
  --no-map-public-ip-on-launch

Step 4: 보안 그룹으로 네트워크 격리 강화

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Public 서브넷용 보안 그룹 (웹 서버)
aws ec2 create-security-group \
  --group-name web-server-sg \
  --description "Security group for web servers in public subnet" \
  --vpc-id vpc-xxxxxxxx

# HTTP/HTTPS만 허용
aws ec2 authorize-security-group-ingress \
  --group-id sg-web-server \
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress \
  --group-id sg-web-server \
  --protocol tcp \
  --port 443 \
  --cidr 0.0.0.0/0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Private 서브넷용 보안 그룹 (데이터베이스)
aws ec2 create-security-group \
  --group-name database-sg \
  --description "Security group for databases in private subnet" \
  --vpc-id vpc-xxxxxxxx

# Public 서브넷에서만 접근 허용
aws ec2 authorize-security-group-ingress \
  --group-id sg-database \
  --protocol tcp \
  --port 3306 \
  --source-group sg-web-server

# SSH는 관리자 IP에서만 허용
aws ec2 authorize-security-group-ingress \
  --group-id sg-database \
  --protocol tcp \
  --port 22 \
  --cidr 203.0.113.0/24

7. 조치 시 주의사항

주의사항설명
네트워크 설계애플리케이션 아키텍처에 맞게 Public/Private 서브넷 설계
가용성 영역 분리여러 가용성 영역(AZ)에 서브넷 분산 배치
IP 주소 계획향후 확장을 고려한 CIDR 블록 설계
라우팅 테스트변경 후 네트워크 통신 테스트 필수

8. 참고 자료


요약

VPC네트워크서브넷관리는 클라우드 네트워크 보안의 기초입니다. Public 서브넷에는 인터넷에서 접근해야 하는 리소스만 배치하고, Private 서브넷에는 데이터베이스와 내부 애플리케이션을 배치하여 네트워크 계층에서 보안을 강화해야 합니다.

핵심 액션 아이템

  1. Public/Private 서브넷 철저한 분리
  2. Public 서브넷: 웹 서버, 로드 밸런서, NAT 게이트웨이 배치
  3. Private 서브넷: 데이터베이스, 애플리케이션 서버, 캐시 배치
  4. 라우팅 테이블과 보안 그룹으로 네트워크 격리 강화
Hugo로 만듦
JimmyStack 테마 사용 중