Network Load Balancer의 액세스 로그 - Elastic Load Balancing

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Network Load Balancer의 액세스 로그

Elastic Load Balancing은 사용자의 Network Load Balancer로 전송된 TLS 요청에 대한 자세한 정보를 캡처하는 액세스 로그를 제공합니다. 이러한 액세스 로그를 사용하여 트래픽 패턴을 분석하고 문제를 해결할 수 있습니다.

중요

로드 밸런서에 TLS 리스너가 있고 액세스 로그가 TLS 요청에 관한 정보만 포함하는 경우에만 액세스 로그가 생성됩니다.

액세스 로깅은 Elastic Load Balancing의 옵션 기능으로, 기본적으로 비활성화되어 있습니다. 로드 밸런서에 대해 액세스 로그를 활성화하면 Elastic Load Balancing은 로그를 압축 파일로 캡처하여 이를 지정된 Amazon S3 버킷에 저장합니다. 액세스 로그는 언제든지 비활성화할 수 있습니다.

S3 버킷에 대해 Amazon S3 관리형 암호화 키(SSE-S3) 또는 고객 관리형 키(SSE-KMS CMK)와 함께 키 관리 서비스를 사용하여 서버 측 암호화를 활성화할 수 있습니다. 각 액세스 로그 파일은 S3 버킷에 저장되기 전에 자동으로 암호화되고, 액세스할 때 해독됩니다. 암호화된 로그 파일이나 암호화되지 않은 로그 파일을 액세스하는 방식과 다르지 않으므로 별도의 조치가 필요 없습니다. 각 로그 파일은 고유 키로 암호화되며, 주기적으로 바뀌는 마스터 키를 사용하여 키 자체가 암호화됩니다. 자세한 내용은 Amazon S3 사용 설명서의 Amazon S3 암호화 지정 (SSE-S3) 및 서버 측 암호화 지정 AWS KMS (SSE-KMS) 을 참조하십시오.

액세스 로그에 대한 추가 요금은 없습니다. Amazon S3의 스토리지 비용은 청구되지만, Amazon S3로 로그 파일을 전송하기 위해 Elastic Load Balancing에서 사용하는 대역폭에 대해서는 요금이 부과되지 않습니다. 스토리지 비용에 대한 자세한 내용은 Amazon S3 요금을 참조하세요.

액세스 로그 파일

Elastic Load Balancing은 5분마다 각 로드 밸런서 노드에 대한 로그 파일을 게시합니다. 로그 전달은 결과의 일관성이 있습니다. 로드 밸런서는 같은 기간 동안 여러 개의 로그를 전달할 수 있습니다. 이러한 상황은 보통 사이트에 트래픽이 많은 경우에 발생합니다.

액세스 로그의 파일 이름은 다음 형식을 사용합니다.

bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/aws-account-id_elasticloadbalancing_region_net.load-balancer-id_end-time_random-string.log.gz
bucket

S3 버킷의 이름.

접두사 

버킷의 접두사(논리적 계층 구조)입니다. 접두사를 지정하지 않는 경우 로그는 버킷의 루트 수준에 저장됩니다.

aws-account-id

소유자의 ID. AWS 계정

region

로드 밸런서 및 S3 버킷을 위한 리전입니다.

yyyy/mm/dd

로그가 전달된 날짜입니다.

load-balancer-id

로드 밸런서의 리소스 ID입니다. 리소스 ID에 포함되어 있는 슬래시(/)가 마침표(.)로 대체됩니다.

end-time

로깅 간격이 끝나는 날짜와 시간입니다. 예를 들어, 종료 시간이 20181220T2340Z이면 23시 35분과 23시 40분 사이에 발생한 요청에 대한 항목들이 포함됩니다.

random-string

시스템에서 생성된 임의 문자열입니다.

다음은 로그 파일 이름의 예제입니다.

s3://my-bucket/prefix/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2020/05/01/123456789012_elasticloadbalancing_us-east-2_net.my-loadbalancer.1234567890abcdef_20200501T0000Z_20sg8hgm.log.gz

원하는 기간만큼 버킷에 로그 파일을 저장할 수 있습니다. 그러나 Amazon S3 수명 주기 규칙을 정의하여 자동으로 로그 파일을 보관하거나 삭제할 수도 있습니다. 자세한 내용은 Amazon S3 사용 설명서스토리지 수명 주기 관리를 참조하세요.

액세스 로그 항목

다음 표에서는 액세스 로그 항목의 필드를 순서대로 설명합니다. 모든 필드는 공백으로 구분됩니다. 새 필드가 도입되면 로그 항목 끝에 추가됩니다. 로그 파일을 처리할 때 예상하지 못했던 방식으로 로그 항목이 끝나면 모든 필드를 무시해야 합니다.

필드 설명

형식

리스너 유형. 지원되는 값은 tls입니다.

version

로그 항목의 버전입니다. 현재 버전은 2.0입니다.

시간

TLS 연결이 끝나면 ISO 8601 형식으로 기록되는 시간입니다.

elb

로드 밸런서의 리소스 ID입니다.

리스너

