Security Group VS NACL

최수환·2022년 9월 22일
1

AWS-SAA

목록 보기
13/23
post-thumbnail

저번 포스팅에서 AWS의 네트워크 VPC에 대해서 알아보았다. 하지만 서브넷간의/인스턴스간의 트래픽의 유출/유입에 대해서 어떻게 원하지않는 트래픽을 거부하고 원하는 트래픽만 허용하는지 궁금할 것이다. 이번 포스팅에서는 트래픽의 유출과 유입을 통제하는 보안그룹과 NACL을 다루어 볼 것이다.

Security Group

보안그룹은 방화벽과 같은 역할을 하며 ENI에 부착되어 인스턴스 의 트래픽의 유출과 유입을 통제한다.모든 ENI에는 최소 하나 이상의 보안그룹이 연결돼야 하고, 여러개의 보안그룹이 하나의 ENI에 부착될 수도 있고, 하나의 보안그룹이 여러 ENI에 부착될 수 있다.
📌 보안그룹은 다른 보안그룹을 포함하는, 즉 다른 보안그룹 규칙을 포함한 새 보안그룹을 만들 수 있는데 이것은 네트워크 계층간 트래픽 출입 통제에 있어서 가장 유연하고 안전한 방식이다.

ENI


Elastic Network Interface는 가상의 네트워크 카드라고 생각하면 된다. ENI는 IPV4의 주소나 MAC 주소를 가질수 있고 보안그룹이 여기에 붙여진다. ENI는 하나의 서브넷에만 연결되며 이것은 사용자가 인스턴스를 시작할 때 서브넷을 지정하도록 하는 이유이기도 하다.
💡기본 ENI는 인스턴스에서 제거할 수 없다. 하지만 보조 ENI는 탈부착이 가능하므로 만약 인스턴스에 장애가 발생했다고 판단되면, ENI를 탈착해서 다른 보조 인스턴스에 부착해서 트래픽을 우회할 수 있다.
📌ENI의 '종료 시 삭제' 속성을 비활성화 하면 인스턴스가 종료되도 ENI는 남아있다.

인바운드 규칙

인스턴스로 들어오는 트래픽에 대해 허용 여부를 결정하는 규칙이다. 다음 세가지 필수 요소를 지닌다.

  • 소스
  • 프로토콜
  • 포트번호

보안그룹은 기본적으로 화이트 리스트라는 기본 거부 방식을 사용하므로 명시하지않은 모든 트래픽은 거부되고 명시하는 순간 허용한다. 또한 항상 거부를 우선시한다.

예를 들어 아래처럼 인바운드 규칙이 설정되어있다면
소스 : 198.51.100.10/32 프로토콜 : TCP 포트범위 : 22
소스 : 0.0.0.0/0 프로토콜 : TCP 포트범위 : 443
처음 모든 IP주소를 허용하긴했지만 위의 규칙으로 인해 198.51.100.10/32의 주소를 가지고 TCP 포트 22를 통해 들어오는 트래픽만을 허용한다.

아웃바운드 규칙

인스턴스에서 나가는 트래픽에 대해 허용 여부를 결정하는 규칙이다. 다음 세가지 필수 요소를 지닌다.

  • 대상 주소
  • 프로토콜
  • 포트범위

보안그룹을 생성하면 기본적으로 대상주소 : 0.0.0.0/0 프로토콜 : ALL 포트범위 :ALL 이라는 설정이 있다.
인바운드 규칙에 비해 비교적 제약이 낮다.

스테이트풀 속성

Stateful속성이란 상태를 유지한다는 것이다. 쉽게 말해 해당 소스에서 들어오는 트래픽을 허용하는 인바운드 규칙을 설정했다면, 자동으로 해당 소스에 대한 아웃바운드 규칙도 허용한다는 것이다.
반대의 상황 또한 마찬가지이다.

NACL

네트워크 접속 제어 목록(이하 NACL)은 보안그룹과 매우 유사하다. 하지만 큰 차이점이 세가지가 존재한다

  • ENI가 아닌 서브넷에 연결된다.

    서브넷에 부착되는 것이므로 인스턴스간의 트래픽의 통제가 아닌 서브넷간의 트래픽을 통제할 때 사용된다.

  • 스테이트리스 속성을 가진다.

    보안그룹과 다르게 인바운드 규칙을 설정해도 아웃바운드 규칙을 따로 설정해야 한다.
    반대의 상황도 마찬가지다.

  • 인바운드 / 아웃바운드 규칙에 동작과 규칙 번호에 대한 요소가 추가된다.

    • 보안그룹은 규칙을 여러개 설정해도 순서가 상관이없지만,
      NACL은 규칙이 여러개라면 규칙 번호의 오름차순으로 규칙이 적용된다.
    • 동작을 통해 거부/허용을 명시할 수 있다. 보안그룹은 명시하지않으면 거부이고 명시하면 허용이지만 NACL은 명시하지않는다면 거부이고 명시해도 동작에 의해 거기서 또 허용과 거부를 선택할 수 있다.

마치며

이번 포스팅은 인스턴스간 / 서브넷간 어떤 트래픽을 허용할 것이고 어떤 트래픽을 거부할 것인지 이것을 어떻게 가능하게 해주는지에 대해서 다루어 보았다. 필자는 또 다른 궁금증이 생겼다. 바로 트래픽을 허용과 거부에 대해서 어떻게 하는지는 알았지만 접근하고자 하는 대상이 누군지 알고 트래픽의 허용/거부를 결정하냐는 것이다. 이것을 IAM을 사용해 대상이 믿을만한지 아닌지를 보장해주는 신분기반정책에 대해서 다음 포스팅에서 다루어 볼 예정이다.

profile
성실하게 열심히!

1개의 댓글

comment-user-thumbnail
2022년 9월 22일

개추드립니다

답글 달기