보안 그룹(Security Group) vs NACL: 방화벽 계층 구조 이해하기

 클라우드 보안, 왜 두 번 잠글까?

집을 지킬 때 대문(Gate)에도 잠금장치가 있고, 현관문(Door)에도 도어락이 있습니다. 이중으로 잠그면 도둑이 들어오기 훨씬 어려워지기 때문입니다. 클라우드 네트워크 보안도 마찬가지입니다.

AWS와 같은 클라우드 환경(VPC)에는 두 가지 핵심 방화벽이 존재합니다. 바로 네트워크 ACL(NACL)보안 그룹(Security Group)입니다. 얼핏 보면 둘 다 트래픽을 막고 허용하는 똑같은 역할을 하는 것 같지만, 작동 위치와 방식, 그리고 결정적인 기능에서 큰 차이가 있습니다. 오늘은 이 두 방화벽의 계층 구조와 차이점을 완벽하게 정리해 드립니다.


1. 보안 그룹(Security Group): 인스턴스를 지키는 '현관문'

보안 그룹은 가장 친숙하고 자주 다루게 되는 보안 설정입니다. EC2(가상 서버), RDS(데이터베이스)와 같은 인스턴스 단위로 적용되는 가상 방화벽입니다.


특징 ①: 상태 저장(Stateful)

보안 그룹의 가장 큰 특징은 '상태를 기억한다'는 점입니다. 예를 들어, 웹 서버(80 포트)로 들어오는 요청(Inbound)을 허용했다면, 그 요청에 대한 응답(Outbound)은 별도로 설정하지 않아도 자동으로 허용됩니다. 들어온 손님은 나가는 문이 자동으로 열리는 것과 같습니다. 이 덕분에 설정이 매우 간편합니다.

특징 ②: 허용(Allow)만 가능

보안 그룹에는 "특정 IP를 차단해라(Deny)"라는 규칙을 넣을 수 없습니다. 기본적으로 모든 접속을 차단한 상태에서 "이 IP는 들어와도 좋아(Allow)"라는 규칙만 추가할 수 있습니다. 즉, 화이트리스트(Whitelist) 방식입니다.


2. 네트워크 ACL(NACL): 서브넷을 지키는 '대문'

NACL(Network Access Control List)은 보안 그룹보다 더 넓은 범위인 서브넷(Subnet) 단위에서 작동합니다. 서브넷 안에 있는 모든 인스턴스에 영향을 미치는 거대한 검문소입니다.


특징 ①: 상태 비저장(Stateless)

NACL은 ‘기억력이 없습니다’. 들어오는 트래픽(Inbound)을 허용했더라도, 나가는 트래픽(Outbound)에 대한 규칙이 없다면 응답이 나가지 못합니다. 따라서 웹 서비스를 하려면 들어오는 80 포트뿐만 아니라, 나가는 포트(Ephemeral Ports)까지 양방향 규칙을 모두 설정해 주어야 합니다. 설정이 까다로운 이유입니다.

특징 ②: 차단(Deny) 가능

NACL의 존재 이유는 바로 이 기능 때문입니다. 특정 악성 IP나 해커의 공격이 감지되었을 때, "이 IP는 절대 들어오지 마(Deny)"라고 명시적으로 차단할 수 있습니다. 블랙리스트(Blacklist) 관리가 가능합니다.

특징 ③: 규칙 순서(Rule Number)의 중요성

보안 그룹은 모든 규칙을 동시에 검사하지만, NACL은 번호가 낮은 규칙부터 순서대로 처리합니다.

  • 규칙 100: IP 1.2.3.4 차단 (Deny)
  • 규칙 200: 모든 IP 허용 (Allow) 만약 1.2.3.4가 접속하면 100번 규칙에서 즉시 차단되고 검사가 끝납니다. 순서를 잘못 설정하면 의도치 않게 접속이 허용되거나 차단될 수 있어 주의가 필요합니다.


3. 한눈에 보는 결정적 차이

구분

보안 그룹 (Security Group)

네트워크 ACL (NACL)

적용 범위

인스턴스 (EC2, RDS 등)

서브넷 (Subnet)

작동 방식

Stateful (응답 자동 허용)

Stateless (응답 별도 허용 필요)

규칙 유형

허용(Allow)만 가능

허용(Allow) 및 차단(Deny) 가능

규칙 순서

순서 없음 (모두 적용)

번호 순서대로 적용

주 용도

일상적인 접근 제어 (기본)

특정 IP 차단, 서브넷 보안 강화



4. 실전 전략: 계층적 보안(Defense in Depth) 구성하기

그렇다면 실무에서는 어떻게 구성해야 할까요? "둘 다 빡빡하게 설정하면 안전하겠지?"라고 생각할 수 있지만, 관리의 복잡성을 고려해야 합니다.

  • 1차 방어선 (NACL): 너무 복잡하게 설정하지 않는 것이 좋습니다. 기본적으로는 모두 허용(Allow All)해 두고, 디도스(DDoS) 공격이나 명확한 악성 IP를 차단(Deny)하는 용도로만 사용하는 것이 효율적입니다.
  • 2차 방어선 (보안 그룹): 실제 포트 관리와 접근 제어는 여기서 수행합니다. 웹 서버에는 80/443 포트만 열고, DB 서버에는 웹 서버의 보안 그룹 ID만 허용하는 식으로 최소 권한 원칙을 철저히 적용합니다.


보안은 디테일에서 완성된다

많은 클라우드 초보자가 접속이 안 될 때 보안 그룹만 확인하느라 시간을 허비합니다. 하지만 범인은 의외로 NACL의 아웃바운드 규칙 누락일 때가 많습니다.

  • 접속이 아예 안 된다? → 보안 그룹의 인바운드 규칙 확인
  • 들어오는 건 되는데 응답이 없다? → NACL의 아웃바운드 규칙 확인
  • 특정 IP만 막고 싶다? → NACL의 인바운드 Deny 규칙 추가

여러분의 VPC는 안전한가요? 지금 바로 콘솔을 열어 보안 그룹에는 꼭 필요한 구멍만 뚫려 있는지, NACL에는 불필요한 차단 규칙이 없는지 점검해 보시기 바랍니다.


댓글 쓰기

다음 이전