[AWS] NACL & Security Group.

김지환·2023년 9월 11일
0

TL;DR

aws network protection에 사용할 수 있는 여러 resource중 Network Access Control Lists ( NACLs) & Security Group를 비교하고 실제 어떻게 사용하면 좋을지 알아보자.

Network Access Control Lists

Subnet수준에서의 방화벽으로 특정한 ip 주소를 차단하는데 탁월한 기능이다. 외부에서 인스턴스로 traffic이 들어올 때 security group 보다 먼저 traffic에 대한 방화벽으로서 작용하고 통과된 traffic이 security group에 설정된 방화벽 규칙을 따르게 된다.

반대로 ec2 instance에서 밖으로 나가는 traffic은 Security Group -> NACL 순으로 적용되게 된다.

하나의 subnet에는 하나의 NACL만이 적용이 된다. 만일 새로운 subnet을 만든다면 default NACL이 만들어지게 된다. AWS 에서는 Default NACL을 변경하기를 권장하지 않고 새로 Custom NACL을 만들어서 사용하기를 권장한다.

Security Group

Instance 수준에서 적용되는 방화벽이다. Security Group은 단일 인스턴스에 여러개를 적용하는 것이 가능하다.

NACL vs Security Group 차이점

둘 사이에는 약간의 차이가 있는데 그렇다고 해서 특정상황에서는 NACL만 혹은 Security Group만 사용해야되는 아니다. 용도에 따라 차이가 있는 것일 뿐이지 결국엔 둘을 잘 혼합해서 더 나은 Network Protection환경을 구축하는 것이 최종 목표가 될 것이다.

Stateful vs Stateless

둘은 상태성과 무상태성의 차이가 존재하는데 여기서 상태성의 의미는 Traffic에 대한 정보를 기억하고 있어서 Inbound 로 들어온 혹은 Outbound로 나간 traffic에 대해서는 Outbound, Inbound를 허용한다는 의미 이다.

Security Group같은 경우에는 Stateful 하기 때문에 Inbound, Outbound가 한 번 허용된 traffic에 대해서는 다음 Outbound, Inbound에 대해서는 모두 허용하게 된다.

하지만 NACL같은 경우는 Stateless하기 때문에 첫 번째 Bound규칙을 통과한 traffic이라 하더라도 NACL의 Inbound, Outbound 규칙에 따라서 Deny될 수도 있다.

따라서 NACL같은 경우는 Inbound, Outbound 규칙을 모두 잘 설정해주어야 한다.

Deny rule의 존재

Security Group은 Allow에 대한 규칙만을 설정할 수 있지만 NACl은 Allow 뿐만 아니라 Deny rule을 추가할 수 있다. 따라서 좀 더 다양한 rule을 적용할 수 있다는 특징이 있다.

한 번 통과한 규칙에 대한 중복 rule적용은 무시된다.

NACL의 규칙은 번호가 존재하는데 이 때 번호가 낮을 수록 높은 우선순위를 가지게 된다. 또한 한 번 적용된 규칙에 대한 다음 규칙들은 모두 무시되게 되는데 간단한 예로

100 번의 규칙에서 모든 traffic에 대한 접근을 허용하고 나면 그 아래에 어떤 규칙이 오든 이미 허용되었기 때문에 무시되게 된다. 따라서 200, * 에대한 rule은 무시되게 된다.

Ephemeral Port

client 가 server에 Connection을 요청하게 될 때는 항상 Port가 할당되어야 하는데 이 때 client 쪽은 server 측과 임시연결을 위한 Port를 설정하게 된다. 이를 Ephemeral Port라고 하며 linux kernel의 경우 보통 32,768 ~ 60,999 사이의 port로 무작위 할당이 되게 된다.

이러한 점을 유의해서 NACL을 설정을 해야하는데 예를들어 특정 DB에 요청을 날리게 될 때 해당 DB의 Outbound와 client의 Inbound는 이 Ephemeral Port의 범위에 맞춰서 port range를 설정을 잘 해줘야 한다.

그렇지 않으면 port가 열려있지 않기 때문에 모두 차단되고 Timeout issue가 발생하게 된다.

Reference

AWS-vpc-network

profile
Developer

0개의 댓글