군만두의 IT 개발 일지

[스터디15] 07. AWS WAF & VPC Flow Logs & Managed Prefix List 본문

학습일지

[스터디15] 07. AWS WAF & VPC Flow Logs & Managed Prefix List

mandus 2026. 9. 20. 13:37

목차

    22장 외부 공격을 보호하는 방화벽 서비스 파악하기

    22.1 외부 공격을 보호하는 방화벽 서비스, AWS WAF란?

    AWS는 허용하지 않는 사용자의 접근을 차단하기 위해 보안 그룹을 제공한다. 보안 그룹은 EC2, RDS에서 설정하며, 네트워크 계층과 전송 계층에서 효율적인 보호 기능을 제공한다. 하지만 보안 그룹은 IP만을 제한하므로, 사용자가 개발한 애플리케이션을 외부 공격으로부터 보호하기에는 부족하다.

     

    AWS WAF는 아마존 클라우드프론트, 애플리케이션 로드 밸런서 같은 서비스에 연결할 수 있는 서비스다. 요청에 대해 악의적인 공격이 탐지되는지 검토하며, 필요에 따라 차단한다.

    구분 보안 그룹 AWS WAF
    통제 기준 IP 주소와 포트를 기준으로 접근을 제한한다. IP 주소, HTTP 헤더, 요청 본문, URI 등 요청의 내용을 검사한다.
    연결 대상 EC2, RDS 등에 설정한다. 클라우드프론트, 애플리케이션 로드 밸런서 등에 연결한다.

    22.2 외부 공격을 보호하는 방화벽 서비스, AWS WAF 살펴보기

    애플리케이션 로드 밸런서에 AWS WAF를 도입했다면 요청은 다음 순서로 처리된다.

    • 보안 그룹 판단: 로드 밸런서의 보안 그룹이 허용하는 요청인지 판단한다. 허용하지 않는다면 요청을 거부한다.
    • WAF 검토: 허용하는 요청이라면 AWS WAF에서 악의적인 공격인지 검토한다.
    • 로깅: 모든 요청 및 대응은 클라우드워치를 통해 로깅된다. 아마존 S3에 로그를 보존해 공격 시도를 추적하고 분석할 수 있다.
    • 요청 전달: 검토 결과 문제가 없다면 웹 애플리케이션으로 요청을 보낸다.

    아마존 클라우드프론트를 사용한다면 두 가지 패턴을 생각해볼 수 있다.

    패턴 구성
    패턴 1 클라우드프론트가 OAI로 S3를 설정한다. 클라우드프론트에 AWS WAF를 설정해 특정 IP의 접근을 차단·허용하고, 외부 공격을 탐지하고 방어한다.
    패턴 2 로드 밸런서와 클라우드프론트로 웹 애플리케이션을 운용하는 환경이다. 클라우드프론트에만 AWS WAF를 설정하거나 두 서비스 모두에 설정한다.

    더 높은 보안을 고려한다면 두 서비스 모두에 설정하는 것이 좋다. 그러나 대부분의 트래픽이 클라우드프론트를 통해 유입된다면 클라우드프론트에만 적용해도 충분히 효과적이다. 두 곳에 각각 설정하면 비용이 증가하므로, 비용 효율성 측면에서는 클라우드프론트 단독 적용이 유리하다.

    22.2.1 AWS WAF의 주요 5가지 기능

    기능 설명
    애플리케이션에 대한 공격 방어 IP 주소, HTTP 헤더, 통신 요청 본문, 사용자 지정 URI 등의 기준에 따라 통신을 필터링하는 규칙을 생성한다.
    IP 제한으로 인한 무단 액세스 차단 의심스러운 또는 악의적인 IP 주소로부터의 통신을 미리 차단한다.
    DDoS 공격 대책 액세스 횟수가 요율 기준 규칙의 임곗값을 초과하면 해당 IP 주소의 액세스를 일시적으로 제한한다.
    악의적인 봇 대책 스크레이퍼, 스캐너, 크롤러 같은 봇을 모니터링한다. 검색 엔진 봇을 비롯한 정상적인 봇 액세스만 허용할 수 있다.
    계정의 무단 로그인 방지 로그인 페이지를 모니터링하고 도난당한 자격증명으로 로그인하는지 확인한다.

    22.2.2 AWS WAF의 관리형 규칙

    AWS WAF를 생성하는 것만으로는 위 기능이 동작하지 않는다. 방어하고자 하는 트래픽을 필터링할 규칙이 필요하다.

    • 관리형 규칙: AWS에서 제공하는 규칙 집합이다. 직접 규칙을 만드는 복잡한 과정을 생략할 수 있다.
    • 필수 도입 권장 규칙: 다음 4가지를 기본적으로 선택한다.
    규칙명 용도 용량
    Amazon IP reputation list 아마존 내부 위협 인텔리전스를 기반으로 만든 규칙 25
    Core rule set 일반 웹 애플리케이션에 적용하는 규칙 700
    Known bad inputs 무단 액세스 및 취약성 악용과 관련된 입력 패턴을 차단하는 규칙 200
    SQL database SQL 데이터베이스의 악용을 방지하는 규칙 200

    그 외 규칙은 구성하고자 하는 환경에 따라 선택한다. Admin protection, Anonymous IP list, PHP·WordPress application 등이 있으며, OS 관련 규칙은 OS에 맞추어 선택한다. 예를 들어 워드프레스를 이용하는 웹사이트라면 WordPress application 규칙을 선택한다.

    • WCU: 웹 ACL 용량 단위(web ACL capacity units)로, 각 규칙마다 용량을 가진다.
    • 용량 제한: 설정할 수 있는 규칙의 최대 용량은 5000WCU다. 1500WCU를 초과하는 용량에 대해서는 추가 요금이 청구된다.

    22.2.3 AWS WAF의 커스텀 규칙

    AWS WAF의 규칙 설정은 관리형 규칙으로도 충분하지만, 사용자가 직접 규칙을 커스텀해 설정할 수도 있다. 커스텀 규칙은 IP 세트, 규칙 빌더, 규칙 그룹으로 나누어 생성한다.

    커스텀 규칙 설명
    IP 세트 특정 IP의 요청에 대한 허용 또는 차단과 같은 액션을 구현한다.
    규칙 빌더 규칙을 작성하며, 여러 조건을 연결하는 AND, OR을 선택할 수 있다. 헤더, 국가, IP 같은 검사 필드나 XSS, SQL 인젝션 같은 조건을 선택해 규칙 하나를 생성한다.
    규칙 그룹 작성한 규칙을 담을 수 있는 독자적인 규칙 그룹이다. 사전에 만들고 등록해 설정한다.

    22.3 AWS WAF 활용하기

    아마존 클라우드프론트에 AWS WAF를 연결해 관리형 규칙으로 보호하는 환경을 구축한다.

    • 구성: 클라우드프론트의 OAI로 S3를 지정한다.
    • 적용 규칙: Amazon IP reputation list, Known bad inputs, SQL database 세 가지를 적용한다.
    • 참고: 데이터베이스는 없지만 테스트 환경이므로 필수 규칙 항목인 SQL database도 추가한다.

    22.3.1 아마존 클라우드프론트에 AWS WAF 도입해보기

    스택은 WAF.yml → CloudFront.yml 순서로 생성한다.

    속성 설명
    AWS::WAFv2::WebACL AWS WAF를 생성한다.
    DefaultAction 규칙에 해당하는 항목이 없을 경우 요청을 허용할지 거부할지 선택한다.
    Scope 클라우드프론트에 도입하므로 CLOUDFRONT를 입력한다.
    VisibilityConfig 클라우드워치 메트릭을 활성화하고, 샘플링된 요청 정보를 모니터링한다. 샘플링은 AWS WAF가 필터링하는 웹 요청 중 일부를 선택해 자세히 분석하는 기능이다.
    Rules·Priority 관리형 규칙을 추가하고 우선순위를 정한다. 일치하는 항목이 없다면 DefaultAction에 따라 요청을 처리한다.
    AWS::WAFv2::LoggingConfiguration AWS WAF의 로그 저장소를 지정한다.

    여기서 짚고 넘어갈 점은 OverrideAction의 Count다. 관리형 규칙은 일치하는 항목이 있으면 요청을 차단하지만, Count를 지정하면 허용 또는 차단 동작을 무효화하고 해당 요청이 몇 번 발생하는지만 센다.

    • 모니터링: 악의적인 트래픽이 얼마나 자주 발생하는지 확인한다.
    • 규칙 정리: 자주 요청되는 공격은 차단하고, 불필요한 규칙은 제거한다.

    22.3.2 UI로 불러와 아마존 클라우드프론트에 AWS WAF 도입해보기

    클라우드포메이션 스택을 생성하고, 클라우드프론트에 AWS WAF가 도입되었는지 확인한다.

    • 리전: 클라우드프론트의 글로벌 리전은 버지니아 북부로 고정되어 있다. 따라서 AWS WAF 스택도 반드시 버지니아 북부에서 생성해야 한다.
    • 콘솔 확인: [리소스 및 보호]에서 규칙과 로깅 설정을 확인한다.
    • 대시보드: AWS Threat Intelligence가 2주간의 허용된 트래픽 패턴을 분석해 [트래픽 특성], [규칙 특성], [봇], [DDoS 방식] 지표를 보여준다.
    • UI 변경: AWS WAF 콘솔 UI는 2025년 6월 기준으로 변경되어 이전 자료와 화면이 다를 수 있다.

    23장 네트워크 트래픽 로깅 서비스 파악하기

    23.1 네트워크 트래픽 로깅 서비스, VPC 플로우 로그란?

    VPC 플로우 로그는 VPC에서 전송되고 수신되는 트래픽에 대한 정보를 수집하는 기능이다. 수집한 트래픽은 아마존 S3, 클라우드워치 로그 등에 보존한다. 보존한 로그를 바탕으로 네트워크 구성이 의도한 대로 작동하는지 검토하고 분석할 수 있다.

    • 보안 진단: 보안 요건대로 동작하는지 확인하거나 진단한다.
    • 네트워크 통신 문제 조사: 서버에 접속할 수 없는 경우, 트래픽이 어디까지 도달하는지 확인해 통신 문제를 해결한다.
    • 위협 탐지: 아마존 가드듀티에서 위협 탐지를 위한 데이터 소스로 활용한다. 가드듀티는 AWS 계정에서 악의적인 활동이 있는지 모니터링하는 서비스다.

    23.2 네트워크 트래픽 로깅 서비스, VPC 플로우 로그 살펴보기

    막상 취득한 로그를 살펴보면 각 필드가 무엇을 의미하는지 이해하기 어렵다. 필드의 의미를 알면 로그 데이터를 보다 효과적으로 분석하고 활용할 수 있다.

    23.2.1 VPC 플로우 로그 필드

    필드 설명
    version VPC 플로우 로그 버전이다. 기본 형식이면 2가 출력되고, 커스텀하는 경우 해당 버전이 표시된다.
    account-id 12자리 숫자의 AWS 계정 ID가 표시된다.
    interface-id 트래픽이 기록되는 네트워크 인터페이스의 ID를 표시한다.
    srcaddr·dstaddr 트래픽이 시작된 소스 주소와 목적지 주소를 표시한다.
    srcport·dstport 트래픽이 시작된 소스 포트와 목적지 포트가 표시된다.
    protocol 트래픽의 IANA 프로토콜 번호가 표시된다.
    packets·bytes 전송된 패킷 수와 바이트 수를 표시한다.
    start·end 첫 번째 패킷과 마지막 패킷이 수신된 시간을 UNIX초로 표시한다.
    action 트래픽이 허용되면 ACCEPT, 거부되면 REJECT가 표시된다.
    log-status 로그가 생성되면 OK, 트래픽이 없으면 NODATA, 로그 생성이 스킵되면 SKIPDATA를 표시한다.

    보안 및 네트워크 트래픽 분석의 관점에서 주목할 부분은 다음과 같다.

    • srcaddr, dstaddr: 비정상적인 IP 주소나 악성 IP와의 통신을 확인한다.
    • srcport, dstport: 일반적이지 않은 포트 혹은 악성 포트를 확인한다.
    • protocol: 부적절한 프로토콜 사용을 감지한다.
    • action: 의심스러운 트래픽을 식별하거나 보안 그룹에서 거부된 트래픽을 분석한다.
    • bytes, packets: 비정상적으로 큰 데이터의 전송이나 DDoS 공격 같은 비정상적인 트래픽을 식별한다.
    • start, end: 특정 시간대의 비정상적인 활동을 파악한다.

    23.3 VPC 플로우 로그 활용하기

    EC2 인스턴스를 생성해 해당 인스턴스에 접속한 후, VPC 플로우 로그에서 생성된 로그를 확인한다.

    23.3.1 VPC 플로우 로그를 통해 로그 수집해보기

    스택은 VPC → 보안 그룹 → EC2 → CloudFront → VPC-Flow-Logs 순서로 생성한다.

    • Type: AWS::EC2::FlowLog를 입력해 VPC Flow Logs를 생성한다.
    • LogDestinationType·LogDestination: 로그를 보존할 리소스(s3)와 S3 버킷의 Arn을 지정한다.
    • ResourceId·ResourceType: 트래픽을 모니터링할 VPC를 지정한다. VPC 이외에도 NetworkInterface, Subnet, TransitGateway 등을 모니터링할 수 있다.
    • TrafficType: ACCEPT, ALL, REJECT 중 모니터링할 트래픽 유형을 선택한다. 실습에서는 ALL로 설정한다.

    23.3.2 UI로 불러와 VPC 플로우 로그를 통해 로그 수집해보기

    VPC-Flow-Logs 스택을 생성할 때 VPC ID를 선택하고, 버킷 이름이 중복되지 않도록 입력한다. 생성된 로그는 다음 순서로 확인한다.

    • 콘솔 확인: VPC 콘솔의 [플로우 로그] 탭에서 생성된 플로우 로그를 확인한다.
    • 다운로드: [대상 이름]을 클릭하면 S3 버킷으로 이동해 로그를 다운로드할 수 있다.
    • 로그 확인: 로그는 gz 파일로 압축되어 있으므로, 압축을 풀면 각 필드를 확인할 수 있다.
    • 로그가 없을 때: EC2 인스턴스에 접속을 시도하거나 curl, sudo yum update -y 같은 명령어를 실행해 트래픽을 발생시킨다.

    24장 IP 주소를 관리하기 위한 서비스 파악하기

    24.1 IP 주소를 관리하는 서비스, 관리형 접두사 목록이란?

    관리형 접두사 목록은 하나 이상의 IP 주소가 포함되어 있는 IP 주소의 집합이다. IP 주소를 지정하는 보안 그룹과 라우팅 테이블에서 사용된다. 이를 통해 보안 그룹과 라우팅 테이블을 보다 쉽게 구성하고 유지 관리할 수 있다.

    24.2 IP 주소를 관리하는 서비스, 관리형 접두사 목록 살펴보기

    SSH 통신을 허용하는 IP 주소가 4개면 보안 그룹에 4개의 IP 주소를 허용하면 된다. 하지만 IP 주소 수는 사용 환경에 따라 20개에서 30개, 그 이상으로 늘어날 수 있다.

    • 복잡성: 각 IP 주소마다 별도의 규칙을 추가해야 하므로 보안 그룹 구성이 복잡해진다.
    • 작업량: 여러 보안 그룹에 같은 변경 사항을 적용해야 할 경우 작업량이 급증한다.
    • 가시성: 많은 규칙으로 인해 전체 구성을 한눈에 파악하기 어려워진다.

    관리형 접두사 목록을 사용하면 허용하고자 하는 주소는 목록에서 관리한다. 보안 그룹에는 관리형 접두사 목록 단 하나의 규칙만 추가하면 된다. 이를 통해 체계적인 관리와 확장성, 재사용성, 가독성 향상을 기대할 수 있다.

    24.2.1 고객 관리형 접두사 목록

    고객 관리형 접두사 목록은 사용자가 직접 IP 주소를 지정하고 관리하는 집합이다. 사용자가 직접 커스텀하고 생성 및 삭제할 수 있다.

    24.2.2 AWS 관리형 접두사 목록

    AWS 관리형 접두사 목록은 서비스의 IP 주소 범위의 집합이다. AWS에서 생성하므로 사용자가 직접 커스텀하거나 수정, 삭제할 수 없다.

    • 사용 가능한 목록: 아마존 클라우드프론트, 아마존 다이나모DB, AWS 그라운드 스테이션, 아마존 라우트53, 아마존 S3, 아마존 S3 익스프레스 원 존, 아마존 VPC 래티스
    • 사용처: 고객 관리형 접두사 목록과 마찬가지로 보안 그룹, 라우팅 테이블에 사용할 수 있다.
    • 예시: 클라우드프론트에서 EC2로 접속하는 구성이라면 클라우드프론트의 접두사 목록으로 접근을 제한할 수 있다.

    24.3 관리형 접두사 목록 활용하기

    고객 관리형 접두사 목록을 생성해보고, 생성한 고객 관리형 접두사 목록을 보안 그룹에 추가한다.

    24.3.1 고객 관리형 접두사 목록을 생성해 보안 그룹에 추가해보기

    스택은 VPC → AWS_Managed_Prefix_List → Security_Group 순서로 생성한다.

    속성 설명
    AWS::EC2::PrefixList 고객 관리형 접두사 목록을 생성한다.
    AddressFamily IPv4 혹은 IPv6의 IP 주소 타입을 입력한다.
    Entries 관리할 IP 주소를 입력한다. 실습에서 입력한 IP 주소는 테스트를 위한 임의의 주소다.
    MaxEntries 관리형 접두사 목록에 추가할 최대 IP 주소 수를 입력한다.
    SourcePrefixListId 보안 그룹의 SecurityGroupIngress 속성에서 고객 관리형 접두사 목록을 추가한다. 목록에 있는 IP 주소는 22번 포트로 접속할 수 있게 된다.

    24.3.2 UI로 불러와 고객 관리형 접두사 목록을 생성해 보안 그룹에 추가해보기

    각 스택에는 별다른 파라미터 설정값이 없으므로 기본값을 유지한 채 생성한다. 생성 결과는 VPC 콘솔의 [관리형 접두사 목록]에서 확인한다.

    • 항목: 고객 관리형 접두사 목록에서 관리하는 IP 주소를 확인한다.
    • 연결: 해당 접두사 목록을 사용하는 리소스를 확인한다.
    • 보안 그룹: 인바운드 규칙에 고객 관리형 접두사 목록이 추가되어 있다.

    이전에는 4개의 IP 주소에 대해 각각 인바운드 규칙을 설정해야 했으나, 이제는 단 하나의 규칙만으로 22번 포트를 관리할 수 있다. 구성이 더 간편해지고 유지 관리가 쉬워진다.

     

    이 글은 『AWS 잘하는 개발자 되기』책을 학습한 내용을 정리한 것입니다.
    Comments