II-12. VPC Security (network ACLs, Security Groups)
@ Amazon VPC 보안 설명
Amazon VPC 보안은 클라우드 환경에서 네트워크를 보호하기 위한 다층적인 접근 방식을 제공합니다. VPC 내의 리소스를 무단 접근 및 악의적인 활동으로부터 보호하는 것은 클라우드 보안의 핵심입니다. AWS는 이를 위해 보안 그룹 (Security Groups) 과 네트워크 ACL (Network Access Control Lists) 이라는 두 가지 주요 방화벽 기능을 제공합니다.
▶ VPC 보안의 주요 요소:
- 격리 (Isolation): VPC 자체는 다른 AWS 계정의 네트워크와 논리적으로 격리되어 기본적인 보안 경계를 제공합니다.
- 서브넷 분리 (Subnet Segmentation): 퍼블릭 및 프라이빗 서브넷으로 네트워크를 분리하여 인터넷 접근을 제어하고 내부 리소스를 보호합니다.
- 방화벽 (Firewalling): 보안 그룹과 네트워크 ACL을 사용하여 인스턴스 및 서브넷 수준에서 네트워크 트래픽을 제어합니다.
- 접근 제어 (Access Control): IAM (Identity and Access Management)을 통해 AWS 리소스에 대한 접근 권한을 세밀하게 관리합니다.
- 로깅 및 모니터링 (Logging and Monitoring): VPC Flow Logs를 사용하여 VPC 내의 네트워크 트래픽을 로깅하고, CloudWatch를 통해 보안 관련 지표를 모니터링하여 이상 징후를 탐지합니다.
- 암호화 (Encryption): 필요에 따라 전송 중인 데이터 (예: VPN, TLS) 및 저장된 데이터 (예: EBS 암호화, S3 암호화)를 암호화하여 기밀성을 유지합니다.
▶ 보안 그룹 (Security Groups) vs. 네트워크 ACL (Network ACL) 비교 분석
특징 | 보안 그룹 (Security Groups) | 네트워크 ACL (Network Access Control Lists) |
적용 범위 | 인스턴스 수준 (Instance-level): 특정 EC2 인스턴스에 적용 | 서브넷 수준 (Subnet-level): 특정 서브넷 내의 모든 인스턴스에 적용 |
유형 | 상태 저장 방화벽 (Stateful Firewall): 허용된 인바운드 트래픽에 대한 아웃바운드 응답은 자동으로 허용 | 무상태 방화벽 (Stateless Firewall): 인바운드 및 아웃바운드 트래픽에 대한 규칙을 명시적으로 설정해야 함 |
규칙 | 허용 규칙만 지원 (Allow rules only): 명시적으로 허용된 트래픽만 통과 | 허용 규칙 및 거부 규칙 지원 (Allow and Deny rules): 특정 트래픽을 명시적으로 거부 가능 |
평가 순서 | 모든 허용 규칙을 평가하고, 일치하는 규칙이 있으면 허용 | 규칙 목록 순서대로 평가하며, 일치하는 첫 번째 규칙(허용 또는 거부)에 따라 결정 |
기본 동작 | 생성 시 모든 인바운드 트래픽 거부, 모든 아웃바운드 트래픽 허용 (기본 규칙 변경 가능) | 생성 시 모든 인바운드 및 아웃바운드 트래픽 거부 (명시적으로 허용해야 함) |
동시 연결 처리 | 활발한 연결을 추적하여 응답 트래픽을 자동으로 허용 | 각 패킷을 개별적으로 평가 |
사용 사례 | 특정 애플리케이션의 포트 및 프로토콜 접근 제어 (예: 웹 서버의 80/443 포트 허용) | 서브넷 전체의 기본적인 트래픽 제어 (예: 특정 IP 범위로부터의 접근 차단) |
관리 편의성 | 인스턴스별로 세밀한 제어 가능 | 서브넷 전체에 일관된 규칙 적용 용이 |
▶ 어떤 것을 사용해야 할까요?
일반적으로 보안 그룹은 인스턴스 수준의 세밀한 접근 제어를 위해 필수적으로 사용됩니다. 애플리케이션의 요구 사항에 따라 특정 포트와 프로토콜에 대한 접근을 허용하는 데 유용합니다. 네트워크 ACL은 서브넷 수준에서 기본적인 보안 계층을 추가하거나 특정 트래픽을 명시적으로 거부해야 하는 경우에 사용됩니다. 예를 들어, 특정 IP 주소 범위로부터의 모든 접근을 차단하거나, 서브넷 경계에서 기본적인 트래픽 흐름을 제어하는 데 활용할 수 있습니다.
실제 환경에서는 보안 그룹과 네트워크 ACL을 함께 사용하여 심층 방어 (Defense in Depth) 전략을 구현하는 것이 좋습니다.
@ VPC 보안 구성 실습 (보안 그룹 및 네트워크 ACL 생성 및 연결)
▶ 실습 시 주의해야 할 내용:
- 기존 환경 영향 주의: 운영 중인 VPC에 보안 규칙을 잘못 적용하면 서비스 중단을 초래할 수 있습니다. 테스트 환경에서 먼저 실습하는 것을 강력히 권장합니다.
- 최소 권한 원칙: 필요한 최소한의 트래픽만 허용하는 규칙을 설정하는 것이 보안의 기본 원칙입니다.
- 규칙 평가 순서 이해: 네트워크 ACL의 규칙은 순서대로 평가되므로, 규칙 순서를 신중하게 결정해야 합니다.
- 상태 저장 vs. 무상태 이해: 보안 그룹과 네트워크 ACL의 동작 방식 차이를 명확히 이해하고, 각 기능의 특성에 맞게 규칙을 설정해야 합니다.
- 인바운드 및 아웃바운드 규칙 설정: 필요한 모든 인바운드 및 아웃바운드 트래픽에 대한 규칙을 명시적으로 설정해야 합니다.
▶ 단계별 실습 안내:
1. 보안 그룹 생성:
- AWS Management Console 접속: AWS 계정에 로그인하고 AWS Management Console로 이동합니다.
- EC2 서비스 접속: 서비스 목록에서 "EC2"를 검색하여 EC2 대시보드로 이동합니다.
- 보안 그룹 메뉴 선택: 왼쪽 메뉴의 "네트워크 및 보안" 섹션에서 "보안 그룹(Security Groups)" 을 클릭합니다.
- 보안 그룹 생성 시작: "보안 그룹 생성(Create security group)" 버튼을 클릭합니다.
- 보안 그룹 설정:
- 보안 그룹 이름: 생성하는 보안 그룹을 식별하기 위한 이름을 입력합니다 (예: web-server-sg).
- 설명: 보안 그룹에 대한 설명을 입력합니다 (예: 웹 서버에 대한 HTTP 및 HTTPS 접근 허용).
- VPC ID: 드롭다운 메뉴에서 보안 그룹을 생성할 VPC를 선택합니다.
- 인바운드 규칙 추가: "인바운드 규칙 추가" 버튼을 클릭하여 필요한 인바운드 트래픽 규칙을 설정합니다.
- 유형: 드롭다운 메뉴에서 트래픽 유형을 선택합니다 (예: HTTP, HTTPS, SSH).
- 프로토콜: 선택한 유형에 따라 자동으로 설정됩니다 (예: TCP).
- 포트 범위: 접근을 허용할 포트 범위를 입력합니다 (예: 80, 443, 22).
- 소스: 트래픽을 허용할 소스를 지정합니다 (예: Anywhere - 모든 IP 주소, Custom IP - 특정 IP 주소 또는 CIDR 블록, My IP - 현재 접속 IP, 다른 보안 그룹). 주의: 프로덕션 환경에서는 Anywhere 사용을 최소화하고 특정 IP 범위 또는 보안 그룹으로 제한하는 것이 좋습니다.
- 설명 (선택 사항): 규칙에 대한 설명을 입력합니다.
- 아웃바운드 규칙 추가 (기본적으로 모든 아웃바운드 허용): 필요에 따라 "아웃바운드 규칙 추가" 버튼을 클릭하여 아웃바운드 트래픽 규칙을 설정할 수 있습니다. 기본적으로 보안 그룹은 모든 아웃바운드 트래픽을 허용하지만, 특정 목적지로의 트래픽만 허용하도록 제한할 수 있습니다.
- 보안 그룹 생성 완료: 모든 규칙을 설정했으면 "보안 그룹 생성(Create security group)" 버튼을 클릭합니다.
- EC2 인스턴스에 보안 그룹 연결: 생성한 보안 그룹을 EC2 인스턴스를 생성할 때 연결하거나, 기존 인스턴스의 네트워크 인터페이스 설정을 변경하여 연결할 수 있습니다.
2. 네트워크 ACL 생성 및 서브넷 연결:
- AWS Management Console 접속: AWS 계정에 로그인하고 AWS Management Console로 이동합니다.
- VPC 서비스 접속: 서비스 목록에서 "VPC"를 검색하여 VPC 대시보드로 이동합니다.
- 네트워크 ACL 메뉴 선택: 왼쪽 메뉴의 "가상 프라이빗 클라우드" 섹션에서 "네트워크 ACL(Network ACLs)" 을 클릭합니다.
- 네트워크 ACL 생성 시작: "네트워크 ACL 생성(Create network ACL)" 버튼을 클릭합니다.
- 네트워크 ACL 설정:
- 이름 태그: 생성하는 네트워크 ACL을 식별하기 위한 이름을 입력합니다 (예: public-subnet-acl).
- VPC ID: 드롭다운 메뉴에서 네트워크 ACL을 생성할 VPC를 선택합니다.
- 인바운드 규칙 추가: 생성된 네트워크 ACL을 선택하고 하단 창의 "인바운드 규칙(Inbound Rules)" 탭으로 이동하여 "인바운드 규칙 편집(Edit inbound rules)" 버튼을 클릭합니다.
- 규칙 번호: 규칙 평가 순서를 결정하는 번호를 입력합니다 (낮은 번호부터 평가).
- 유형: 드롭다운 메뉴에서 트래픽 유형을 선택합니다 (예: HTTP, HTTPS, SSH, Custom TCP Rule).
- 프로토콜: 선택한 유형에 따라 자동으로 설정되거나 직접 선택합니다 (예: TCP, UDP).
- 포트 범위: 접근을 허용 또는 거부할 포트 범위를 입력합니다.
- 소스: 트래픽의 소스 IP 주소 또는 CIDR 블록을 입력합니다.
- 허용/거부: ALLOW 또는 DENY를 선택하여 트래픽을 허용할지 거부할지 결정합니다.
- 설명 (선택 사항): 규칙에 대한 설명을 입력합니다.
- 아웃바운드 규칙 추가: 하단 창의 "아웃바운드 규칙(Outbound Rules)" 탭으로 이동하여 "아웃바운드 규칙 편집(Edit outbound rules)" 버튼을 클릭하고 유사한 방식으로 아웃바운드 트래픽 규칙을 설정합니다. 주의: 네트워크 ACL은 무상태 방화벽이므로, 허용된 인바운드 트래픽에 대한 아웃바운드 응답 트래픽도 명시적으로 허용하는 규칙을 추가해야 합니다. 예를 들어, 인바운드로 80 포트를 허용했다면, 아웃바운드로 임시 포트 범위 (1024-65535) 에 대한 허용 규칙도 추가해야 웹 서버의 응답이 클라이언트에 전달될 수 있습니다.
- 서브넷 연결: 생성된 네트워크 ACL을 선택하고 하단 창의 "서브넷 연결(Subnet Associations)" 탭으로 이동하여 "서브넷 연결 편집(Edit subnet associations)" 버튼을 클릭합니다. 연결하려는 서브넷의 체크박스를 선택하고 "저장(Save)" 버튼을 클릭합니다. 이제 선택한 서브넷의 모든 인스턴스는 이 네트워크 ACL의 규칙에 따라 트래픽이 제어됩니다.
▶ 실습 완료 후 확인 사항:
- 생성한 보안 그룹 및 네트워크 ACL이 목록에 있는지 확인합니다.
- 각 보안 그룹의 인바운드 및 아웃바운드 규칙을 확인합니다.
- 각 네트워크 ACL의 인바운드 및 아웃바운드 규칙과 규칙 번호 (평가 순서)를 확인합니다.
- 보안 그룹과 네트워크 ACL을 연결한 EC2 인스턴스 및 서브넷에 대해 설정한 규칙에 따라 트래픽이 허용 또는 거부되는지 실제로 테스트해 봅니다 (예: 웹 서버에 HTTP/HTTPS 요청, SSH 접속 시도 등).
이 단계를 통해 VPC 보안의 핵심 요소인 보안 그룹과 네트워크 ACL을 생성하고 연결하여 네트워크 트래픽을 제어하는 기본적인 방법을 이해하고 실습할 수 있습니다. 실제 환경에서는 보안 요구 사항에 따라 더 복잡하고 세밀한 보안 구성을 적용해야 합니다.