연결을 위한 TLS 리스너의 리소스 ID입니다.

client:port

클라이언트의 IP 주소 및 포트입니다.

destination:port

대상의 IP 주소 및 포트입니다. 클라이언트가 로드 밸런서에 직접 연결하는 경우 대상은 리스너입니다. 클라이언트가 VPC 엔드포인트 서비스를 사용하여 연결하는 경우 대상은 VPC 엔드포인트입니다.

connection_time

연결이 시작될 때부터 종료될 때까지 걸린 총 시간(단위: 밀리 초)입니다.

tls_handshake_time

클라이언트 측 지연을 포함해 TCP 연결이 설정된 후 TLS 핸드셰이크가 완료되는 데 걸리는 총 시간(단위: 밀리 초)입니다. 이 시간은 connection_time 필드에 포함됩니다.

received_bytes

해독 후 클라이언트에서 로드 밸런서가 수신한 바이트의 수입니다.

sent_bytes

암호화 전에 로드 밸런서가 클라이언트로 전송한 바이트의 수입니다.

incoming_tls_alert

클라이언트로부터 로드 밸런서가 수신한 TLS 알림의 정수 값(있는 경우). 그렇지 않으면 이 값은 -로 설정됩니다.

chosen_cert_arn

클라이언트에 제공된 인증서의 ARN입니다. 유효한 클라이언트 hello 메시지가 전송되지 않을 경우, 이 값은 -로 설정됩니다.

chosen_cert_serial

추후 사용 예약. 이 값은 항상 -로 설정됩니다.

tls_cipher

클라이언트와 협상한 암호 그룹(OpenSSL 형식). TLS 협상이 완료되지 않을 경우, 이 값은 -로 설정됩니다.

tls_protocol_version

클라이언트와 협상한 TLS 프로토콜(문자열 형식)입니다. 가능한 값은 tlsv10, tlsv11, tlsv12tlsv13입니다. TLS 협상이 완료되지 않을 경우, 이 값은 -로 설정됩니다.

tls_named_group

추후 사용 예약. 이 값은 항상 -로 설정됩니다.

domain_name

클라이언트 hello 메시지에서 server_name 확장명의 값입니다. 이 값은 URL로 인코딩된 것입니다. 유효한 클라이언트 hello 메시지가 전송되지 않거나 확장명이 없을 경우, 이 값은 -로 설정됩니다.

alpn_fe_protocol

클라이언트와 협상한 애플리케이션 프로토콜(문자열 형식)입니다. 가능한 값은 h2, http/1.1http/1.0 입니다. TLS 리스너에 ALPN 정책이 구성되어 있지 않거나, 일치하는 프로토콜이 없거나, 유효한 프로토콜 목록이 전송되지 않은 경우 이 값은 -로 설정됩니다.

alpn_be_protocol

대상과 협상한 애플리케이션 프로토콜(문자열 형식)입니다. 가능한 값은 h2, http/1.1http/1.0 입니다. TLS 리스너에 ALPN 정책이 구성되어 있지 않거나, 일치하는 프로토콜이 없거나, 유효한 프로토콜 목록이 전송되지 않은 경우 이 값은 -로 설정됩니다.

alpn_client_preference_list

클라이언트 hello 메시지에서 application_layer_protocol_negotiation 확장의 값입니다. 이 값은 URL로 인코딩된 것입니다. 각 프로토콜은 큰따옴표로 묶여 있으며 프로토콜은 쉼표로 구분됩니다. TLS 리스너에 ALPN 정책이 구성되어 있지 않거나, 유효한 클라이언트 hello 메시지가 전송되지 않거나, 확장이 없을 경우, 이 값은 -로 설정됩니다. 문자열이 256바이트보다 길면 잘리게 됩니다.

tls_connection_creation_time

TLS 연결이 시작되면 ISO 8601 형식으로 기록되는 시간입니다.

로그 항목 예제

다음은 로그 항목의 예제입니다. 보다 읽기 쉽도록 텍스트가 여러 줄에 나타납니다.

다음은 ALPN 정책이 없는 TLS 리스너의 예입니다.

tls 2.0 2018-12-20T02:59:40 net/my-network-loadbalancer/c6e77e28c25b2234 g3d4b5e8bb8464cd 72.21.218.154:51341 172.100.100.185:443 5 2 98 246 - arn:aws:acm:us-east-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - ECDHE-RSA-AES128-SHA tlsv12 - my-network-loadbalancer-c6e77e28c25b2234.elb.us-east-2.amazonaws.com - - - 2018-12-20T02:59:30

다음은 ALPN 정책이 있는 TLS 리스너의 예입니다.

tls 2.0 2020-04-01T08:51:42 net/my-network-loadbalancer/c6e77e28c25b2234 g3d4b5e8bb8464cd 72.21.218.154:51341 172.100.100.185:443 5 2 98 246 - arn:aws:acm:us-east-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - ECDHE-RSA-AES128-SHA tlsv12 - my-network-loadbalancer-c6e77e28c25b2234.elb.us-east-2.amazonaws.com h2 h2 "h2","http/1.1" 2020-04-01T08:51:20

버킷 요구 사항

