Network Security Group
1. 정의 (Definition)
**Network Security Group (AWS Security Group)**은 인스턴스(EC2, RDS, ENI) 레벨에서 트래픽을 제어하는 Stateful(상태 저장) 가상 방화벽입니다.
2. 등장 배경 (Problem Context)
- 문제: 기존의 라우터 기반 방화벽(ACL)은 모든 패킷을 개별적으로 검사하므로, “들어오는 건 허용하지만 나가는 건 막는다”와 같은 세밀한 세션 관리가 어려웠습니다. 특히 요청에 대한 응답 트래픽을 일일이 허용해줘야 하는 번거로움이 있었습니다.
- 해결: 연결(Session)의 상태를 기억하여, “내가 요청해서 나가는 트래픽에 대한 응답”은 자동으로 들어오게 해주는 Stateful 방화벽이 도입되었습니다.
3. 핵심 메커니즘 (How it Works)
3.1. Stateful (상태 저장)
Security Group의 가장 큰 특징은 Connection Tracking입니다.
- Inbound 허용 시: 누군가 나에게 접속을 시도해서 허용되었다면, 내가 그 사람에게 보내는 응답(Outbound)은 규칙이 없어도 자동으로 허용됩니다.
- Outbound 허용 시: 내가 외부로 요청을 보냈다면, 그에 대한 응답(Inbound)은 규칙이 없어도 자동으로 허용됩니다.
3.2. Allow Only (화이트리스트)
- Security Group은 오직 허용(Allow) 규칙만 만들 수 있습니다. “특정 IP 차단(Deny)” 규칙은 만들 수 없습니다. (차단은 NACL에서 해야 함)
- 기본적으로 모든 인바운드 트래픽은 차단(Implicit Deny)되어 있으며, 규칙에 있는 것만 통과시킵니다.
4. 불변 조건과 보장 범위 (Invariants & Guarantees)
- 인스턴스 단위 적용: 서브넷 단위가 아니라 ENI(Network Interface) 단위로 적용됩니다. 같은 서브넷에 있어도 인스턴스마다 다른 보안 그룹을 가질 수 있습니다.
- 즉시 적용: 규칙을 수정하면 기존 연결에는 영향을 주지 않을 수 있지만(일부 케이스), 새로운 연결에는 즉시 적용됩니다.
5. 비유 (Analogy)
아파트 경비실(Stateful) vs 공항 보안 검색대(Stateless/NACL)
- Security Group (경비실): 입주민(Outbound)이 밖으로 나가면 얼굴을 기억해뒀다가, 돌아올 때(Inbound Response)는 검사 없이 문을 열어줍니다. 외부 손님은 초대장(Inbound Rule)이 있어야만 들어올 수 있습니다.
- NACL (보안 검색대): 나갈 때도 검사하고, 들어올 때도 검사합니다. 나갔던 사람이 돌아와도 규칙에 “입국 허용”이 없으면 못 들어옵니다.
6. 실무적 함의 (Operational Implications)
- ALB-Backend 구성: 백엔드 인스턴스의 Security Group Inbound 규칙에 “IP 주소” 대신 **“ALB의 Security Group ID”**를 소스(Source)로 지정하는 것이 Best Practice입니다. (ALB IP가 바뀌어도 관리 불필요)
- 트러블슈팅: 접속이 안 될 때, Security Group은 타임아웃(Timeout) 형태로 증상이 나타납니다(패킷 드랍). 반면 NACL이나 OS 방화벽은 거부(Refused) 응답을 줄 수도 있습니다.
7. 주의사항 / 오해 (Pitfalls & Misconceptions)
- “핑(Ping)이 안 나가요”: Outbound 규칙을 확인하세요. 기본적으로 Outbound는 모두 허용이지만, 실수로 지웠다면 나가는 통신도 막힙니다.
- “차단 규칙을 넣고 싶어요”: Security Group에서는 불가능합니다. 특정 악성 IP를 막으려면 **NACL(Network ACL)**을 써야 합니다. NACL은 Stateless하므로 Inbound/Outbound 규칙을 모두 신경 써야 합니다.
8. References
References
- AWS Docs: Security groups for your VPC
- Related Note: AWS ALB Timeouts