AWS CLI(AWS 명령줄 인터페이스)를 사용하여 특정 Amazon EBS(Amazon Elastic Block Storage) 볼륨의 연결 또는 분리 기록을 나열하려면 어떻게 해야 합니까?
간략한 설명
Amazon EC2(Amazon Elastic Compute Cloud) 및 Amazon EBS 리소스는 연결 또는 분리 기록을 저장하지 않습니다. 하지만 AWS CloudTrail은 이 정보를 유지합니다. CloudTrail은 AWS 계정에 대한 AWS API 호출 및 이벤트를 기록하는 서비스입니다. AWS CLI를 통해 AWS CloudTrail API를 사용하여 연결 및 분리 로그를 가져올 수 있습니다.
RunInstances 및 TerminateInstances API 호출을 사용하여 연결 및 분리된 Amazon EBS 볼륨에는 개별 CloudTrail 이벤트가 없습니다. 이러한 이벤트는 CloudTrail lookup-events API 출력에 표시되지 않습니다.
해결 방법
참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.
CloudTrail lookup-events API를 실행합니다. 이 명령은 AWS CLI JSON 프로세서(JMESPath)를 사용하여 연결 및 분리 이벤트를 검색합니다.
두 가지 방법으로 데이터를 반환할 수 있습니다.
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 볼륨으로 바꾸고 REGION_ID를 해당 리전으로 바꿉니다. max-results 변수를 사용하여 반환되는 Amazon EBS 볼륨 이벤트 수를 설정합니다. 반환되는 기본 결과 수는 50개이며, 최대 50개까지 가능합니다.
2. CloudTrail은 Unix Epoch 시간으로 타임스탬프를 표시합니다. 다음 방법 중 하나를 사용하여 타임스탬프를 UTC로 변환합니다.
macOS:
타임스탬프에서 소수점을 제거한 후 다음 명령을 실행합니다.
$ date -r 1571065747 -u
Mon Oct 14 15:09:07 UTC 2019
Linux
다음 명령을 실행합니다.
$ date -d @1571065747.0 -u
Mon Oct 14 15:09:07 UTC 2019
Windows:
epochconverter.com과 같은 변환기를 사용하여 타임스탬프를 변환합니다.
사람이 읽을 수 있는 타임스탬프를 UTC 시간대로 인쇄합니다.
참고: 이 방법은 sed 유틸리티와 jq 프로세서를 사용하며 Linux 사용자에게만 권장됩니다.
sed 유틸리티는 CloudTrail Event 값을 JSON 친화적 레이아웃으로 변환하는 데 사용됩니다. 대부분의 Linux 배포판에는 sed 유틸리티가 이미 설치되어 있습니다. 설치되어 있지 않은 경우 GNU sed 웹 사이트에서 유틸리티를 다운로드할 수 있습니다.
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 볼륨으로 바꾸고 REGION_ID를 해당 리전으로 바꿉니다. max-results 변수를 사용하여 반환되는 Amazon EBS 볼륨 이벤트 수를 설정합니다. 반환되는 기본 결과 수는 50개이며, 최대 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일 이상 보관하려면:
1. CloudTrail에서 고유한 Trail을 생성합니다.
2. Amazon S3(Amazon Simple Storage Service) 버킷에 로그를 저장합니다.
3. Amazon Athena를 사용하여 Amazon S3 버킷의 로그를 쿼리합니다.
관련 정보
AWS CLI Command Reference – Lookup-events
AWS CLI를 사용하여 CloudTrail 이벤트 보기