규모가 큰 AWS CloudTrail 로그 컬렉션을 검색하여 자동으로 Amazon Athena 테이블을 만들려고 합니다.
해결 방법
CloudTrail 로그에서 Athena 테이블 만들기
다음 단계를 완료하십시오.
- CloudTrail 콘솔을 엽니다.
- 탐색 창에서 추적을 선택한 다음, CloudTrail 로그가 포함된 Amazon Simple Storage Service(Amazon S3) 버킷의 이름을 기록해 둡니다.
- 탐색 창에서 이벤트 기록을 선택한 다음, Athena 테이블 만들기를 선택합니다.
- Amazon Athena에서 테이블 만들기 창의 스토리지 위치 메뉴에서 S3 버킷을 선택합니다.
참고: 특정 시간 범위 내에서 검색을 개선하려면 Athena의 CloudTrail 로그 파티션 프로젝션을 사용하십시오.
- 테이블 만들기를 선택합니다.
참고: 테이블은 지정된 S3 버킷에 있는 CloudTrail 로그를 참조하며, 여기에는 CloudTrail이 버킷에 전송하는 새 로그도 포함합니다.
테이블을 만들 권한이 없는 경우, "Your account does not have sufficient permissions to create tables in Amazon Athena" 오류 메시지가 표시될 수 있습니다.
이 오류를 해결하려면, AWS Identity and Access Management(IAM) 역할에 AmazonAthenaFullAccess 관리형 정책을 연결하십시오.
CloudTrail 로그 테이블에서 Athena 쿼리 실행
다음 단계를 완료하십시오.
- Athena 콘솔을 엽니다.
- 샘플 쿼리를 지우려면 지우기를 선택합니다.
- 쿼리를 입력한 다음 쿼리 실행을 선택합니다.
예제 쿼리 사용
Athena를 처음 사용하는 경우, 첫 쿼리를 실행하기 전에 쿼리 결과를 저장할 위치로 S3 버킷을 설정합니다.
S3 버킷 위치를 설정하려면 다음 단계를 완료하십시오.
- Athena 콘솔을 엽니다.
- 탐색 창에서 쿼리 편집기를 선택합니다.
- 쿼리 설정 탭을 선택합니다.
- 관리를 선택합니다.
- 쿼리 결과의 위치 - 선택 사항 필드에 S3 버킷을 입력합니다.
- 저장을 선택합니다.
다음은 실행할 수 있는 쿼리의 예입니다.
참고: 다음 쿼리에서 your_athena_tablename을 Athena 테이블의 이름으로, access_key_id를 20자 길이의 액세스 키로 바꾸십시오. 액세스 키는 일반적으로 문자 AKIA 또는 ASIA로 시작합니다.
특정 액세스 키에 대하여 기록된 AWS API 작업 활동을 표시하려면 다음 쿼리를 실행합니다.
SELECT eventTime, eventName, userIdentity.principalId FROM your_athena_tablename
WHERE userIdentity.accessKeyId like 'access_key_id'
Amazon Elastic Compute Cloud(Amazon 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 값은 한 달에 대한 값입니다. 여러 달에 대한 결과를 얻으려면 추가 쿼리를 실행하십시오.
누락된 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