[AWS] Security Group & NACL(Network Access Control List)
A. Question
보안 그룹(Security Group)과 NACL(Network Access Control List)는 무엇일까?
B. Answer
1. 보안 그룹(Security Group)
보안 그룹(Security Group)
인 인스턴스 수준에서 적용되는 가상 방화벽 역할을 하며, VPC 내의 인스턴스나 기타 리소스에 대해 인바운드 및 아웃바운드 트래픽을 제어한다.
-
적용 수준: 보안 그룹은 특정 EC2 인스턴스나 리소스에 할당되며, 각 리소스는 하나 이상의 보안 그룹을 가질 수 있다.
-
상태 저장(Stateful): 보안 그룹은 Stateful 장치이다. 인바운드 트래픽이 허용되면, 그에 대한 응답 트래픽은 자동으로 허용된다. 마찬가지로, 아웃바운드 트래픽이 허용되면 그에 대한 응답도 자동으로 허용된다.
- 인바운드 및 아웃바운드 규칙: 각 보안 그룹은 인바운드 규칙과 아웃바운드 규칙을 정의할 수 있다.
- 인바운드 규칙: 외부에서 인스턴스로 들어오는 트래픽을 제어한다. 예를 들어, 웹 서버에 대한 HTTP(80) 및 HTTPS(443) 트래픽을 허용하는 규칙을 추가할 수 있다.
- 아웃바운드 규칙: 인스턴스에서 외부로 나가는 트래픽을 제어한다. 기본적으로 모든 아웃바운드 트래픽은 허용되지만 필요에 따라 제한할 수 있다.
- 허용 규칙만 존재: 보안 그룹은 허용 규칙만 설정할 수 있으며, 특정 트래픽을 명시적으로 차단할 수 없다. 모든 규칙을 설정하지 않은 경우에는 기본적으로 트래픽이 차단된다.
2. NACL(Network Access Control List)
NACL(Network Access Control List)
은 VPC 내의 서브넷 수준에서 적용되는 방화벽 역할을 하며, Subnet에 포함된 모든 리소스에 대해 인바운드 및 아웃바운드 트래픽을 제어한다.
-
Subnet 수준 적용: NACL은 Subnet 전체에 적용되므로, Subnet 내의 모든 인스턴스가 해당 규칙의 영향을 받는다.
-
상태 비저장(Stateless): NACL은 Stateless 장치이다. 즉, 인바운드 트래픽을 허용하더라도 그에 대한 응답 트래픽은 아웃바운드 규칙에서 별도로 허용되어야 한다.
-
허용 및 거부 규칙: NACL은 허용 규칙뿐만 아니라 거부 규칙도 설정할 수 있다. 이를 통해 특정 트래픽을 명시적으로 차단할 수 있다.
-
규칙 번호 순서: NACL의 규칙은 번호에 따라 순서대로 평가된다. 규칙은 낮은 번호부터 평가되며, 먼저 일치하는 규칙이 적용된다. 일치하는 규칙이 없으면 기본적으로 모든 트래픽이 거부된다.
3. 보안 그룹 VS NACL
특징 | 보안 그룹 | NACL |
---|---|---|
적용 수준 | 인스턴스 수준 적용 | Subnet 수준 적용 |
상태 저장 여부 | 상태 저장 (Stateful) | 상태 비저장 (Stateless) |
허용/거부 규칙 | 허용 규칙만 가능 | 허용 및 거부 규칙 모두 가능 |
규칙 평가 순서 | 규칙 순서 무관, 모두 적용 | 규칙 번호에 따라 순차 평가 |
기본 동작 | 명시적 허용 외에는 차단 | 기본 규칙이 적용되지 않으면 모든 트래픽 차단 |
트래픽 제어 대상 | 특정 인스턴스의 트래픽 | Subnet 내 모든 리소스의 트래픽 |
4. 보안 그룹 사용 예시
(1) 예시 1: 웹 서버 보안 설정
- 상황: VPC의 Public Subnet에 있는 EC2 인스턴스에 웹 애플리케이션을 호스팅한다고 가정한다.
- 보안 그룹 설정 - 인바운드 규칙
HTTP(80)
및HTTPS(443)
포트를0.0.0.0/0
으로 설정하여 인터넷의 모든 사용자가 웹 서버에 접속할 수 있도록 허용.SSH(22)
포트를 특정 관리 IP Address에서만 접근하도록 제한해 보안 유지.
- 보안 그룹 설정 - 아웃바운드 규칙
- 기본적으로 모든 아웃바운드 트래픽을 허용하여, 웹 서버가 외부로 데이터를 전송하거나 업데이트를 다운로드할 수 있도록 설정.
(2) 예시 2: 데이터베이스 보안 설정
- 상황: Private Subnet에 배포된 RDS 인스턴스가 웹 서버와만 통신하도록 제한하고 싶다.
- 보안 그룹 설정 - 인바운드 규칙
MySQL/Aurora(3306)
포트를 웹 서버의 보안 그룹에서만 접근할 수 있도록 설정하여, 외부 트래픽을 차단하고 웹 서버와의 통신만 허용.
- 보안 그룹 설정 - 아웃바운드 규칙
- 데이터베이스가 인터넷으로 나가는 트래픽이 필요하지 않으므로, 기본 설정을 유지하여 아웃바운드 트래픽을 제한하지 않음.
5. NACL 사용 예시
(1) 기본 보안 설정 강화
- 상황: VPC 내의 Public Subnet에 트래픽을 제한하기 위해 NACL을 사용한다.
- NACL 설정 - 인바운드 규칙
- 규칙 번호 100:
HTTP(80)
및HTTPS(443)
포트를0.0.0.0/0
에서 허용하여 웹 트래픽 허용. - 규칙 번호 110:
SSH(22)
포트를 특정 관리 IP Address에서 허용.
- 규칙 번호 100:
- NACL 설정 - 아웃바운드 규칙
- 규칙 번호 100: 모든 트래픽(
0.0.0.0/0
)을 허용하여 Subnet 내 리소스가 인터넷과 통신할 수 있도록 설정.
- 규칙 번호 100: 모든 트래픽(
(2) 외부 IP 차단
- 상황: 특정 IP Address 대역에서의 의심스러운 접근을 차단하기 위해 NACL을 사용한다.
- NACL 설정 - 인바운드 규칙
- 규칙 번호 50: 특정 IP Address 대역(
203.0.113.0/24
)을 차단.
- 규칙 번호 50: 특정 IP Address 대역(
- NACL 설정 - 아웃바운드 규칙
- 규칙 번호 100: Subnet 내 리소스가 외부와 통신할 수 있도록 모든 트래픽을 허용.
댓글남기기