[6] ACL(Access Control Lists)의 개념
네트워크 액세스 제어 목록(Access Control Lists)은 서브넷 수준에서 작동하는 보안 장치입니다. 각 그룹에 대해 정의된 인바운드(inbound) 및 아웃바운드 (outbound)규칙을 통해 최소한의 접근 권한을 부여해서 VPC 서브넷 내의 모든 리소스에 엄격한 보안을 적용할 수 있습니다. 인바운드란 서브넷으로 들어오는 연결을 말하고, 아웃바운드란 서브넷에서 밖으로 나가는 연결을 의미합니다.
IP 주소 체계와 CIDR
ACL를 이해하려면 IP 주소가 어떻게 구성되는지를 알아야 합니다. 인터넷에 연결된 모든 기기는 고유한 주소를 가지고 있어야 합니다. 이 주소를 통해 데이터를 주고받으며 인터넷 통신이 이루어지는데, 이때 사용되는 주소 체계가 바로 IP 주소입니다. 현재 주로 사용되는 IP 주소 체계는 IPv4와 IPv6 두 가지가 있습니다.
IPv4는 오랫동안 사용되어 온 인터넷 주소 체계로, 32비트로 구성되어 약 43억 개의 주소를 생성할 수 있습니다. 192.168.0.1와 같이 숫자 4개를 점으로 구분하는 형태로 정의됩니다. 하지만 인터넷 기기의 폭발적인 증가로 인해 IPv4 주소가 부족해지는 문제가 발생했습니다. 이는 마치 전화번호가 부족해져 새로운 전화번호를 만들 수 없는 상황과 비슷합니다.
IPv6는 IPv4의 한계를 극복하기 위해 개발된 차세대 인터넷 주소 체계입니다. 128비트로 구성되어 거의 무한대에 가까운 주소를 생성할 수 있습니다. 2001:0db8:85a3:0000:0000:8a2e:0370:7334: 와 같이 16진수 숫자 8개로 구성되어 있습니다. 여기서 0이 연속되는 경우에는 생략이 가능해서 2001:db8:85a3::8a2e:370:7334처럼 표현할 수도 있습니다. IPv6는 IPv4에 비해 더욱 효율적인 주소 할당, 자동 구성, 보안 기능 등을 제공하며, 미래 인터넷 환경에 적합한 주소 체계로 평가받고 있습니다.
하지만 IPv6로의 전환은 단순한 주소 체계 변경을 넘어 네트워크 인프라 전체를 변경해야 하는 대규모 작업이기 때문에 시간이 오래 걸리고 있습니다. 현재는 IPv4와 IPv6를 함께 사용하는 이중 스택 환경이 주를 이루고 있으며, 점차 IPv6으로의 전환이 가속화되고 있습니다.
CIDR(Classless Inter-Domain Routing)은 IP주소를 효율적으로 관리하기 위한 방법 중 하나입니다. 기존에는 클래스를 기반으로 IP를 할당했습니다. 예를 들어, B 클래스 네트워크(128.0.0.0 ~ 191.255.255.255)를 할당받았다고 가정해 봅시다. 만약 1000개의 IP 주소만 필요한 경우에도 B 클래스 전체를 사용해야 하므로, 나머지 주소는 모두 낭비됩니다.
CIDR 방식을 사용하면 192.168.1.0/24와 같이 필요한 만큼의 주소만 할당할 수 있습니다.
-
192.168.1.0: 네트워크 주소
-
/24: 서브넷 마스크 (24비트)
이는 192.168.1.0부터 192.168.1.255까지의 IP 주소를 포함하는 서브넷을 의미합니다. 이 경우 256개의 IP 주소를 사용할 수 있으므로, 1,000개가 필요한 경우에는 여러 개의 서브넷을 만들어 사용하면 됩니다. 서브넷 마스크의 IP 갯수 계산 방법은 다음과 같습니다. IP주소는 총 32개의 비트로 구성되는데 32에서 서브넷 마스크를 뺀 숫자 만큼의 비트가 호스트 비트가 됩니다. 예를 들어 /24 서브넷 마스크라면 32-24=8이 되고, 2의 8제곱인 256에서 2를 뺀 254개 만큼의 호스트 수를 갖게 됩니다. 2를 빼는 이유는 첫 번째 값은 해당 네트워크 전체를 나타내는 네트워크 주소로, 마지막 값은 해당 네트워크에 속한 모든 호스트를 의미하는 브로드캐스트 주소로 사용되기 때문입니다.
기본 네트워크 ACL
기본 네트워크 ACL은 VPC를 처음 생성할 때 자동으로 만들어지는 ACL로, 서브넷에 들어오고 나가는 모든 트래픽을 허용합니다. 기본 네트워크 ACL이 있으면 모든 통신이 자유롭게 이루어지기 때문에 별도의 설정을 하지 않더라도 VPC를 바로 사용할 수 있어서 편리합니다. 하지만 모든 트래픽이 허용되기 때문에 실제로 VPC를 사용하기 전에는 올바른 규칙을 생성하는 것이 보안 상 안전합니다.
기본 네트워크 ACL은 다음과 같이 생성됩니다. 규칙 번호가 작은 규칙부터 먼저 적용되고, 규칙 번호가 *인 경우는 다른 모든 규칙이 일치하지 않을 때 해당 트래픽을 거부한다는 의미입니다. * 규칙은 삭제하거나 수정할 수 없습니다.
인바운드
규칙 # | Type | 프로토콜 | 포트 범위 | 소스 | 허용/거부 |
---|---|---|---|---|---|
100 | 모든 IPv4 트래픽 | 모두 | 모두 | 0.0.0.0/0 | ALLOW |
* | 모든 IPv4 트래픽 | 모두 | 모두 | 0.0.0.0/0 | DENY |
아웃바운드
규칙 # | Type | 프로토콜 | 포트 범위 | 대상 주소 | 허용/거부 |
---|---|---|---|---|---|
100 | 모든 IPv4 트래픽 | 모두 | 모두 | 0.0.0.0/0 | ALLOW |
* | 모든 IPv4 트래픽 | 모두 | 모두 | 0.0.0.0/0 | DENY |
다음은 연결된 IPv6 CIDR 블록이 있는 VPC에 대한 사용자 지정 네트워크 ACL 예시입니다. 이 네트워크 ACL에는 모든 IPv6 HTTP 및 HTTPS 트래픽에 대한 규칙이 포함됩니다. IPv4 및 IPv6 트래픽은 분리되어 있어서 IPv4 트래픽에 대한 규칙 중 어느 것도 IPv6 트래픽에 적용되지 않습니다.
인바운드
규칙 # | Type | 프로토콜 | 포트 범위 | 소스 | 허용/거부 | 설명 |
---|---|---|---|---|---|---|
100 | HTTP | TCP | 80 | 0.0.0.0/0 | ALLOW | 어떤 IPv4 주소에서 이루어지는 인바운드 HTTP 트래픽도 모두 허용 |
105 | HTTP | TCP | 80 | ::/0 | ALLOW | 어떤 IPv6 주소에서 이루어지는 인바운드 HTTP 트래픽도 모두 허용 |
110 | HTTPS | TCP | 443 | 0.0.0.0/0 | ALLOW | 어떤 IPv4 주소에서 이루어지는 인바운드 HTTPS 트래픽도 모두 허용 |
115 | HTTPS | TCP | 443 | ::/0 | ALLOW | 어떤 IPv6 주소에서 이루어지는 인바운드 HTTPS 트래픽도 모두 허용 |
120 | SSH | TCP | 22 | 192.0.2.0/24 | ALLOW | 홈 네트워크의 퍼블릭 IPv4 주소 범위로부터의 인바운드 SSH 트래픽 허용 |
130 | RDP | TCP | 3389 | 192.0.2.0/24 | ALLOW | 홈 네트워크의 퍼블릭 IPv4 주소 범위로부터 웹 서버로의 인바운드 RDP 트래픽 허용 |
140 | 사용자 지정 TCP | TCP | 32768-65535 | 0.0.0.0/0 | ALLOW | 인터넷으로부터의 인바운드 리턴 IPv4 트래픽 허용 |
145 | 사용자 지정 TCP | TCP | 32768-65535 | ::/0 | ALLOW | 인터넷으로부터의 인바운드 리턴 IPv6 트래픽 허용 |
* | 모든 트래픽 | 모두 | 모두 | 0.0.0.0/0 | DENY | |
* | 모든 트래픽 | 모두 | 모두 | ::/0 | DENY |
아웃바운드
규칙 # | Type | 프로토콜 | 포트 범위 | 대상 주소 | 허용/거부 | 설명 |
---|---|---|---|---|---|---|
100 | HTTP | TCP | 80 | 0.0.0.0/0 | ALLOW | 서브넷에서 인터넷으로의 아웃바운드 IPv4 HTTP 트래픽 허용 |
105 | HTTP | TCP | 80 | ::/0 | ALLOW | 서브넷에서 인터넷으로의 아웃바운드 IPv6 HTTP 트래픽 허용 |
110 | HTTPS | TCP | 443 | 0.0.0.0/0 | ALLOW | 서브넷에서 인터넷으로의 아웃바운드 IPv4 HTTPS 트래픽 허용 |
115 | HTTPS | TCP | 443 | ::/0 | ALLOW | 서브넷에서 인터넷으로의 아웃바운드 IPv6 HTTPS 트래픽 허용 |
140 | 사용자 지정 TCP | TCP | 32768-65535 | 0.0.0.0/0 | ALLOW | 인터넷에서 클라이언트에 대한 아웃바운드 IPv4 응답 허용 |
145 | 사용자 지정 TCP | TCP | 32768-65535 | ::/0 | ALLOW | 인터넷에서 클라이언트에 대한 아웃바운드 IPv6 응답 허용 |
* | 모든 트래픽 | 모두 | 모두 | 0.0.0.0/0 | DENY | |
* | 모든 트래픽 | 모두 | 모두 | ::/0 | DENY |
ACL와 보안 그룹 비교
특징 ACL 보안 그룹 적용 범위 서브넷 인스턴스 규칙 종류 인바운드/아웃바운드 인바운드/아웃바운드 상태 상태 없음(stateless) 상태 존재(stateful) 규칙 순서 중요 중요