Lightsail에서 Amazon Athena를 사용하여 버킷 액세스 로그를 분석할 수 있습니다. - Amazon Lightsail

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

Lightsail에서 Amazon Athena를 사용하여 버킷 액세스 로그를 분석할 수 있습니다.

이 안내서에서는 액세스 로그를 사용하여 버킷에 대한 요청을 식별하는 방법을 보여줍니다. 자세한 내용은 버킷 액세스 로그를 참조하세요.

목차

Amazon Athena를 사용하여 요청에 대한 액세스 로그 쿼리

Amazon Athena Athena를 사용하여 액세스 로그에서 버킷에 대한 요청을 쿼리하고 식별할 수 있습니다.

Lightsail은 액세스 로그를 Lightsail 버킷에 객체로 저장합니다. 로그를 분석할 수 있는 도구를 사용하는 것이 보통 더 쉽습니다. Athena는 객체의 분석을 지원하며 액세스 로그를 쿼리하는 데 사용할 수 있습니다.

다음 예에서는 Amazon Athena에서 버킷 서버 액세스 로그를 쿼리할 수 있는 방법을 보여줍니다.

참고

Athena 쿼리에서 버킷 위치를 지정하려면 로그가 URI S3로 전송되는 대상 버킷 이름과 대상 접두사를 다음과 같이 포맷해야 합니다. s3://amzn-s3-demo-bucket1-logs/prefix/

  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

  2. 쿼리 편집기에서 다음과 유사한 명령을 실행합니다.

    create database bucket_access_logs_db
    참고

    S3 버킷과 AWS 리전 동일한 위치에 데이터베이스를 생성하는 것이 가장 좋습니다.

  3. 쿼리 편집기에서 다음과 유사한 명령을 실행하여 2단계에서 생성한 데이터베이스에 테이블 스키마를 생성합니다. STRINGBIGINT 데이터 형식 값이 액세스 로그 속성입니다. Athena에서 이 속성을 쿼리할 수 있습니다. LOCATION의 경우 앞서 설명한 대로 버킷 및 접두사 경로를 입력하십시오.

    CREATE EXTERNAL TABLE `s3_access_logs_db.amzn-s3-demo-bucket_logs`( `bucketowner` STRING, `bucket_name` STRING, `requestdatetime` STRING, `remoteip` STRING, `requester` STRING, `requestid` STRING, `operation` STRING, `key` STRING, `request_uri` STRING, `httpstatus` STRING, `errorcode` STRING, `bytessent` BIGINT, `objectsize` BIGINT, `totaltime` STRING, `turnaroundtime` STRING, `referrer` STRING, `useragent` STRING, `versionid` STRING, `hostid` STRING, `sigv` STRING, `ciphersuite` STRING, `authtype` STRING, `endpoint` STRING, `tlsversion` STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket1-logs/prefix/'
  4. 탐색 창의 데이터베이스 아래에서 데이터베이스를 선택하십시오.

  5. 테이블에서 테이블 이름 옆의 Preview table(테이블 미리보기)을 선택하십시오.

    결과 창에 bucketowner, bucket, requestdatetime 등 서버 액세스 로그의 데이터가 표시됩니다. 즉, Athena 테이블이 만들어졌다는 뜻입니다. 이제 버킷 서버 액세스 로그를 쿼리할 수 있습니다.

예 — 객체를 삭제한 사람과 삭제한 시기 (타임스탬프, IP 주소, IAM 사용자) 를 표시합니다.

SELECT RequestDateTime, RemoteIP, Requester, Key FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';

예 — 사용자가 수행한 IAM 모든 작업 표시

SELECT * FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE requester='arn:aws:iam::123456789123:user/user_name';

예 - 특정 기간에 객체에 수행된 모든 작업 표시

SELECT * FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE Key='prefix/images/picture.jpg' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');

예 - 특정 기간에 특정 IP 주소에서 전송한 데이터의 양 표시

SELECT SUM(bytessent) AS uploadTotal, SUM(objectsize) AS downloadTotal, SUM(bytessent + objectsize) AS Total FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE RemoteIP='1.2.3.4' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-06-01','yyyy-MM-dd') AND parse_datetime('2017-07-01','yyyy-MM-dd');

Amazon S3 액세스 로그를 사용하여 객체 액세스 요청 식별

액세스 로그에 대한 쿼리를 사용하여,, GETPUT, 등의 작업에 대한 객체 액세스 요청을 식별하고 해당 요청에 대한 추가 정보를 검색할 수 있습니다. DELETE

다음 Amazon Athena 쿼리 예제에서는 서버 액세스 로그에서 버킷에 대한 모든 PUT 객체 요청을 가져오는 방법을 보여줍니다.

예 - 특정 기간에 PUT 객체 요청을 보내는 모든 요청자를 표시합니다.

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db WHERE Operation='REST.PUT.OBJECT' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

다음 Amazon Athena 쿼리 예제는 서버 액세스 로그에서 Amazon S3에 대한 모든 GET 객체 요청을 가져오는 방법을 보여줍니다.

예 — 특정 기간에 GET 객체 요청을 보내는 모든 요청자를 표시합니다.

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db WHERE Operation='REST.GET.OBJECT' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

다음 Amazon Athena 쿼리 예제에서는 서버 액세스 로그에서 S3 버킷에 대한 모든 익명 요청을 가져오는 방법을 보여 줍니다.

예 - 특정 기간에 버킷에 요청하는 모든 익명 요청자 표시

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE Requester IS NULL AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
참고
  • 필요에 맞게 날짜 범위를 수정할 수 있습니다.

  • 이 쿼리 예제는 보안 모니터링에도 유용할 수 있습니다. 예상치 못하거나 승인되지 않은 IP 주소/요청자의 PutObject 또는 GetObject 호출 결과를 검토하고 버킷에 대한 익명 요청을 식별할 수 있습니다.

  • 이 쿼리는 로깅이 사용 설정된 시간부터의 정보만 검색합니다.