AWS WAF 로그 수집

다음에서 지원:

이 문서에서는 Google Security Operations 피드를 설정하여 AWS 웹 애플리케이션 방화벽 (WAF) 로그를 수집하는 방법을 설명합니다. 파서는 원시 JSON 형식 로그를 Google SecOps UDM을 준수하는 구조화된 형식으로 변환합니다. IP 주소, URL, 사용자 에이전트, 보안 규칙 세부정보와 같은 필드를 추출하여 일관된 표현과 분석을 위해 해당 UDM 필드에 매핑합니다.

시작하기 전에

*다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • AWS에 대한 액세스 권한

Amazon S3 버킷 구성

  1. 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
  2. 나중에 사용할 수 있도록 버킷 이름리전을 저장합니다.
  3. 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
  4. 생성된 사용자를 선택합니다.
  5. 보안 사용자 인증 정보 탭을 선택합니다.
  6. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  7. 사용 사례서드 파티 서비스를 선택합니다.
  8. 다음을 클릭합니다.
  9. 선택사항: 설명 태그를 추가합니다.
  10. 액세스 키 만들기를 클릭합니다.
  11. CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  12. 완료를 클릭합니다.
  13. 권한 탭을 선택합니다.
  14. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  15. 권한 추가를 선택합니다.
  16. 정책 직접 연결을 선택합니다.
  17. AmazonS3FullAccess 정책을 검색하여 선택합니다.
  18. 다음을 클릭합니다.
  19. 권한 추가를 클릭합니다.

WAF 웹 ACL (액세스 제어 목록) 만들기

아직 AWS WAF를 설정하지 않은 경우 WAF 웹 ACL (액세스 제어 목록)을 만들어야 합니다. 기존 설정의 경우 다음 절차로 건너뛰어도 됩니다.

  1. AWS 콘솔에서 AWS WAF & Shield를 검색하여 선택합니다.
  2. 웹 ACL 만들기를 클릭합니다.
  3. 다음 설정을 입력합니다.
    • 이름: ACL에 이름을 지정합니다 (예: my-waf-web-acl).
    • 리전: WAF를 적용할 리전을 선택합니다.
    • CloudWatch 측정항목: 트리거된 활동과 규칙을 추적하기 위해 측정항목 수집을 사용 설정합니다.
  4. 생성한 후 로깅을 사용 설정할 웹 ACL을 선택합니다.

AWS WAF 로깅을 구성하는 방법

  1. AWS WAF 콘솔에서 웹 ACL의 로깅 탭으로 이동합니다.
  2. 로깅 사용 설정을 클릭합니다.
  3. 로그의 대상으로 Amazon S3를 선택합니다.
  4. 이전에 만든 S3 버킷을 선택하여 로그를 저장합니다.
  5. 선택사항: 로그를 정리하기 위한 로그 접두사를 구성합니다 (예: waf-logs/).
  6. 저장을 클릭합니다.

S3 버킷 권한 확인

S3 버킷에 AWS WAF가 로그를 작성할 수 있는 적절한 권한이 있는지 확인합니다.

  1. S3 콘솔로 이동합니다.
  2. 로그가 저장될 버킷을 선택합니다.
  3. 권한 탭에서 AWS WAF가 로그를 작성할 수 있도록 다음 버킷 정책을 추가합니다.

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. 저장을 클릭합니다.

피드 설정

Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.

  • SIEM 설정 > 피드 > 새로 추가
  • 콘텐츠 허브 > 콘텐츠 팩 > 시작하기

AWS WAF 피드를 설정하는 방법

  1. Amazon Cloud Platform 팩을 클릭합니다.
  2. AWS WAF 로그 유형을 찾습니다.
  3. 다음 필드에 값을 지정합니다.

    • 소스 유형: Amazon SQS V2
    • Queue Name: 읽어올 SQS 큐 이름
    • S3 URI: 버킷 URI입니다.
      • s3://your-log-bucket-name/
        • your-log-bucket-name을 실제 S3 버킷 이름으로 바꿉니다.
    • 소스 삭제 옵션: 수집 환경설정에 따라 삭제 옵션을 선택합니다.

    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.

    • SQS 대기열 액세스 키 ID: 20자리 영숫자 문자열인 계정 액세스 키입니다.

    • SQS 대기열 보안 비밀 액세스 키: 40자로 된 영숫자 문자열인 계정 액세스 키입니다.

    고급 옵션

    • 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
    • 애셋 네임스페이스: 피드와 연결된 네임스페이스입니다.
    • 수집 라벨: 이 피드의 모든 이벤트에 적용되는 라벨입니다.
  4. 피드 만들기를 클릭합니다.