액세스 로그를 활성화할 때는 반드시 액세스 로그에 대한 S3 버킷을 지정해야 합니다. 로드 밸런서를 소유한 계정과 다른 계정으로 버킷을 소유할 수 있습니다. 버킷은 다음 요구 사항을 충족해야 합니다.

요구 사항
  • 버킷은 로드 밸런서와 같은 리전에 있어야 합니다.

  • 지정하는 접두사에는 AWSLogs가 포함되지 않아야 합니다. AWSLogs로 시작하는 파일 이름의 일부가 지정하는 버킷 이름과 접두사 뒤에 추가됩니다.

  • 버킷에 대한 액세스 로그 쓰기 권한을 부여하는 버킷 정책이 이 버킷에 있어야 합니다. 버킷 정책은 버킷에 대한 액세스 권한을 정의하기 위해 액세스 정책 언어로 작성된 JSON 문의 집합입니다. 다음은 정책 예제입니다.

    { "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["012345678912"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:012345678912:*"] } } }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-bucket/AWSLogs/account-ID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["012345678912"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:012345678912:*"] } } } ] }

이전 정책에서 aws:SourceAccount에 대해 이 버킷으로 로그를 전달할 계정 번호 목록을 지정합니다. aws:SourceArn에 대해 로그를 생성하는 리소스의 ARN 목록을 arn:aws:logs:source-region:source-account-id:* 형식으로 지정합니다.

암호화(Encryption)

다음 방법 중 하나를 사용하여 Amazon S3 액세스 로그 버킷에 대해 서버 측 암호화를 활성화할 수 있습니다.

  • Amazon S3 관리형 키(SSE-S3)

  • AWS KMS AWS Key Management Service (SSE-KMS) †에 저장된 키

† Network Load Balancer 액세스 로그에서는 AWS 관리 키를 사용할 수 없으며 고객 관리 키를 사용해야 합니다.

자세한 내용은 Amazon S3 사용 설명서의 Amazon S3 암호화 지정 (SSE-S3) 및 서버 측 암호화 지정 AWS KMS (SSE-KMS) 을 참조하십시오.

키 정책은 서비스가 로그를 암호화하고 해독할 수 있도록 허용해야 합니다. 다음은 정책 예제입니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }

액세스 로그 활성화

로드 밸런서에 대한 액세스 로그를 활성화할 때는 로드 밸런서가 로그를 저장할 S3 버킷을 지정해야 합니다. 해당 버킷을 소유하고 있으며 필요한 이 버킷에 필요한 버킷 정책을 구성했는지 확인하세요. 자세한 설명은 버킷 요구 사항 섹션을 참조하세요.

콘솔을 이용하여 액세스 로그를 활성화하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Load Balancers]를 클릭합니다.

  3. 로드 밸런서 이름을 선택하여 세부 정보 페이지를 엽니다.

  4. 속성성(Attributes) 탭에서 편집(Edit)을 선택합니다.

  5. [Edit load balancer attributes] 페이지에서 다음 작업을 수행합니다.

    1. 모니터링에서 액세스 로그를 켭니다.

    2. S3 찾아보기를 선택하고 사용할 버킷을 선택합니다. 또는 접두사를 포함하여 S3 버킷의 위치를 입력합니다.

    3. 변경 사항 저장를 선택합니다.

다음을 사용하여 액세스 로깅을 활성화하려면 AWS CLI

modify-load-balancer-attributes 명령을 사용합니다.

액세스 로그 비활성화

언제든지 로드 밸런서에 대한 액세스 로그를 비활성화할 수 있습니다. 액세스 로그를 비활성화하면 액세스 로그는 사용자가 삭제할 때까지 S3 버킷에 남아 있습니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서버킷 작업을 참조하세요.

콘솔을 이용하여 액세스 로그를 비활성화하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Load Balancers]를 클릭합니다.

  3. 로드 밸런서 이름을 선택하여 세부 정보 페이지를 엽니다.

  4. 속성성(Attributes) 탭에서 편집(Edit)을 선택합니다.

  5. 모니터링에서 액세스 로그를 끕니다.

  6. 변경 사항 저장를 선택합니다.

를 사용하여 액세스 로깅을 비활성화하려면 AWS CLI

modify-load-balancer-attributes 명령을 사용합니다.

액세스 로그 파일 처리

액세스 로그 파일은 압축이 됩니다. Amazon S3 콘솔을 사용하여 파일을 열면 파일이 압축되지 않고 정보가 표시됩니다. 파일을 다운로드하는 경우에는 압축을 해제해야 정보를 볼 수 있습니다.

웹 사이트에서 요청이 많은 경우에는 로드 밸런서가 수 기가바이트의 데이터로 로그 파일을 생성할 수 있습니다. line-by-line 프로세싱을 사용하여 이렇게 많은 양의 데이터를 처리하지 못할 수도 있습니다. 따라서 병렬 처리 솔루션을 제공하는 분석 도구를 사용해야 할 수 있습니다. 예를 들어, 다음과 같은 분석 도구를 사용하여 액세스 로그를 분석 및 처리할 수 있습니다.