본문 바로가기
AWS

[AWS] ALB Access Log를 S3에 적재하기

by chan10 2023. 4. 9.

ALB Access LogALB에 접근하는 모든 트래픽에 대한 로그로 정상이든 비정상이든 통신한 모든 기록을 Log로 남깁니다.

ALB Access Log는 Timestamp : UTC 기준 작성, 5분 단위 저장, Network Interface마다 나눠서 저장된다는 특징을 가지고 있습니다.

 

S3

S3 메뉴에서 ALB Access 로그를 저장할 S3 버킷을 생성합니다.

 

버킷 이름을 작성 후 나머지는 기본으로 설정하여 버킷 만들기를 수행합니다.

 

버킷을 생성 후 해당 버킷에 들어가 ALB Access 로그를 저장할 폴더를 생성합니다.

ALB가 여러대 있다는 가정으로 2개 폴더를 생성했습니다.

 

마지막으로 ALB에 Access Log를 설정하기 전에 버킷 정책을 적용해야 합니다.

해당 버킷에 정책을 적용하여 허용된 시스템과 허용된 작업만 할 수 있도록 제한 하는데 버킷 정책을 작성하지 않으면 ALB에서 권한 문제로 로그를 S3에 저장할 수 없으니 꼭 적용해줘야 합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::600734575887:root"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::front-alb-log/*"
        }
    ]
}

 

ALB

ALB Access Log를 활성화 하기 위해 EC2 -> 로드밸런서 메뉴로 들어갑니다.

Access Log를 저장할 로드밸런서 체크 -> 작업 -> Load Balancer 속성 편집을 클릭합니다.

 

모니터링 - 엑세스 로그 활성화하여 S3에 Access Log를 저장할 수 있습니다.

S3 찾아보기 버튼을 클릭하여 생성한 S3 객체 및 폴더 경로 선택 후 설정을 마무리합니다.

 

만약 이전에 S3에서 버킷 정책이 설정되어 있지 않으면 아래와 같이 권한이 거절되니 참고해주세요~!!

 

설정 후 로드밸런서의 속성을 보면 적용한 Access Log 설정을 확인할 수 있습니다.

 

S3

다시 이전에 만들었던 S3 객체에서 해당 테스트 파일이 생성되어 있으면 성공적으로 연동된 것입니다.

 

Access Log 파일 생성을 위해 로드밸런서 도메인 or IP로 접속을 시도합니다.

 

접속 시도 후 일정 시간 이후에 버킷을 확인해보면 자동으로 로그 파일이 생성되었습니다.

Access Log 파일의 이름은 아래 형식으로 사용하여 생성하게 됩니다.

aws-account-id_elasticloadbalancing_region_app.load-balancer-id_end-time_ip-address_random-string.log.gz

 

ALB Access Log 분석

Access Log는 대상으로 전달되지 않거나 잘못된 요청이 오는 경우를 포함한 모든 요청을 기록하며 Health check 요청은 기록하지 않습니다.

아래와 같은 필드를 순서대로 기록되고 모든 필드는 공백으로 구분합니다.

 

[type] [time] [elb] [client:port] [target:port] [request_processing_time] [target_processing_time] [response_processing_time] [elb_status_code] [target_status_code] [received_bytes] [sent_bytes] ["request"] ["user_agent"] [ssl_cipher] [ssl_protocol] [target_group_arn] ["trace_id"] ["domain_name"] ["chosen_cert_arn"] [matched_rule_priority] [request_creation_time] ["actions_executed"] ["redirect_url"] ["error_reason"] ["target:port_list"] ["target_status_code_list"] ["classification"] ["classification_reason"]

 

Access Log 파일을 다운로드 후 압축을 풀면 아래와 같은 Access Log가 기록되어 있습니다.

  • [type] : http 통신
  • [time]  : 2023-03-13T09:01:07 시간대에 발생
  • [elb] : app/internet-facing-prod-front-alb/c919aa6b4c3415f9인스턴스로 요청
  • [client:port] : 151.242.247.90:50726
  • [target:port] : 10.40.30.175:80
  • [elb_status_code] : 200 (성공)
  • [target_status_code] : 200 (성공)
  • [request] : "GET http://13.124.216.157:80/ HTTP/1.1"

 

이렇게 ALB Access Log를 활성화해서 S3에 저장하는 법을 알아보았습니다.

그러나 ALB Access Log를 저장해서 보관하는 것은 좋지만 일일이 파일을 찾아보고 긴 로그를 확인하는 과정은 효율적이지 못합니다.

이를 위해 S3에 저장된 로그들을 SQL문으로 조회할 수 있도록 AWS Athena라는 서비스를 이용할 수 있습니다.