[AWS] 보안 그룹과 네트워크 ACL

백엔드·2025년 9월 28일

AWS 네트워크

목록 보기
2/4

보안 그룹(Security Group) vs. 네트워크 ACL(NACL)

AWS는 '심층 방어(Defense in Depth)'라는 보안 원칙을 기반으로, 단일 방어선이 뚫리더라도 다음 방어선이 위협을 막을 수 있도록 다계층의 보안 체계를 제공합니다. VPC 환경에서 가장 기본적이면서도 강력한 두 가지 방화벽 계층이 바로 보안 그룹(Security Group)과 네트워크 ACL(Network Access Control List, NACL)입니다.

  • 보안 그룹 (Security Group): EC2 인스턴스와 같은 개별 리소스의 네트워크 인터페이스(ENI) 수준에서 트래픽을 제어하는 가상 방화벽입니다.
    • 핵심 비유 - '사무실 출입증 시스템' 또는 '개인 경호원': 보안 그룹은 특정 인스턴스(하나의 사무실)를 전담하여 보호하는 개인 경호원과 같습니다. 이 경호원은 허가된 사람(Source)만이 정해진 문(Port)을 통해 들어오고 나갈 수 있도록 허용(Allow) 규칙 목록을 가지고 있습니다.
  • 네트워크 ACL (NACL): 서브넷 수준에서 인바운드 및 아웃바운드 트래픽을 제어하는 방화벽입니다.
    • 핵심 비유 - '빌딩 층별 출입 게이트' 또는 '울타리': NACL은 특정 서브넷(빌딩의 한 층 전체)으로 들어오고 나가는 모든 트래픽을 검사하는 더 넓은 범위의 방어선입니다. 이는 빌딩 주변을 둘러싼 울타리나 각 층의 입구에 설치된 보안 게이트와 같아서, 허용(Allow) 규칙뿐만 아니라 특정 출처의 접근을 명시적으로 거부(Deny)하는 규칙도 설정할 수 있습니다.

상태 저장(Stateful) vs. 상태 비저장(Stateless) 심층 분석

보안 그룹과 NACL의 가장 근본적인 차이점은 트래픽의 상태(State)를 추적하는지 여부입니다.

  • Stateful (보안 그룹):
    • 작동 방식: 보안 그룹은 '상태 저장(Stateful)' 방식으로 동작합니다. 이는 한 번 허용된 연결을 기억한다는 의미입니다. 예를 들어, 사용자가 웹 서버의 80번 포트(HTTP)로 접속하는 것을 인바운드 규칙에서 허용했다고 가정해 봅시다. 웹 서버가 이 요청에 대한 응답을 사용자에게 다시 보낼 때, 이 응답 트래픽은 아웃바운드 규칙을 일일이 확인하지 않고도 '자동으로' 허용됩니다. 왜냐하면 보안 그룹이 "아, 이 나가는 트래픽은 아까 허가받고 들어온 요청에 대한 정당한 응답이구나"라고 연결 상태를 기억하고 있기 때문입니다.
  • Stateless (NACL):
    • 작동 방식: 반면, NACL은 '상태 비저장(Stateless)' 방식으로 동작합니다. 이는 들어오는 트래픽과 나가는 트래픽을 완전히 별개의 사건으로 취급하며, 연결 상태를 기억하지 않습니다. 모든 네트워크 패킷은 규칙 목록과 대조하여 하나하나 독립적으로 검사받습니다. 따라서 인바운드 규칙에서 80번 포트로 들어오는 요청을 허용했더라도, 그에 대한 응답 트래픽이 밖으로 나가려면 아웃바운드 규칙에서도 해당 트래픽을 '명시적으로' 허용해야 합니다. 이때 응답 트래픽은 보통 1024-65535번 사이의 임시 포트(Ephemeral Port)를 사용하므로, 아웃바운드 규칙에서 이 포트 범위를 열어주어야 정상적인 통신이 가능합니다.

이 두 가지 보안 도구는 단순히 기능의 차이를 넘어, 보안을 설계하는 철학의 차이를 반영합니다. 보안 그룹은 기본적으로 '아무것도 허용하지 않는 상태(Deny All)'에서 시작하여 필요한 것만 '허용(Allow)'하는 규칙을 추가하는 긍정적 보안 모델(Positive Security Model)을 따릅니다. 이는 특정 역할을 수행하는 인스턴스에 필요한 최소한의 접근만 허용하여 공격 표면을 줄이는 데 초점을 맞춥니다. 즉, '신뢰'는 명시적으로 부여되어야 한다는 철학입니다.

반면, NACL은 '허용'과 '거부' 규칙을 모두 사용하여 네트워크 경계에서 트래픽을 명시적으로 통제합니다. 이는 서브넷이라는 더 넓은 경계에서 알려진 위협을 사전에 차단하고, 정책에 맞지 않는 트래픽을 필터링하는 경계 보안(Perimeter Security)의 역할을 수행합니다. 모든 트래픽을 '일단 불신'하고 규칙에 따라 엄격하게 판단하는 원칙을 따릅니다.

결론적으로, 보안 그룹은 인스턴스의 역할을 정의하고 그 역할에 맞는 접근을 제어하는 '역할 기반 접근 제어(Role-Based Access Control)'에 가깝고, NACL은 네트워크의 최전선에서 원치 않는 트래픽을 걸러내는 '필터'에 가깝습니다. 이 두 가지를 함께 사용하여 다계층 방어 체계를 구축하는 것이 바로 AWS가 권장하는 '심층 방어' 전략의 핵심입니다.

핵심 비교 테이블: 보안 그룹 vs. 네트워크 ACL

특징보안 그룹 (Security Group)네트워크 ACL (Network ACL)
적용 수준인스턴스의 네트워크 인터페이스(ENI) 수준  서브넷 수준  
상태Stateful (상태 저장): 응답 트래픽 자동 허용  Stateless (상태 비저장): 응답 트래픽도 명시적 규칙 필요  
허용 규칙Allow 규칙만 지원 (기본적으로 모두 거부)  AllowDeny 규칙 모두 지원  
규칙 평가연결된 모든 그룹의 모든 규칙을 종합적으로 평가  규칙 번호가 낮은 순서대로 평가, 일치하는 첫 규칙 적용  
기본 규칙새 그룹: 인바운드 모두 거부, 아웃바운드 모두 허용  기본 NACL: 인/아웃바운드 모두 허용. 사용자 지정 NACL: 인/아웃바운드 모두 거부  
비유개인 경호원, 사무실 출입증 시스템건물의 울타리, 층별 보안 게이트
profile
백엔드 개발자

0개의 댓글