이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하는 방법에 관한 자세한 내용은 제품별 피드 구성을 참고하세요.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
action security_result.action 작업이 ALLOW인 경우 security_result.action을 ALLOW로, security_result.severity를 INFORMATIONAL로 설정합니다. 작업이 BLOCK인 경우 security_result.action을 BLOCK으로 설정합니다. 작업이 CAPTCHA이고 captchaResponse.responseCode가 405인 경우 security_result.action을 BLOCK으로 설정하고 security_result.action_details를 'CAPTCHA {captchaResponse.failureReason}'으로 설정합니다.
captchaResponse.failureReason security_result.action_details action 및 captchaResponse.responseCode와 함께 사용하여 security_result.action_details를 결정합니다.
captchaResponse.responseCode security_result.action_details action 및 captchaResponse.failureReason과 함께 사용하여 security_result.action_details를 결정합니다.
httpRequest.clientIp principal.ip, principal.asset.ip principal.ip 및 principal.asset.ip에 직접 매핑됩니다.
httpRequest.headers target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid httpRequest.headers의 각 헤더를 반복합니다. 헤더 이름이 'host' 또는 'Host'인 경우 값은 target.hostname 및 target.asset.hostname에 매핑됩니다. 헤더 이름이 'User-Agent' 또는 'user-agent'인 경우 값은 network.http.user_agent에 매핑되고 network.http.parsed_user_agent로 파싱됩니다. 헤더 이름이 'Referer' 또는 'referer'인 경우 값은 network.http.referral_url에 매핑됩니다. 헤더 이름이 '(?i)time-zone'이면 값은 target.location.country_or_region에 매핑됩니다. 헤더 이름이 'authorization'인 경우 값이 디코딩되고 사용자 이름이 추출되어 target.user.userid에 매핑됩니다. 다른 모든 헤더는 target.resource.attribute.labels에 키-값 쌍으로 추가됩니다.
httpRequest.httpMethod network.http.method network.http.method에 직접 매핑됩니다.
httpRequest.requestId network.session_id network.session_id에 직접 매핑됩니다.
httpRequest.uri target.url target.url에 직접 매핑됩니다.
httpSourceId target.resource.name target.resource.name에 직접 매핑됩니다.
httpSourceName metadata.product_event_type metadata.product_event_type에 직접 매핑됩니다.
라벨 security_result.rule_labels 라벨의 각 라벨을 반복합니다. 라벨 이름이 비어 있지 않으면 security_result.rule_labels에 키-값 쌍으로 추가됩니다.
nonTerminatingMatchingRules security_result.action_details, security_result.rule_labels nonTerminatingMatchingRules의 각 규칙을 반복합니다. 작업이 ALLOW이고 규칙 작업이 CAPTCHA인 경우 security_result.action_details를 'CAPTCHA SUCCESSFUL'로 설정하고 키 'nonTerminatingCaptchaRuleName'을 사용하여 규칙 ID를 security_result.rule_labels에 추가합니다. 작업이 BLOCK 또는 ALLOW이고 규칙 작업이 COUNT인 경우 security_result.action_details를 'COUNT RULE'로 설정하고 키 'nonTerminatingCountRuleName'을 사용하여 규칙 ID를 security_result.rule_labels에 추가합니다. 작업이 BLOCK 또는 ALLOW이고 규칙 작업이 CHALLENGE인 경우 security_result.action_details를 'COUNT RULE'로 설정하고 키가 'nonTerminatingChallengeRuleName'인 security_result.rule_labels에 규칙 ID를 추가합니다.
rateBasedRuleList security_result.rule_id, security_result.rule_name, security_result.description terminatingRuleType이 'RATE_BASED'인 경우 rateBasedRuleList의 각 규칙을 반복합니다. terminatingRuleId가 규칙 이름과 일치하면 규칙 ID, 규칙 이름, 설명이 각각 security_result.rule_id, security_result.rule_name, security_result.description에 매핑됩니다.
responseCodeSent network.http.response_code network.http.response_code에 직접 매핑되고 정수로 변환됩니다.
ruleGroupList intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields ruleGroupList의 각 규칙 그룹을 반복합니다. 규칙 그룹 ID가 intermediary.labels에 키-값 쌍으로 추가됩니다. terminatingRuleType이 'MANAGED_RULE_GROUP'이고 terminatingRuleId가 규칙 그룹 ID와 일치하면 규칙 ID, 규칙 이름, 설명이 각각 security_result.rule_id, security_result.rule_name, security_result.description에 매핑됩니다. terminatingRuleType이 'GROUP'인 경우 종료 규칙 ID가 추출되어 security_result.rule_name 및 security_result.description에 매핑됩니다. 종료 규칙 그룹 ID가 키 'terminatingRuleGroupName'과 함께 security_result.rule_labels에 추가됩니다. terminatingRuleType이 'REGULAR'인 경우 종료 규칙 작업이 추출되어 security_result.detectionfields에 키 'terminatingRuleAction{index}'와 함께 추가됩니다.
terminatingRuleId security_result.rule_id, security_result.rule_name, security_result.description terminatingRuleType이 'RATE_BASED', 'MANAGED_RULE_GROUP' 또는 'REGULAR'인 경우 terminatingRuleId는 security_result.rule_id, security_result.rule_name에 매핑되고 security_result.description을 구성하는 데 사용됩니다.
terminatingRuleMatchDetails security_result.description, security_result.category_details, security_result.detection_fields terminatingRuleMatchDetails의 각 일치를 반복합니다. security_result.description을 'Terminating Rule'로 설정합니다. 조건 유형이 비어 있지 않으면 security_result.category_details에 추가됩니다. 위치가 비어 있지 않으면 키 'location'과 함께 security_result.detection_fields에 추가됩니다. 일치하는 각 데이터 요소는 'matchedData' 키와 함께 security_result.detection_fields에 추가됩니다.
terminatingRuleType security_result.rule_type security_result.rule_type에 직접 매핑됩니다.
타임스탬프 metadata.event_timestamp 타임스탬프로 변환되어 metadata.event_timestamp에 매핑됩니다.
webaclId intermediary.resource.name intermediary.resource.name에 직접 매핑됩니다.
metadata.vendor_name 'AMAZON'으로 설정합니다.
metadata.product_name 'AWS 웹 애플리케이션 방화벽'으로 설정합니다.
metadata.log_type 'AWS_WAF'로 설정됩니다.
network.application_protocol 'HTTP'로 설정됩니다.
metadata.event_type httpRequest.headers에 'host' 또는 'Host' 헤더가 포함된 경우 'NETWORK_HTTP'로 설정됩니다. 그 외의 경우에는 'STATUS_UPDATE'로 설정합니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.