AWS Command Line Interface(AWS CLI)를 사용하여 Amazon Elastic Block Storage(Amazon EBS) 볼륨의 연결 또는 분리 기록을 나열하고 싶습니다.
간략한 설명
Amazon Elastic Compute Cloud(Amazon EC2) 및 Amazon EBS 리소스는 연결 또는 분리 기록을 저장하지 않습니다. 연결 또는 분리 기록을 가져오려면 AWS CloudTrail을 사용하세요. CloudTrail은 AWS 계정에 대한 AWS API 호출 및 이벤트를 기록하는 서비스입니다. AWS CLI를 통해 AWS CloudTrail API를 사용하여 연결 또는 분리 로그를 가져올 수 있습니다.
RunInstances와 TerminateInstances API 호출을 사용하여 Amazon EBS 볼륨을 연결하고 분리하는 경우 볼륨에는 개별 CloudTrail 이벤트가 없습니다. 이러한 이벤트는 CloudTrail 조회 이벤트 API 출력에 표시되지 않습니다.
해결 방법
참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.
CloudTrail lookup-events 이벤트 API를 실행합니다. 이 명령은 AWS CLI JSON 프로세서인 JMESPath를 사용하여 연결 및 분리 이벤트를 검색합니다.
다음 방법 중 하나를 사용하여 데이터를 가져올 수 있습니다.
- Unix Epoch 타임스탬프 인쇄
- UTC 시간대로 사람이 읽을 수 있는 타임스탬프 인쇄
Unix Epoch 타임스탬프 인쇄
1. 다음 명령을 실행합니다.
$ aws cloudtrail lookup-events \--lookup-attributes AttributeKey=ResourceName,AttributeValue=VOLUME_ID \
--max-results 3 \
--region REGION_ID \
--query 'Events[?EventName == `DetachVolume` || EventName == `AttachVolume`].{EventTime:EventTime,EventName:EventName,InstanceID:(Resources[1].ResourceName)}'
참고: VOLUME_ID를 Amazon EBS 볼륨 ID로 바꾸고 REGION_ID를 AWS 리전으로 바꾸세요. max-results 변수를 사용하여 반환할 Amazon EBS 볼륨 이벤트 수를 설정합니다. 50은 반환되는 결과의 기본값이자 최대 수입니다.
2. CloudTrail은 타임스탬프를 Unix Epoch 시간으로 표시합니다. 타임스탬프를 UTC로 변환하려면 다음 방법 중 하나를 사용합니다.
macOS
타임스탬프에서 소수점을 제거한 후 다음 명령을 실행합니다.
$ date -r 1571065747 -uMon Oct 14 15:09:07 UTC 2019
Linux
다음 명령을 실행합니다.
$ date -d @1571065747.0 -uMon Oct 14 15:09:07 UTC 2019
Windows
변환기를 사용합니다. 변환기를 선택하려면 EpochConverter 웹 사이트에 있는 Epoch 및 Unix 타임스탬프 변환 도구를 참조하세요.
UTC 시간대로 사람이 읽을 수 있는 타임스탬프 인쇄
참고: 이 방법은 sed 유틸리티와 jq 프로세서를 사용합니다. Linux의 경우 jq만 사용합니다.
sed 유틸리티는 CloudTrail Event 값을 JSON 호환 레이아웃으로 변환할 수 있습니다. 대부분의 Linux 배포판에는 sed 유틸리티가 이미 설치되어 있습니다. 설치되어 있지 않은 경우 GNU 운영 체제 웹 사이트에서 유틸리티를 다운로드합니다.
jq 프로세서는 이벤트 EventName, InstanceID 및 EventTime에 대한 값을 검색하고 반환할 수 있습니다. 설치되지 않은 경우 jq 웹 사이트에서 프로세서를 다운로드합니다.
다음 명령을 실행합니다.
$ aws cloudtrail lookup-events \--lookup-attributes AttributeKey=ResourceName,AttributeValue=VOLUME_ID \
--max-results 3 \
--region REGION_ID \
--query 'Events[?EventName == `DetachVolume` || EventName == `AttachVolume`].CloudTrailEvent' | \sed 's/\\//g' | sed 's/"}"/"}/g' |
sed 's/"{"/{"/g' | \
jq '.[] | {EventName:.eventName, InstanceID:.requestParameters.instanceId, EventTime:.eventTime}'
참고: VOLUME_ID를 Amazon EBS 볼륨 ID로 바꾸고 REGION_ID를 AWS 리전으로 바꾸세요. max-results 변수를 사용하여 반환할 Amazon EBS 볼륨 이벤트 수를 설정합니다. 50은 반환되는 결과의 기본값이자 최대 수입니다.
출력 예시:
{ "EventName": "AttachVolume",
"InstanceID": "i-00a49ef5dd45af31b",
"Time": "2019-10-02T15:36:18Z"
}
{
"EventName": "DetachVolume",
"InstanceID": "i-0554d4452aa4cf91b",
"Time": "2019-10-02T14:26:04Z"
}
{
"EventName": "AttachVolume",
"InstanceID": "i-0554d4452aa4cf91b",
"Time": "2019-10-02T14:25:42Z"
}
참고: CloudTrail의 기본 검색 기록 기간은 90일입니다. 90일이 지난 이벤트는 표시되지 않습니다. 이벤트 로그를 90일 이상 유지하려면 다음 단계를 완료합니다.
- CloudTrail에서 나만의 트레일을 생성합니다.
- 로그를 Amazon Simple Storage Service (Amazon S3) 버킷에 저장합니다.
- Amazon Athena를 사용하여 Amazon S3 버킷의 로그를 쿼리합니다.
관련 정보
Lookup-events
AWS CLI를 사용하여 CloudTrail 이벤트 보기