# AWS ALB

## 개요

Panther는 AWS S3를 통해 Amazon Web Services(AWS) Application Load Balancer(ALB) 로그 수집을 지원합니다.

## AWS ALB 로그를 Panther에 온보딩하는 방법

ALB 로그를 Panther로 가져오려면 Panther 콘솔에서 AWS 계정의 데이터를 스트리밍할 S3 버킷을 설정하십시오.

1. Panther 콘솔의 왼쪽 탐색 창에서 **구성** > **로그 소스**.
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **새로 만들기.**
3. "AWS Application Load Balancer"를 검색한 다음 해당 타일을 클릭하십시오.
4. 슬라이드 아웃 패널에서 클릭하세요 **설정 시작**.
5. 다음을 따르세요 [데이터 전송을 위해 S3를 구성하는 Panther 문서](https://docs.panther.com/ko/data-onboarding/data-transports/aws/s3).

## Panther 관리 디텍션

참조 [Panther 관리](https://docs.panther.com/ko/detections/panther-managed) AWS용 룰은 [panther-analysis GitHub 리포지토리](https://github.com/panther-labs/panther-analysis/tree/main/rules).

## 지원되는 ALB 로그

### AWS.ALB

Application Load Balancer 로그는 애플리케이션 로드 밸런서에 대한 레이어 7 네트워크 로그입니다. 자세한 내용은 [ALB 액세스 로그에 대한 AWS 문서](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

```yaml
스키마: AWS.ALB
파서:
  네이티브:
    이름: AWS.ALB
설명: Application Load Balancer 로그는 애플리케이션 로드 밸런서에 대한 레이어 7 네트워크 로그입니다.
참조URL: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html
필드:
  - 이름: type
    required: true
    설명: 요청 또는 연결의 유형.
    type: string
  - 이름: timestamp
    required: true
    설명: 로드 밸런서가 클라이언트에 응답을 생성한 시각(UTC). WebSocket의 경우 연결이 종료된 시각입니다.
    type: timestamp
    시간 형식: rfc3339
  - 이름: elb
    설명: 로드 밸런서의 리소스 ID. 액세스 로그 항목을 파싱하는 경우 리소스 ID에 슬래시(/)가 포함될 수 있음을 참고하십시오.
    type: string
  - 이름: clientIp
    설명: 요청을 하는 클라이언트의 IP 주소.
    type: string
  - 이름: clientPort
    설명: 요청을 하는 클라이언트의 포트.
    type: bigint
  - 이름: targetIp
    설명: 이 요청을 처리한 대상의 IP 주소.
    type: string
  - 이름: targetPort
    설명: 이 요청을 처리한 대상의 포트.
    type: bigint
  - 이름: requestProcessingTime
    설명: 로드 밸런서가 요청을 수신한 시점부터 이를 대상에게 전송한 시점까지 경과한 총 시간(초, 밀리초 정밀도). 로드 밸런서가 요청을 대상에 디스패치할 수 없으면 이 값은 -1로 설정됩니다. 이는 대상이 유휴 타임아웃 이전에 연결을 닫거나 클라이언트가 잘못된 요청을 보낸 경우 발생할 수 있습니다. 등록된 대상이 유휴 타임아웃 이전에 응답하지 않으면 이 값은 -1로 설정될 수도 있습니다.
    type: float
  - 이름: targetProcessingTime
    설명: 로드 밸런서가 요청을 대상에 전송한 시점부터 대상이 응답 헤더를 보내기 시작할 때까지 경과한 총 시간(초, 밀리초 정밀도). 로드 밸런서가 요청을 대상에 디스패치할 수 없으면 이 값은 -1로 설정됩니다. 이는 대상이 유휴 타임아웃 이전에 연결을 닫거나 클라이언트가 잘못된 요청을 보낸 경우 발생할 수 있습니다. 등록된 대상이 유휴 타임아웃 이전에 응답하지 않으면 이 값은 -1로 설정될 수도 있습니다.
    type: float
  - 이름: responseProcessingTime
    설명: 로드 밸런서가 대상로부터 응답 헤더를 받은 시점부터 클라이언트로 응답을 전송하기 시작할 때까지 경과한 총 시간(초, 밀리초 정밀도). 여기에는 로드 밸런서에서의 대기 시간과 로드 밸런서에서 클라이언트로의 연결 획득 시간이 포함됩니다. 로드 밸런서가 요청을 대상에 보낼 수 없으면 이 값은 -1로 설정됩니다. 이는 대상이 유휴 타임아웃 이전에 연결을 닫거나 클라이언트가 잘못된 요청을 보낸 경우 발생할 수 있습니다.
    type: float
  - 이름: elbStatusCode
    required: true
    설명: 로드 밸런서의 응답 상태 코드.
    type: bigint
  - 이름: targetStatusCode
    설명: 대상의 응답 상태 코드. 이 값은 대상과의 연결이 설정되고 대상이 응답을 보낸 경우에만 기록됩니다.
    type: bigint
  - 이름: receivedBytes
    설명: 클라이언트(요청자)로부터 수신된 요청의 크기(바이트). HTTP 요청의 경우 헤더가 포함됩니다. WebSocket의 경우 연결에서 클라이언트로부터 수신된 총 바이트 수입니다.
    type: bigint
  - 이름: sentBytes
    설명: 클라이언트(요청자)에게 전송된 응답의 크기(바이트). HTTP 요청의 경우 헤더가 포함됩니다. WebSocket의 경우 연결에서 클라이언트에게 전송된 총 바이트 수입니다.
    type: bigint
  - 이름: requestHttpMethod
    설명: 요청에서 파싱된 HTTP 메서드.
    type: string
  - 이름: requestUrl
    설명: 요청에서 파싱된 HTTP URL.
    type: string
  - 이름: requestHttpVersion
    설명: 요청에서 파싱된 HTTP 버전.
    type: string
  - 이름: userAgent
    설명: 요청을 발생시킨 클라이언트를 식별하는 User-Agent 문자열. 문자열은 하나 이상의 제품 식별자 product[/version]로 구성됩니다. 문자열이 8KB보다 길면 잘립니다.
    type: string
  - 이름: sslCipher
    설명: '[HTTPS 리스너] SSL 암호화 방식. 리스너가 HTTPS 리스너가 아닌 경우 이 값은 NULL로 설정됩니다.'
    type: string
  - 이름: sslProtocol
    설명: '[HTTPS 리스너] SSL 프로토콜. 리스너가 HTTPS 리스너가 아닌 경우 이 값은 NULL로 설정됩니다.'
    type: string
  - 이름: targetGroupArn
    설명: 대상 그룹의 Amazon 리소스 이름(ARN).
    type: string
  - 이름: traceId
    설명: X-Amzn-Trace-Id 헤더의 내용.
    type: string
  - 이름: domainName
    설명: "[HTTPS 리스너] TLS 핸드셰이크 중 클라이언트가 제공한 SNI 도메인. 클라이언트가 SNI를 지원하지 않거나 도메인이 인증서와 일치하지 않아 기본 인증서가 클라이언트에 제공되는 경우 이 값은 NULL로 설정됩니다."
    type: string
  - 이름: chosenCertArn
    설명: '[HTTPS 리스너] 클라이언트에게 제시된 인증서의 ARN. 세션이 재사용된 경우 이 값은 session-reused로 설정됩니다. 리스너가 HTTPS 리스너가 아닌 경우 이 값은 NULL로 설정됩니다.'
    type: string
  - 이름: matchedRulePriority
    설명: 요청과 일치한 룰의 우선순위 값. 룰이 일치한 경우 이 값은 1에서 50,000 사이의 값입니다. 룰과 일치하지 않아 기본 동작이 수행된 경우 이 값은 0으로 설정됩니다. 룰 평가 중 오류가 발생하면 -1로 설정됩니다. 기타 다른 오류의 경우 NULL로 설정됩니다.
    type: bigint
  - 이름: requestCreationTime
    설명: 로드 밸런서가 클라이언트로부터 요청을 수신한 시각.
    type: timestamp
    시간 형식: rfc3339
  - 이름: actionsExecuted
    설명: 요청을 처리할 때 수행된 작업들. 이 값은 Actions Taken에 설명된 값을 포함할 수 있는 쉼표로 구분된 목록입니다. 잘못된 요청과 같이 수행된 작업이 없으면 이 값은 NULL로 설정됩니다.
    type: array
    element:
      type: string
  - 이름: redirectUrl
    설명: HTTP 응답의 Location 헤더에 대한 리디렉션 대상의 URL. 리디렉션 작업이 수행되지 않았다면 이 값은 NULL로 설정됩니다.
    type: string
  - 이름: errorReason
    설명: 오류 이유 코드. 요청이 실패한 경우 이는 Error Reason Codes에 설명된 오류 코드 중 하나입니다. 수행된 작업에 authenticate 작업이 포함되지 않거나 대상이 Lambda 함수가 아닌 경우 이 값은 NULL로 설정됩니다.
    type: string
  - 이름: targetPortList
    설명: 이 요청을 처리한 대상들의 IP 주소 및 포트의 공백으로 구분된 목록으로, 큰따옴표로 감싸여 있습니다. 현재 이 목록은 하나의 항목을 포함할 수 있으며 target:port 필드와 일치합니다.
    type: array
    element:
      type: string
      지표:
        - net_addr
  - 이름: targetStatusList
    설명: 대상들의 응답에서 반환된 상태 코드들의 공백으로 구분된 목록으로, 큰따옴표로 감싸여 있습니다. 현재 이 목록은 하나의 항목을 포함할 수 있으며 target_status_code 필드와 일치합니다. 이 값은 대상과의 연결이 설정되고 대상이 응답을 보낸 경우에만 기록됩니다. 그렇지 않으면 '-'로 설정됩니다.
    type: array
    element:
      type: string
  - 이름: classification
    설명: 디싱크(Desync) 완화 분류로, 큰따옴표로 감싸여 있습니다. 요청이 RFC 7230을 준수하지 않으면 가능한 값은 Acceptable, Ambiguous 및 Severe입니다. 요청이 RFC 7230을 준수하면 이 값은 '-'로 설정됩니다.
    type: string
  - 이름: classificationReason
    설명: 분류 이유 코드로, 큰따옴표로 감싸여 있습니다. 요청이 RFC 7230을 준수하지 않으면 이는 Classification reasons에 설명된 분류 코드 중 하나입니다. 요청이 RFC 7230을 준수하면 이 값은 '-'로 설정됩니다.
    type: string
```
