Docker Compose Network Isolation 보안 구성 완벽 가이드! Container 네트워크 분리와 접근 제어 방법 알아보기

Container 환경에서 가장 중요한 보안 요소 중 하나는 Network 관리입니다.

많은 서버 운영 환경에서 하나의 Network에 모든 Container를 연결하는 경우가 있습니다.

기본 구조:

User

↓

Frontend

↓

Backend

↓

Database

↓

모든 Container 동일 Network

하지만 이런 구조는 보안상 위험할 수 있습니다.

문제:

Container 침해

↓

같은 Network 접근

↓

다른 Service 공격

예를 들어 Web Container가 공격받았을 경우 Database까지 직접 접근할 수 있다면 피해 범위가 커집니다.

이를 방지하기 위해 Network Isolation이 필요합니다.

보안 구조:

Internet

↓

Frontend Network

↓

Backend Network

↓

Database Network

각 Service를 분리하고 필요한 통신만 허용하는 것이 Zero Trust Network의 기본 원칙입니다.

이번 글에서는 Docker Compose Network Isolation 개념부터 Network 분리, Internal Network 구성, Service 접근 제한, Production 보안 네트워크 구조까지 알아보겠습니다.

Docker Compose Network Isolation이란?

Network Isolation은 Container 간 통신 범위를 제한하는 보안 방식입니다.

기본 개념:

모든 Container 연결

↓

위험

보안 구조:

필요한 Container만 연결

↓

접근 최소화

목표:

  • 공격 확산 방지
  • 데이터 보호
  • 서비스 분리
  • 접근 제어

Docker Compose 기본 Network 구조

Docker Compose는 기본적으로 하나의 Network를 생성합니다.

기본:

docker-compose_default

↓

Service A

Service B

Service C

문제:

모든 Container가 서로 통신 가능

예:

Web

↕

API

↕

Database

규모가 커질수록 분리가 필요합니다.

Docker Compose Multi Network 구조

권장 구조:

Frontend Network

↓

Web Container


Backend Network

↓

API Container


Database Network

↓

DB Container

최종:

User

↓

Web

↓

API

↓

Database

Web은 Database를 직접 볼 수 없습니다.

Docker Compose Network 생성 방법

docker-compose.yml:

networks:

  frontend:

  backend:

  database:

구조:

frontend

↓

web


backend

↓

api


database

↓

mysql

Docker Compose Service별 Network 연결

예:

services:

  web:

    image: nginx

    networks:

      - frontend


  api:

    image: api-server

    networks:

      - frontend

      - backend


  database:

    image: mysql

    networks:

      - database

결과:

web

↓

api

↓

database

직접 접근 차단:

web

X

database

Docker Compose Internal Network 구성

Database는 외부 접근이 필요 없는 경우가 많습니다.

설정:

networks:

  database:

    internal: true

효과:

External Access

↓

차단

↓

Database

보안 향상:

  • Database 외부 노출 방지
  • 공격 표면 감소

Docker Compose Port 노출 최소화

잘못된 구조:

ports:

 - "3306:3306"

결과:

Internet

↓

Database

위험:

  • 무차별 로그인 공격
  • Database 취약점 공격

권장:

Database

↓

Internal Network

↓

Application만 접근

Docker Compose Network Alias 관리

Service 통신에서는 이름 기반 접근을 사용합니다.

예:

mysql:3306

장점:

  • IP 변경 영향 없음
  • Container 재생성 대응

구조:

Application

↓

mysql hostname

↓

Database

Docker Compose Network Traffic 제어

Network Isolation은 Traffic 흐름을 제한합니다.

예:

허용:

API

↓

Database

차단:

Web

↓

Database

원칙:

필요한 통신만 허용

Docker Compose Microservice Network 구조

Microservice 환경:

Gateway Network

↓

Service Network

↓

Database Network

예:

API Gateway

↓

User Service

Order Service

Payment Service

↓

Database

각 Service는 필요한 Network만 연결합니다.

Docker Compose Network와 Zero Trust

Zero Trust Network:

기본 차단

↓

필요한 접근만 허용

Docker Compose 적용:

Network 분리

↓

Service 접근 제한

↓

보안 강화

Docker Compose Network 보안 점검

확인:

docker network ls

상세:

docker network inspect network_name

확인 항목:

  • 연결 Container
  • IP 정보
  • Network 설정

Docker Compose Network 장애 대응

Network 분리는 보안을 높이지만 관리가 필요합니다.

문제:

Service 연결 실패

확인:

Network 연결 상태

↓

Container DNS

↓

Port 확인

명령:

docker compose exec service ping target

Docker Compose Production Network 구조

실제 운영:

Internet

↓

WAF

↓

Load Balancer

↓

Frontend Network

↓

API Gateway

↓

Backend Network

↓

Microservice

↓

Database Network

↓

Database

보안 계층:

외부

↓

Public

↓

Private

↓

Internal

Docker Compose Network Isolation Best Practice

추천:

Network 분리

Frontend / Backend / Database 분리

Database 외부 공개 금지

Internal Network 사용

최소 연결

필요한 Service만 연결

Port 최소 공개

외부 접근 제한

정기 점검

Network 구성 확인

자주 묻는 질문

Docker Compose 기본 Network만 사용하면 안 되나요?

작은 개발 환경에서는 가능하지만 Production에서는 분리가 권장됩니다.

Network Isolation은 Firewall과 같은 기능인가요?

비슷한 목적이 있지만 Container 내부 통신 제어에 초점을 둡니다.

Database는 반드시 별도 Network가 필요한가요?

Production 환경에서는 권장됩니다.

Network를 너무 많이 나누면 문제가 생기나요?

관리 복잡성이 증가하므로 서비스 구조에 맞게 설계해야 합니다.

마무리

Docker Compose Network Isolation은 Container 환경에서 공격 확산을 막고 서비스 간 접근을 제어하는 핵심 보안 기술입니다.

최종 구조:

Internet

↓

WAF

↓

Frontend Network

↓

Backend Network

↓

Database Network

Production 서버에서는 모든 Container를 연결하는 방식보다 필요한 통신만 허용하는 구조가 안정적입니다.

다음 글에서는 Container 실행 중 발생하는 이상 행동을 탐지하는 Docker Compose Runtime Security 구축 방법을 알아보겠습니다.

댓글 남기기