Overview
AWS에서 보안 그룹(Security Group)과 네트워크 ACL(Network ACL)은 VPC(Virtual Private Cloud) 내 리소스의 네트워크 트래픽을 제어하는 핵심 보안 도구다.
- Security Group은 인스턴스 단위로 작동하는 상태 저장형(Stateful) 방화벽이고,
- Network ACL은 서브넷 단위로 작동하는 비상태형(Stateless) 방화벽이다.
두 보안 메커니즘은 기능, 적용 대상, 처리 방식 등에서 서로 다르기 때문에, 정확한 개념을 이해하고 상황에 맞게 조합하여 사용하는 전략이 중요하다.
이 글에서는 두 보안 도구의 차이점을 표로 비교하고, 제한 사항 및 실무 활용 팁까지 함께 정리한다.
📅 관련 글
2022.02.13 - [AWS] - AWS IAM (Identity and Access Management) 개요 및 설정 방법
2022.02.07 - [AWS] - AWS EC2 인스턴스 생성
2022.02.13 - [AWS] - AWS S3 (Simple Storage Service) 개요 및 활용 방법
2023.03.30 - [AWS] - AWS Secrets Manager란?(OAuth, SSO)
2023.03.29 - [AWS] - AWS CLI 정리
2023.03.28 - [AWS] - AWS IAM이란?
2023.03.28 - [AWS] - AWS S3 권한이란?
2023.03.28 - [AWS] - AWS S3란?(개념, 속성)
2023.03.30 - [AWS] - AWS Cloudfront란? / Canary 및 Blue-Green 배포
2023.04.03 - [AWS] - AWS VPC란?
2023.05.26 - [AWS] - AWS IRSA(IAM Roles for Service Accounts)란?
2024.11.07 - [AWS] - AWS Ingress Annotations 정리
2024.11.04 - [AWS] - AWS Assume Role이란?
2024.11.16 - [AWS] - AWS Network ACL vs Security Group
2024.11.21 - [AWS] - ALB access Log 활성화 → S3 권한 설정 및 로그 저장
2024.11.24 - [AWS] - EKS Pod Identity Addon
2024.11.27 - [AWS] - AWS DynamoDB란?
2025.01.03 - [AWS] - AWS DynamoDB Local 설치
AWS Network ACL vs Security Group
항목 | Security Group (Stateful) | Network ACL (Stateless) |
기준 단위 | EC2 인스턴스(ENI) 기준 | 서브넷 기준 |
방화벽 유형 | 상태 저장형 (Stateful) | 비상태형 (Stateless) |
허용/거부 | 허용만 가능 | 허용 및 거부 가능 |
응답 처리 | 인바운드 허용 시, 자동으로 아웃바운드 응답 허용 | 인바운드/아웃바운드 각각 명시 필요 |
평가 순서 | 모든 규칙 평가 후 허용/거부 결정 | 규칙 번호 순서로 평가, 첫 일치 룰 적용 |
적용 범위 | 명시적으로 지정한 인스턴스에만 적용 | 서브넷 전체에 자동 적용 |
기본 동작 | 기본 차단 (인바운드), 기본 허용 (아웃바운드) | 기본 전면 차단 |
상호 참조 가능 여부 | 다른 SG 참조 가능 (보안 그룹 간 허용) | SG 참조 불가 |
로깅 | VPC Flow Logs 필요 | VPC Flow Logs + NACL 로그(선택적 활성화) 가능 |
제한 사항
- Network ACL
- ACL 개수 제한: VPC당 최대 200개
- 규칙 수 제한: 인바운드 20개, 아웃바운드 20개 (기본), 최대 40개까지 확장 가능
- 성능 영향: 규칙 수가 많아지면 평가 비용 증가 → 성능 저하 가능성 있음
- Security Group
- SG 개수 제한: VPC당 최대 2,500개
- 규칙 수 제한: SG당 인바운드 60개 / 아웃바운드 60개
- ENI당 적용 가능한 SG 수: 최대 5개
실무에서 자주 묻는 질문 (FAQ)
Q1. 둘 중 하나만 써도 되나요?
→ 대부분의 AWS 환경에서는 Security Group만 사용해도 충분하다.
다만 서브넷 레벨에서 트래픽을 선제적으로 제한하거나 특정 규칙 차단이 필요한 경우, NACL을 병행한다.
Q2. NACL이 먼저 적용되나요, SG가 먼저 적용되나요?
→ 둘 다 적용된다. 먼저 NACL이 서브넷 레벨에서 적용되고, 그 다음 인스턴스에 적용된 Security Group이 적용된다.
Q3. 로그로 추적할 수 있나요?
→ NACL 로그는 최근에 추가된 기능이며, VPC Flow Logs를 함께 활성화하면 양방향 트래픽 흐름 분석이 가능하다.
로그 추적 전략 및 실무 팁 요약
- VPC Flow Logs: Subnet, ENI 단위로 활성화 가능 (CloudWatch Logs에 전송)
- NACL 로그: 최근 활성화 가능 (CloudTrail 연계 필요)
- 실무 팁:
- Flow Logs + Athena → 쿼리 기반 분석
- Lambda 기반 알람 설정으로 비정상 접속 추적 가능
Q4. 보안 강화 팁은?
- 외부 접속이 필요한 경우 Security Group에서 정밀 제어
- 내부 마이크로서비스 간 트래픽은 NACL로 블록 단위 필터링
- 접근이 불필요한 포트는 NACL로 완전 차단 (예: RDP, SMTP 등)
예: EC2에 RDP(3389 포트) 열려 있음 → SG는 허용했지만 NACL에서 차단하면 외부 접근 원천 차단 가능
1Security Group vs NACL 트래픽 흐름도
[Client]
↓ (Inbound)
[NACL (Subnet)]
↓
[Security Group (ENI)]
↓
[EC2 Instance]
- 반대 방향의 Outbound도 같은 흐름을 타며 NACL → SG 순으로 필터링됨.
Terraform 보안 예시 코드 블록
# Example: Security Group
resource "aws_security_group" "web_sg" {
name = "web-sg"
vpc_id = aws_vpc.main.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
보안 조합 전략 예시 표 (SG + NACL)
시나리오 | SG 설정 | NACL 설정 |
외부 웹 접속 허용 | HTTP/HTTPS Ingress 허용 | 포트 80/443 Inbound 허용 |
내부 DB 접속 제한 | MySQL 포트 제한 (SG에서만 허용된 IP) | DB 포트에 대한 NACL 거부 규칙 추가 가능 |
비인가 외부 IP 차단 | 특정 CIDR 제외 | CIDR 별 Ingress 거부 (NACL 사용) |
마무리: 역할을 구분하고 함께 쓰자
- Security Group은 기본 방화벽이며 인스턴스 수준의 접근 제어에 적합
- Network ACL은 서브넷 레벨에서 보다 광범위하거나, 특정 트래픽 차단이 필요한 경우 활용
대부분의 워크로드에서는 Security Group만으로도 충분하지만, 보안 감사를 고려하거나 서비스간 트래픽을 통제해야 하는 환경이라면 NACL과의 조합이 중요하다.
결국 “둘 중 하나”가 아닌 “어떤 트래픽을 어디서 제어할 것인가”에 따라 역할을 나누는 것이 베스트 프랙티스다.
Reference
'AWS' 카테고리의 다른 글
EKS Pod Identity Addon (0) | 2024.11.24 |
---|---|
ALB access Log 활성화 → S3 권한 설정 및 로그 저장 (0) | 2024.11.21 |
AWS Ingress Annotations 정리 (0) | 2024.11.07 |
AWS Assume Role이란? (0) | 2024.11.04 |
AWS IRSA(IAM Roles for Service Accounts)란? (0) | 2023.05.28 |