Amazon Athena에서 AWS CloudTrail 로그 검색을 위한 테이블을 자동으로 생성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 1일

대량의 AWS CloudTrail 로그 컬렉션을 검색하려고 하는데 오류를 방지하기 위해 Amazon Athena 테이블을 수동으로 생성하지 않으려고 합니다.

해결 방법

CloudTrail 콘솔을 사용하여 Athena 테이블을 자동으로 생성합니다. 자세한 내용은 Amazon Athena를 사용하여 AWS CloudTrail 로그 검색을 참조하세요.

Athena 테이블 생성

1.    CloudTrail 콘솔을 열고 탐색 창에서 [추적(Trails)]을 선택합니다. S3 버킷 이름을 기록해 둡니다.

2.    탐색 창에서 [이벤트 기록(Event history)]을 선택한 다음 [Athena 테이블 생성(Create Athena table)]을 선택합니다.

3.    [Amazon Athena에서 테이블 생성(Create a table in Amazon Athena)] 창에서 [스토리지 위치(Storage location)] 메뉴를 열고 CloudTrail 로그 파일이 포함된 Amazon Simple Storage Service(Amazon S3) 버킷을 선택합니다.

참고: Athena와 함께 CloudTrail 로그에 대한 파티션 프로젝션을 사용하여 단일 AWS 리전의 특정 기간에 대한 검색 성능을 향상시킬 수 있습니다.

4.    [테이블 생성(Create table)]을 선택합니다.

5.    [Athena로 이동(Go to Athena)]을 선택합니다.

참고: "Your account does not have sufficient permissions to create tables in Amazon Athena"라는 오류가 표시될 수 있습니다. 이 오류가 표시되는 경우 AWS Identity and Access Management(IAM) 정책(콘솔)을 추가하는 지침에 따라 AmazonAthenaFullAccess 관리형 정책을 연결합니다.

다음과 같은 샘플 쿼리 중 하나 이상을 로그에 사용할 수 있습니다. your_athena_tablename을 Athena 테이블 이름으로 바꾸고 access_key_id를 20자 액세스 키로 바꿉니다. 액세스 키는 일반적으로 AKIA 또는 ASIA 문자로 시작됩니다.

Athena 쿼리 실행

1.    Athena 콘솔을 열고 [새 쿼리(New query)]를 선택한 다음 샘플 쿼리를 지우는 대화 상자를 선택합니다.

2.    쿼리를 입력하고 [쿼리 실행(Run Query)]을 선택합니다.

특정 액세스 키에 대해 기록된 모든 AWS API 작업 표시

SELECT eventTime, eventName, userIdentity.principalId
FROM your_athena_tablename 
WHERE userIdentity.accessKeyId like 'access_key_id'

EC2 인스턴스에 대한 보안 그룹 변경 내용 식별

SELECT eventname, useridentity.username, sourceIPAddress, eventtime, requestparameters
FROM your_athena_tablename
WHERE (requestparameters like '%sg-5887f224%' or requestparameters like '%sg-e214609e%' or requestparameters like '%eni-6c5ca5a8%')
and eventtime > '2017-02-15T00:00:00Z'
order by eventtime asc;

지난 24시간 동안의 모든 콘솔 로그인 표시

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdata
FROM your_athena_tablename 
WHERE eventname = 'ConsoleLogin'
and eventtime >= '2017-02-17T00:00:00Z'
and eventtime < '2017-02-18T00:00:00Z';

지난 24시간 동안의 모든 콘솔 로그인 시도 실패 표시

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdata
FROM your_athena_tablename
WHERE eventname = 'ConsoleLogin'
and useridentity.username = 'HIDDEN_DUE_TO_SECURITY_REASONS'
and eventtime >= '2017-02-17T00:00:00Z'
and eventtime < '2017-02-18T00:00:00Z';

CloudTrail 월별 비용 증가 식별

SELECT eventName,count(eventName) AS NumberOfChanges,eventSource
FROM your_athena_tablename 
WHERE eventtime >= '2019-01-01T00:00:00Z'and eventtime < '2019-01-31T00:00:00Z'
GROUP BY eventName, eventSource
ORDER BY NumberOfChanges DESC

참고: eventtime에 정의되는 값은 1개월로 제한됩니다. 여러 개월에 대한 결과를 가져오려면 추가 쿼리를 실행합니다.

누락된 IAM 권한 식별

SELECT count (*) as TotalEvents, useridentity.arn, eventsource, eventname, errorCode, errorMessage
FROM your_athena_tablename
WHERE (errorcode like '%Denied%' or errorcode like '%Unauthorized%')
AND eventtime >= '2019-10-28T00:00:00Z'
AND eventtime < '2019-10-29T00:00:00Z'
GROUP by eventsource, eventname, errorCode, errorMessage, useridentity.arn
ORDER by eventsource, eventname

결과에 실패한 API 호출이 표시되지 않으면 다음과 같이 쿼리 범위를 넓힙니다.

SELECT count (*) as TotalEvents, useridentity.arn, eventsource, eventname, errorCode, errorMessage
FROM your_athena_tablename
WHERE errorcode <> ''
AND eventtime >= '2019-10-28T00:00:00Z'
AND eventtime < '2019-10-29T00:00:00Z'
GROUP by eventsource, eventname, errorCode, errorMessage, useridentity.arn
ORDER by eventsource, eventname