cloud

AWS - ACL

AWS VPC(Virtual Private Cloud)에서는 보안을 위해 여러 계층에서 접근 제어 기능을 제공합니다. 그 중 네트워크 ACL(Network Access Control List, ACL) 은 서브넷 단위에서 동작하는 방화벽으로, VPC 보안의 기초를 담당합니다. 쉽게 말해, VPC 네트워크의 ‘대문’과 같은 역할을 하는 것이 바로 ACL입니다.


네트워크 ACL (Network ACL)

네트워크 ACL은 VPC 안에서 서브넷 레벨에서 동작하는 보안 장치입니다. 즉, 특정 서브넷으로 들어오거나 나가는 트래픽 전체를 제어하는 역할을 합니다. ACL은 VPC 내부 네트워크를 지나는 트래픽을 점검하는 첫 번째 방어선이라고 할 수 있습니다.

예를 들어, "특정 IP 대역은 이 서브넷에 접근할 수 없다"라는 규칙을 ACL에 설정하면, 그 서브넷에 속한 모든 인스턴스에 똑같이 적용됩니다. 즉, 서브넷에 들어오려는 사용자가 있더라도 ACL 규칙에서 차단된 경우, 애초에 해당 서브넷에 도달하지 못합니다. 반대로 특정 포트(예: 80번 HTTP 트래픽)만 허용하고 나머지는 모두 막아버릴 수도 있습니다. 이처럼 ACL은 서브넷을 통과하는 트래픽의 흐름을 단순하고 강력하게 통제할 수 있습니다.

따라서 ACL은 서브넷 차원에서의 보안 정책을 일괄적으로 적용하고 싶을 때 특히 유용합니다. 예를 들어, 퍼블릭 서브넷에는 인터넷에서 들어오는 HTTP/HTTPS 트래픽만 허용하고 나머지는 전부 차단하는 식으로 설정할 수 있습니다. 반대로 프라이빗 서브넷에는 특정 내부 네트워크 대역에서 오는 요청만 받도록 규칙을 구성할 수 있습니다.

하지만 ACL은 어디까지나 서브넷 단위에서 동작하기 때문에, 개별 인스턴스마다 다른 보안 규칙을 적용해야 하는 경우에는 적합하지 않습니다. 이런 세밀한 제어는 보안그룹(Security Group)이 담당하는 역할입니다. 다시 말해, ACL은 넓은 범위의 보안 정책을 정의하는 데 강점을 가지고 있으며, 보안그룹과 함께 사용될 때 더욱 강력한 보안 체계를 만들 수 있습니다.


네트워크 ACL의 주요 특징

네트워크 ACL에는 몇 가지 중요한 특성이 있습니다. 첫째, ACL은 서브넷 단위에서 동작하기 때문에 서브넷에 속한 모든 인스턴스가 ACL의 규칙을 따릅니다. 둘째, Inbound와 Outbound 트래픽 모두를 제어할 수 있습니다. 예를 들어, 외부에서 들어오는 요청뿐만 아니라 내부에서 외부로 나가는 요청까지 동시에 관리할 수 있습니다.

셋째, ACL의 규칙은 번호 순서대로 평가되며 가장 먼저 일치하는 규칙이 적용됩니다. 따라서 규칙을 설정할 때 순서를 고려하는 것이 매우 중요합니다. 넷째, ACL은 허용(Allow)과 거부(Deny) 규칙을 모두 지원합니다. 이를 통해 "특정 포트는 막고, 특정 IP는 허용한다" 같은 복잡한 조건을 만들 수 있습니다.

마지막으로 ACL은 Stateless(비상태성) 구조입니다. 즉, 들어오는 요청을 허용했다고 해서 자동으로 나가는 응답까지 허용되는 것이 아닙니다. Inbound와 Outbound 각각에 별도의 규칙을 작성해야 하며, 이 점은 보안그룹과 가장 큰 차이 중 하나입니다. 기본적으로 ACL은 모든 트래픽을 차단하며, 관리자가 허용 규칙을 추가해야 통신이 가능합니다.


보안그룹 (Security Group)

네트워크 ACL이 서브넷 단위에서 동작한다면, 보안그룹은 인스턴스 단위에서 세밀한 보안을 담당합니다. 즉, 같은 서브넷 안에 있는 서버라도 보안그룹 설정에 따라 각기 다른 접근 제어 정책을 가질 수 있습니다.

보안그룹은 ACL과 달리 Stateful(상태성)을 가지기 때문에, Inbound 요청이 허용되면 그에 대한 Outbound 응답은 자동으로 허용됩니다. 따라서 양방향 규칙을 모두 설정할 필요가 없고 관리가 조금 더 단순합니다. 또한 보안그룹은 허용(Allow) 규칙만 지정할 수 있으며, 특정 트래픽을 명시적으로 거부하는 규칙은 설정할 수 없습니다.

AWS에서는 한 인스턴스에 최대 5개의 보안그룹을 할당할 수 있으며, 보안그룹을 명시하지 않고 인스턴스를 생성할 경우 기본(Default) 보안그룹이 자동으로 적용됩니다. 보통은 인스턴스별로 SSH(22번 포트), HTTP(80번), HTTPS(443번) 등의 접근을 설정하는 데 보안그룹이 자주 사용됩니다.


ACL vs 보안그룹 비교

ACL과 보안그룹은 모두 네트워크 보안을 위한 방화벽 역할을 하지만, 적용 범위와 동작 방식에서 차이가 있습니다. ACL은 서브넷 단위로 트래픽을 제어하는 반면, 보안그룹은 인스턴스 단위에서 더 세밀한 접근 제어를 수행합니다. 또한 ACL은 Stateless 구조라서 요청과 응답을 각각 제어해야 하지만, 보안그룹은 Stateful 구조라 관리가 더 직관적입니다.

이러한 차이 때문에 ACL과 보안그룹은 대체 관계가 아니라 상호 보완적인 관계입니다. 실무에서는 ACL을 통해 서브넷 차원에서 큰 틀의 보안 정책을 적용하고, 보안그룹을 통해 인스턴스 단위에서 서비스별 접근 권한을 조율하는 방식으로 함께 사용합니다.

구분네트워크 ACL보안그룹
적용 범위서브넷 단위인스턴스 단위
상태성StatelessStateful
규칙 종류허용 & 거부 가능허용만 가능
평가 방식규칙 번호 순서대로 처리모든 규칙 동시에 평가
기본 동작모든 트래픽 거부모든 트래픽 거부
활용 목적네트워크 레벨 기본 보안인스턴스 세밀 제어

정리

네트워크 ACL은 VPC의 서브넷 단위에서 동작하는 기본적인 방화벽으로, 서브넷을 드나드는 모든 트래픽을 제어하는 첫 번째 보안 장치입니다. 규칙을 통해 허용할 트래픽과 거부할 트래픽을 명시적으로 지정할 수 있으며, 서브넷 전체에 일괄 적용된다는 점에서 큰 틀의 보안 정책을 세울 때 효과적입니다.

다만 ACL은 세밀한 제어에는 한계가 있기 때문에, 인스턴스 단위에서 접근 권한을 관리하는 보안그룹과 함께 사용하는 것이 일반적입니다. 즉, ACL은 "네트워크의 대문" 역할을 하고, 보안그룹은 "개별 현관문" 역할을 하면서 서로를 보완하여 보다 안전한 보안 환경을 구성합니다.


참고자료