CloudTrail을 사용하여 EC2 인스턴스의 EBS 볼륨 삭제와 같은 특정 리소스에 대한 작업을 검색하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 4월 30일

AWS CloudTrail을 사용하여 리소스의 모든 이벤트 이름, Amazon EBS(Amazon Elastic Block Store) 볼륨 또는 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스의 스냅샷을 삭제한 사용자와 같은 특정 리소스의 정보를 검색하려면 어떻게 해야 합니까?

간략한 설명

AWS CloudTrail을 사용하면 AWS 인프라 전반에 걸친 계정 활동을 기록하고 모니터링할 수 있습니다. 이렇게 하려면 CloudTrail이 켜져 있어야 하며, 쿼리하려는 EC2 리소스가 있는 AWS 리전에 로깅이 활성화되어 있어야 합니다.

중요

  • 조회 요청 속도는 계정당 초당 1회 요청으로 제한됩니다. 이 한도를 초과하는 경우 병목 오류가 발생합니다.
  • 선택한 시간 범위 동안 발생한 이벤트는 해당 이벤트가 발생했을 때 CloudTrail 로깅이 활성화되어 있지 않은 경우 조회할 수 없습니다.

​해결 방법

다음 예는 AWS CLI(AWS 명령줄 인터페이스)에서 실행됩니다. 이러한 명령 대부분은 jq를 사용합니다.

yum을 사용하여 Amazon Linux에 jq를 설치하십시오.

yum install jq

참고: 다른 플랫폼을 위한 jq 설치 옵션도 있습니다.

주어진 리소스의 모든 이벤트 이름 나열

다음 예는 EBS 볼륨 ID를 사용하여 특정 API 작업에 대한 최근 이벤트의 목록을 가져옵니다. vol-0f59a355c2exampleAttributeValueus-east-1--region은 자체 값으로 교체하십시오.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0f59a355c2example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

참고: CloudTrail이 최근 호출을 채우는 데 예상보다 오래 걸릴 수 있습니다.

EBS 스냅샷과 같은 다른 리소스 ID를 사용하여 동일한 예제를 실행할 수 있습니다. snap-0993c0d9a8exampleAttributeValueus-east-1--region은 자체 값으로 교체하십시오.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=snap-0993c0d9a8example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

주어진 리소스에 대한 특정 API 작업의 이벤트 나열

다음 예는 EBS 볼륨에 대한 DeleteVolume API 작업의 최근 이벤트 목록을 가져오는 방법을 보여줍니다. vol-0f59a355c2exampleAttributeValue는 볼륨 ID로 대체하십시오.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0f59a355c2example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output json --region us-east-1 | jq -r '.[] | select(.event == "DeleteVolume")'

다음은 결과 출력의 예입니다.

{
  "username": "jdoe",
  "eventid": "e3ec4051-9999-4e87-9999-9cc72example",
  "resource": "vol-0f59a355c2example",
  "accesskey": "ASIAXUZVKEUACEXAMPLE",
  "time": 1550191014,
  "event": "DeleteVolume"
}

모든 리소스에 대한 특정 이벤트 이름 나열

다음 예는 DeleteVolume 이벤트 이름을 필터로 사용하여 삭제된 EBS 볼륨을 나열합니다. --region us-east-1은 해당 리전으로 대체하십시오.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteVolume --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

모든 리소스에 대해 종료된 EC2 인스턴스 나열

다음 예는 최근의 EC2 TerminateInstances를 나열합니다. –region us-east-1은 해당 리전으로 대체하십시오.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=TerminateInstances --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

특정 이벤트 ID에 대한 세부 정보 보기

이벤트 ID를 찾은 후 이 이벤트에 대한 세부 정보를 볼 수 있습니다. 0840b15f-75b5-4082-a194-86e15example의 AttributeValue는 이벤트 ID로 대체하고 --region us-east-1은 해당 리전으로 대체하십시오.

$ aws cloudtrail lookup-events --query "Events[0].CloudTrailEvent" --output text --lookup-attribute AttributeKey=EventId,AttributeValue=0840b15f-75b5-4082-a194-86e15example --region us-east-1 | jq -r '.'

다음은 예제 출력입니다.

{
  "eventVersion": "1.05",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROAJ3THTCWDOKEXAMPLE:jdoe",
    "arn": "arn:aws:sts::52570EXAMPLE:assumed-role/Admin/jdoe",
    "accountId": "52570example",
    "accessKeyId": "ASIAXUZVKEUAKEXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2019-02-14T23:55:15Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROAJ3THTCWDOKEXAMPLE",
        "arn": "arn:aws:iam::52570EXAMPLE:role/Admin",
        "accountId": "52570EXAMPLE",
        "userName": "Admin"
      }
    }
  },
  "eventTime": "2019-02-15T00:48:05Z",
  "eventSource": "ec2.amazonaws.com",
  "eventName": "DeleteVolume",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "999.999.999.999",
  "userAgent": "aws-cli/1.16.999 Python/2.7.15 Darwin/17.7.0 botocore/1.12.91",
  "requestParameters": {
    "volumeId": "vol-0c50d65c6eexample"
  },
  "responseElements": {
    "_return": true
  },
  "requestID": "a8a43ccd-736d-4b09-ba75-24b9cexample",
  "eventID": "0840b15f-75b5-4082-a194-86e15example",
  "eventType": "AwsApiCall",
  "recipientAccountId": "52570EXAMPLE"
}

날짜 범위 지정

--start-time--end-time 파라미터를 사용하면 이벤트 날짜 범위를 지정할 수 있습니다. 나열된 이벤트는 start-time 후부터 ent-time까지 발생한 이벤트입니다.

기본 시작 시간은 지난 90일 내에서 데이터를 사용 가능한 가장 빠른 날짜입니다. 기본 종료 시간은 현재 시간에 가장 가깝게 발생한 이벤트의 시간입니다.

지정된 시작 시간이 지정된 종료 시간 이후인 경우, InvalidTimeRangeException 오류가 반환됩니다.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteVolume --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1 --start-time 2019-01-01T13:00Z --end-time 2019-03-01T14:00Z

참고: 유효한 타임스탬프 형식의 목록에서 선호하는 타임스탬프를 선택하십시오.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?