클라우드/AWS Cloud Technical Essentials

II-12. VPC Security (network ACLs, Security Groups)

datasa 2025. 5. 19. 12:37

 

 

 

@ 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. 보안 그룹 생성:

  1. AWS Management Console 접속: AWS 계정에 로그인하고 AWS Management Console로 이동합니다.
  2. EC2 서비스 접속: 서비스 목록에서 "EC2"를 검색하여 EC2 대시보드로 이동합니다.
  3. 보안 그룹 메뉴 선택: 왼쪽 메뉴의 "네트워크 및 보안" 섹션에서 "보안 그룹(Security Groups)" 을 클릭합니다.
  4. 보안 그룹 생성 시작: "보안 그룹 생성(Create security group)" 버튼을 클릭합니다.
  5. 보안 그룹 설정:
    • 보안 그룹 이름: 생성하는 보안 그룹을 식별하기 위한 이름을 입력합니다 (예: web-server-sg).
    • 설명: 보안 그룹에 대한 설명을 입력합니다 (예: 웹 서버에 대한 HTTP 및 HTTPS 접근 허용).
    • VPC ID: 드롭다운 메뉴에서 보안 그룹을 생성할 VPC를 선택합니다.
  6. 인바운드 규칙 추가: "인바운드 규칙 추가" 버튼을 클릭하여 필요한 인바운드 트래픽 규칙을 설정합니다.
    • 유형: 드롭다운 메뉴에서 트래픽 유형을 선택합니다 (예: HTTP, HTTPS, SSH).
    • 프로토콜: 선택한 유형에 따라 자동으로 설정됩니다 (예: TCP).
    • 포트 범위: 접근을 허용할 포트 범위를 입력합니다 (예: 80, 443, 22).
    • 소스: 트래픽을 허용할 소스를 지정합니다 (예: Anywhere - 모든 IP 주소, Custom IP - 특정 IP 주소 또는 CIDR 블록, My IP - 현재 접속 IP, 다른 보안 그룹). 주의: 프로덕션 환경에서는 Anywhere 사용을 최소화하고 특정 IP 범위 또는 보안 그룹으로 제한하는 것이 좋습니다.
    • 설명 (선택 사항): 규칙에 대한 설명을 입력합니다.
  7. 아웃바운드 규칙 추가 (기본적으로 모든 아웃바운드 허용): 필요에 따라 "아웃바운드 규칙 추가" 버튼을 클릭하여 아웃바운드 트래픽 규칙을 설정할 수 있습니다. 기본적으로 보안 그룹은 모든 아웃바운드 트래픽을 허용하지만, 특정 목적지로의 트래픽만 허용하도록 제한할 수 있습니다.
  8. 보안 그룹 생성 완료: 모든 규칙을 설정했으면 "보안 그룹 생성(Create security group)" 버튼을 클릭합니다.
  9. EC2 인스턴스에 보안 그룹 연결: 생성한 보안 그룹을 EC2 인스턴스를 생성할 때 연결하거나, 기존 인스턴스의 네트워크 인터페이스 설정을 변경하여 연결할 수 있습니다.

2. 네트워크 ACL 생성 및 서브넷 연결:

  1. AWS Management Console 접속: AWS 계정에 로그인하고 AWS Management Console로 이동합니다.
  2. VPC 서비스 접속: 서비스 목록에서 "VPC"를 검색하여 VPC 대시보드로 이동합니다.
  3. 네트워크 ACL 메뉴 선택: 왼쪽 메뉴의 "가상 프라이빗 클라우드" 섹션에서 "네트워크 ACL(Network ACLs)" 을 클릭합니다.
  4. 네트워크 ACL 생성 시작: "네트워크 ACL 생성(Create network ACL)" 버튼을 클릭합니다.
  5. 네트워크 ACL 설정:
    • 이름 태그: 생성하는 네트워크 ACL을 식별하기 위한 이름을 입력합니다 (예: public-subnet-acl).
    • VPC ID: 드롭다운 메뉴에서 네트워크 ACL을 생성할 VPC를 선택합니다.
  6. 인바운드 규칙 추가: 생성된 네트워크 ACL을 선택하고 하단 창의 "인바운드 규칙(Inbound Rules)" 탭으로 이동하여 "인바운드 규칙 편집(Edit inbound rules)" 버튼을 클릭합니다.
    • 규칙 번호: 규칙 평가 순서를 결정하는 번호를 입력합니다 (낮은 번호부터 평가).
    • 유형: 드롭다운 메뉴에서 트래픽 유형을 선택합니다 (예: HTTP, HTTPS, SSH, Custom TCP Rule).
    • 프로토콜: 선택한 유형에 따라 자동으로 설정되거나 직접 선택합니다 (예: TCP, UDP).
    • 포트 범위: 접근을 허용 또는 거부할 포트 범위를 입력합니다.
    • 소스: 트래픽의 소스 IP 주소 또는 CIDR 블록을 입력합니다.
    • 허용/거부: ALLOW 또는 DENY를 선택하여 트래픽을 허용할지 거부할지 결정합니다.
    • 설명 (선택 사항): 규칙에 대한 설명을 입력합니다.
  7. 아웃바운드 규칙 추가: 하단 창의 "아웃바운드 규칙(Outbound Rules)" 탭으로 이동하여 "아웃바운드 규칙 편집(Edit outbound rules)" 버튼을 클릭하고 유사한 방식으로 아웃바운드 트래픽 규칙을 설정합니다. 주의: 네트워크 ACL은 무상태 방화벽이므로, 허용된 인바운드 트래픽에 대한 아웃바운드 응답 트래픽도 명시적으로 허용하는 규칙을 추가해야 합니다. 예를 들어, 인바운드로 80 포트를 허용했다면, 아웃바운드로 임시 포트 범위 (1024-65535) 에 대한 허용 규칙도 추가해야 웹 서버의 응답이 클라이언트에 전달될 수 있습니다.
  8. 서브넷 연결: 생성된 네트워크 ACL을 선택하고 하단 창의 "서브넷 연결(Subnet Associations)" 탭으로 이동하여 "서브넷 연결 편집(Edit subnet associations)" 버튼을 클릭합니다. 연결하려는 서브넷의 체크박스를 선택하고 "저장(Save)" 버튼을 클릭합니다. 이제 선택한 서브넷의 모든 인스턴스는 이 네트워크 ACL의 규칙에 따라 트래픽이 제어됩니다.

실습 완료 후 확인 사항:

  • 생성한 보안 그룹 및 네트워크 ACL이 목록에 있는지 확인합니다.
  • 각 보안 그룹의 인바운드 및 아웃바운드 규칙을 확인합니다.
  • 각 네트워크 ACL의 인바운드 및 아웃바운드 규칙과 규칙 번호 (평가 순서)를 확인합니다.
  • 보안 그룹과 네트워크 ACL을 연결한 EC2 인스턴스 및 서브넷에 대해 설정한 규칙에 따라 트래픽이 허용 또는 거부되는지 실제로 테스트해 봅니다 (예: 웹 서버에 HTTP/HTTPS 요청, SSH 접속 시도 등).

이 단계를 통해 VPC 보안의 핵심 요소인 보안 그룹과 네트워크 ACL을 생성하고 연결하여 네트워크 트래픽을 제어하는 기본적인 방법을 이해하고 실습할 수 있습니다. 실제 환경에서는 보안 요구 사항에 따라 더 복잡하고 세밀한 보안 구성을 적용해야 합니다.