AWS VPC Security Group(보안그룹)과 네트워크 ACL
개요
AWS는 보안그룹과 네트워크 ACL을 통해 네트워크 접근 제어를 수행하는데, 트래픽 제어와 보안을 위해 이것들에 대해 자세히 알아볼 필요가 있다.
네트워크 접근제어
네트워크 접근 제어란, IT 자원의 보호를 위해 네트워크에서 트래픽을 허용하거나 거부하는 모든 행위를 의미한다.
접근 제어의 단계는 크게 3가지로 나눌수 있다.
1 식별
: IP주소, 포트번호 프로토콜 등으로 식별한다.
2 인증
: 허용 대상을 정해두고, 허용된 IP나 프로토콜, 포트번호 등에 해당되는 트래픽만 허용되는 형태이다.
3 권한
인증에 적합한 트래픽은 권한을 부여하는 형태이다.
그럼 네트워크 단에서 IP, 포트번호가 어떻게 날아다니는지 먼저 확인해야한다. 트래픽 흐름에 대해서 알아보자
트래픽 흐름
보통 웹 서버에서의 트래픽 흐름은 아래와 같다. 패킷에 저 데이터 이외에도 데이터 오류같은걸 확인하기 위해 다른 값들도 있겠지만, 일단은 우리가 접근제어를 수행하기 위해서 사용하는 데이터는 저정도이다.
외부에서 들어오는 데이터는 인바운드 설정으로 관리하고, 나가는 데이터는 아웃바운드 설정으로 관리한다. 흐름의 방향에 따라 설정하는 것이 중요하다.
임시포트
임시적으로 출발지에서 사용하는 포트로, 응답을 수신할때 사용해야해서 잠깐 여는 포트라고 생각하면 된다. 일시적으로 살아있는 포트이고 금방 닫힌다. 임시 포트 번호 범위는 일반적으로 1,024 ~ 65,535 이며, 이는 OS 별로 범위가 상이하다.
보안그룹 VS 네트워크 ACL
보안그룹과 네트워크 ACL은 모두 인바운드, 아웃바운드 정책을 통해 트래픽을 관리하지만 여러가지 측면에서 차이가 있다. 그 차이점에 대해 알아보고자 한다.
아래는 보안그룹과 네트워크 ACL 의 구성도이다.
1. 관리대상
먼저 위에서 확인할 수 있듯이 관리하는 대상이 다르다.
보안그룹
- 서브넷 내 인스턴스
네트워크 ACL
- VPC 내 서브넷
따라서 패킷이 접근제어를 거치는 순서는 아래와 같게 된다.
패킷이 들어올때 : 네트워크 ACL의 인바운드 정책 > 보안그룹의 인바운드 정책
패킷이 나갈때 : 보안그룹의 아웃바운드 정책 > 네트워크 ACL의 아웃바운드 정책
2. 동작방식(Stateful 과 Stateless)
보안그룹
- Stateful 방식 사용
Stateful
이전 상태 정보를 기억하여 다음 상태에 적용하는 방식.
아래와 같이 인바운드에서 OK라면 아웃바운드는 규칙을 무시하고 허용한다. 아는 형님의 아는 동생의 아는 형님 방식이다.
네트워크 ACL
- Stateless 방식 사용
Stateless
이전 상태 정보를 기억하지 않아 다음 상태에 이전 정보가 활용되지 않는 방식.
인바운드에서 ok했어도 가차없이 아웃바운드 규칙을 따른다. 왔던거 모르겠고 FM대로 하자는 방식이다.
즉, 보안그룹은 인바운드에만 정책 설정해둬도 마음대로 들어왔다가 나갈수 있지만, 네트워크 ACL은 아니란다. 인바운드 아웃바운드 정책을 똑같이 해줘야 한다.
3. 정책테이블
보안그룹
- 허용규칙만 나열한다. 화이트 리스트 방식이다.
- 따라서 기본적으로 ALL DENY이며, 명시되어있지는 않다.
네트워크 ACL
- 허용과 거부 규칙 모두 나열이 가능하다.
- 맨 마지막 규칙은 기본적으로 ALL DENY 이며, 명시되어있다.
기본적으로 위와 같이 설정되어있고, 이렇게 설정해두면 모든 트래픽이 들어온다고 보면된다.
두 테이블 모두 위에서부터 순차적으로 확인한다. 그말은 즉 위에서 all allow 해두면 다 들어올수 있다는 얘기다..
정리하자면 아래와 같다.
보안그룹 | 네트워크 ACL | |
접근제어 대상 | 서브넷 내 자원 | VPC 내 서브넷 |
동작방식 | Stateful 방식 | Stateless 방식 |
정책테이블 | 허용 대상만 나열. 암묵적 화이트리스트 |
허용/거부 설정 가능. 명시적 화이트리스트 |
해당 내용에 대한 실습은 다음 글을 통해 진행하겠다.