AWS에서 네트워크 접근제어를 적용하는 서비스는
'네트워크 ACL'과 '보안그룹' 으로 나눌 수 있음
적용 범위, 단위 및 규칙 등에 차이가 있어 그 차이를 정리해보고
이 2개를 어떻게 활용해서 AWS 네트워크 접근제어를 구성해야할까 고민해보자
- 온프레미스 환경에서 일종의 방화벽 역할을 하는 AWS 서비스
- 보안그룹과 NACL은 작동 방식 등에 차이가 있으므로 이걸 이해하고 어떻게 활용해서 네트워크를 구성하는게 적절할지 고민할 수 있어야겠다
1. 보안그룹
1.1 적용 Level
- 인스턴스 단위로 적용
-> 각 인스턴스에 적용하고자 하는 보안그룹 설정 가능
*보안그룹을 적용할 수 있는 인스턴스
- EC2 뿐만 아니라 RDS, ELB 등 VPC 내에서 Elastic Network Interface(ENI)를 갖는 모든 서비스
1.2 적용 방식
- 인스턴스에 대한 인바운드/아웃바운드 트래픽 제어
- 프로토콜, 포트 범위, 대상(IP) 지정
- 인바운드/아웃바운드 규칙으로 나뉨
- 허용 규칙만 생성 가능
-> 화이트리스트 방식, 블랙리스트 방식 설정 불가
- 하나의 인스턴스에 여러개의 보안그룹 설정 가능, 최대 5개까지
1.3 동작 방식
- Stateful(상태를 저장) 방식
-> 한번 인바운드에서 허용된 트래픽은 아웃바운드 규칙에 영향받지 않음
-> 한번 아웃바운드에서 허용된 트래픽은 인바운드 규칙에 영향받지 않음
- Stateful 방식이기에 아웃바운드를 설정하지 않아도 인바운드에서 허용된 트래픽은 아웃바운드에 영향받지 않고 인/아웃바운드 트래픽 통신 가능, but 외부에서 오는 트래픽 뿐만 아니라 인스턴스 내에서 자체적으로 발생하는 트래픽 제어하기 위한 목적에서는 아웃바운드 설정 필요
2. 네트워크 ACL
2.1 적용 레벨
- 서브넷 단위로 적용
-> 서브넷 별로 적용하고자 하는 NACL 설정
2.2 적용 방식
- 서브넷 간 트래픽 제어
-> 일종의 서브넷 내 인스턴스에 접근 전 최전선에 있는 방화벽
- 규칙#, 프로토콜, 포트 범위, 대상(IP), 허용/거부 지정
- 인바운드/아웃바운드 규칙으로 나뉨 - 보안그룹과 동일
-> 인바운드 정책은 출발지로 지정/ 아웃바운드 정책은 목적지로만 지정 가능
- 하나의 서브넷에는 한개의 NACL만 설정 가능
- 허용/거부 규칙 설정 가능
-> 특정 대상 차단은 NACL
- 규칙 값이 작을수록 우선 적용
- 규칙 목록은 인바운드/아웃바운드 각각 최대 20개까지 지정 가능
- 설정된 서브넷 하위의 모든 인스턴스에 자동 적용
즉 client 요청 허용 > response도 허용해야 하는데,
response(아웃바운드)의 경우 특정 포트로 지정하기가 어려움
why? 서버는 정해진 well-know 포트를 사용하지만(443 등)
client OS에서 사용하는 포트범위는 다양하고 OS마다 상이하기 때문
허용하고자 하는 IP를 특정하기 어렵다면 서비스포트로 제어하는 것도 고려?
2.3 동작 방식
- Stateless(상태를 저장x) 방식
-> 인바운드를 통과한 트래픽도 아웃바운드 규칙의 영향을 받음
-> 아웃바운드를 통과한 트래픽도 인바운드 규칙의 영향을 받음
- 인바운드 규칙을 적용받아 외부에서 들어온 패킷이 다시 밖으로 나가기 위해서는 아웃바운드 규칙도 적용해주어야 함
[출처]
1) https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-VPC-%EA%B0%9C%EB%85%90-%EC%82%AC%EC%9A%A9-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95-Security-Group-NACL
2)https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_SecurityGroups.html#DefaultSecurityGroup
3) https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-network-acls.html