AWS CloudTrail을 사용하여 Amazon EC2 인스턴스에 대한 API 호출을 추적하려면 어떻게 해야 합니까?

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

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 실행, 중지, 시작 및 종료하는 API 호출을 추적하려고 합니다. AWS CloudTrail을 사용하여 Amazon EC2 인스턴스에 대한 API 호출을 검색하려면 어떻게 해야 하나요?

간략한 설명

AWS CloudTrail을 사용하면 AWS 계정에 대한 4가지 유형의 API 호출(이벤트 유형)을 식별하고 추적할 수 있습니다.

계정에 이런 유형의 API 호출을 보낸 후 검토하려면 다음과 같은 방법을 사용할 수 있습니다.

참고: 최대 90일간의 계정 이벤트 기록을 확인할 수 있습니다.

해결 방법

CloudTrail 이벤트 기록을 사용하여 API 호출을 추적하는 방법

1.    CloudTrail 콘솔을 엽니다.

2.    [Event history]를 선택합니다.

3.    [Filter]의 드롭다운 목록에서 [Event name]을 선택합니다.

4.    [Enter event name]에 검색할 이벤트 유형을 입력합니다. 그런 다음, 이벤트 유형을 선택합니다.

5.    [Time range]에 이벤트 유형에 대해 추적하려는 시간 범위를 입력합니다.

6.    [Apply]를 선택합니다.

자세한 내용은 CloudTrail 이벤트 기록으로 이벤트 확인CloudTrail Console에서 Cloudtrail 이벤트 보기를 참조하세요.

Amazon Athena 쿼리를 사용하여 API 호출을 추적하는 방법

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

다음은 RunInstances API 호출의 예시 쿼리입니다. 모든 지원되는 이벤트 유형에 유사한 쿼리를 사용할 수 있습니다.

중요: cloudtrail-logs를 Athena 테이블 이름으로 교체한 다음, 다음의 쿼리 예시를 실행하세요.

RunInstances API 호출에 대한 모든 사용 가능한 이벤트 정보를 반환하는 예시 쿼리

SELECT *
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'

RunInstances API 호출에 대한 필터링된 이벤트 정보를 반환하는 예시 쿼리

SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'

특정 시점에서 현재까지 문자열 "Instances"로 끝나는 API 이벤트 정보를 반환하는 예시 쿼리

중요: '2021-07-01T00:00:01Z'는 이벤트 정보를 반환하고자 하는 시점으로 바꿉니다.

SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE (eventName LIKE '%Instances') AND eventTime > '2021-07-01T00:00:01Z'

Amazon Simple Storage Service(Amazon S3)에 보관된 Amazon CloudWatch Logs를 사용하여 API 호출을 추적하는 방법

중요: Amazon S3 버킷에 이벤트를 로그하려면 먼저 CloudWatch 추적을 생성해야 합니다.

1.    CloudTrail 로그 파일 찾기 지침에 따라 CloudTrail 로그 파일에 액세스합니다.

2.    CloudTrail 로그 파일 다운로드 지침에 따라 로그 파일을 다운로드합니다.

3.    jq나 다른 JSON 명령줄 처리 도구를 사용하여 추적하고자 하는 이벤트 유형의 로그를 검색합니다.

특정 이벤트 유형에 대해 Amazon S3에서 다운로드한 CloudWatch 로그를 검색하기 위한 예시 jq 절차

1.    Bash 터미널을 엽니다. 그런 다음, 로그 파일을 저장할 다음의 디렉터리를 만듭니다.

$ mkdir cloudtrail-logs

4.    새 디렉터리로 이동합니다. 다음의 명령을 실행하여 CloudTrail 로그를 다운로드합니다.

중요: my_cloudtrail_bucket 예시를 자신의 Amazon S3 버킷으로 바꿉니다.

$ cd cloudtrail-logs

$ aws s3 cp s3://my_cloudtrail_bucket/AWSLogs/012345678901/CloudTrail/eu-west-1/2019/08/07 ./ --recursive

5.    다음의 gzip 명령을 실행하여 로그 파일의 압축을 해제합니다.

중요: *를 압축을 해제할 파일 이름으로 바꿉니다.

$ gzip -d *

6.    검색하려는 이벤트 유형에 대해 jq 쿼리를 실행합니다.

RunInstances API 호출에 대해 모든 사용 가능한 이벤트 정보를 반환하는 예시 jq 쿼리

cat * | jq '.Records[] | select(.eventName=="RunInstances")'

StopInstances 및 TerminateInstances API 호출에 대해 모든 사용 가능한 이벤트 정보를 반환하는 예시 jq 쿼리

cat * | jq '.Records[] | select(.eventName=="StopInstances" or .eventName=="TerminateInstances" )'