Amazon Athena를 사용하여 Application Load Balancer 연결 로그를 쿼리하려고 합니다.
간략한 설명
Elastic Load Balancing에서는 옵션 로깅 기능으로 연결 로그를 제공합니다. 이 로그는 Application Load Balancer에 대한 Transport Layer Security(TLS 및 mTLS) 연결에 대한 정보를 제공합니다.
연결 로그는 기본적으로 비활성화됩니다. 활성화된 경우 Amazon Athena를 사용하면 Application Load Balancer 연결 로그를 쿼리하고 이를 Amazon Simple Storage(Amazon S3) 버킷에 저장할 수 있습니다.
해결 방법
Athena가 Application Load Balancer 로그를 쿼리할 데이터베이스 및 테이블을 생성합니다.
-
Amazon Athena 콘솔을 엽니다.
-
데이터베이스를 생성하려면 쿼리 편집기에서 다음 명령을 실행합니다.
참고: Amazon S3 버킷과 동일한 AWS 리전에 데이터베이스를 생성하는 것이 좋습니다.
CREATE DATABASE alb_db
-
데이터베이스를 생성한 후 다음 쿼리를 사용하여 테이블을 생성합니다.
CREATE EXTERNAL TABLE IF NOT EXISTS alb_conn_logs (
time string,
client_ip string,
client_port int,
listener_port int,
tls_protocol string,
tls_cipher string,
tls_handshake_latency double,
leaf_client_cert_subject string,
leaf_client_cert_validity string,
leaf_client_cert_serial_number string,
tls_verify_status string
)
PARTITIONED BY
(
day STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'input.regex' =
'([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*)')
LOCATION 's3://<S3-LOCATION>/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
TBLPROPERTIES
(
"projection.enabled" = "true",
"projection.day.type" = "date",
"projection.day.range" = "2023/11/27,NOW",
"projection.day.format" = "yyyy/MM/dd",
"projection.day.interval" = "1",
"projection.day.interval.unit" = "DAYS",
"storage.location.template" = "s3://<S3-LOCATION>/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
)
참고: <S3-LOCATION>, <ACCOUNT-NUMBER> 및 <REGION> 을 자체 Amazon S3 버킷 값으로 바꾸십시오.
-
Application Load Balancer 연결 로그를 쿼리하려면 SQL 문을 사용합니다.
쿼리 예시
최근 100개의 로그 보기
SELECT *
FROM alb_conn_logs
ORDER by time desc
LIMIT 100
tls_verify_status가 'Success'가 아닌 경우 발생 항목 수를 계산하고 client_IP별로 그룹화
SELECT distinct client_ip, count() as count from alb_conn_logs
WHERE tls_verify_status != 'Success'
GROUP by client_ip
ORDER by count() DESC;
특정 시간 범위에서 tls_handshake_latency가 2초 이상인 경우 모든 발생 항목 보기
SELECT * FROM alb_conn_logs
WHERE (parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')
BETWEEN parse_datetime('2024-01-01-00:00:00','yyyy-MM-dd-HH:mm:ss')
AND parse_datetime('2024-03-20-00:00:00','yyyy-MM-dd-HH:mm:ss'))
AND (tls_handshake_latency >= 2.0);
인증 유효 날짜가 정확한 연결을 확인하고 leaf_client_cert_serial_number별로 그룹화
SELECT DISTINCT leaf_client_cert_serial_number, count() AS count
FROM alb_conn_logs
WHERE tls_verify_status = 'Success' AND leaf_client_cert_validity like '%NotAfter=2025-01-01%'
GROUP BY leaf_client_cert_serial_number
ORDER BY count() DESC;
관련 정보
Amazon Athena를 사용하여 Application Load Balancer 액세스 로그를 분석하려면 어떻게 해야 합니까?