AWS CLI를 사용하여 CloudTrail 로그 파일 무결성 검증 - AWS CloudTrail

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CLI를 사용하여 CloudTrail 로그 파일 무결성 검증

AWS Command Line Interface로 로그를 검증하려면 CloudTrail validate-logs 명령을 사용하세요. 이 명령에서는 검증을 수행하기 위해 Amazon S3 버킷에 전달된 다이제스트 파일을 사용합니다. 다이제스트 파일에 대한 내용은 CloudTrail 다이제스트 파일 구조를 참조하세요.

AWS CLI를 사용하여 다음과 같은 변경 유형을 감지할 수 있습니다.

  • CloudTrail 로그 파일 수정 또는 삭제

  • CloudTrail 다이제스트 파일 수정 또는 삭제

  • 위 두 파일 수정 또는 삭제

참고

AWS CLI는 다이제스트 파일이 참조하는 로그 파일만을 검증합니다. 자세한 내용은 특정 파일을 CloudTrail이 전달했는지 확인 단원을 참조하세요.

필수 조건

AWS CLI로 로그 파일 무결성을 검증하려면 다음 조건이 충족되어야 합니다.

  • AWS에 대한 온라인 연결이 있어야 합니다.

  • 다이제스트 및 로그 파일을 포함하는 Amazon S3 버킷에 대한 읽기 액세스 권한이 있어야 합니다.

  • 다이제스트 및 로그 파일은 CloudTrail이 해당 파일을 전송한 원래 Amazon S3 위치에서 이동되지 않아야 합니다.

참고

로컬 디스크로 다운로드한 로그 파일은 AWS CLI로 검증할 수 없습니다. 자체 검증 도구 생성에 대한 내용은 CloudTrail 로그 파일 무결성 검증의 사용자 지정 구현 단원을 참조하세요.

validate-logs

구문

다음은 validate-logs에 대한 구문입니다. 선택 사항 파라미터는 대괄호로 표시됩니다.

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--account-id <account-id>] [--verbose]

참고

validate-logs 명령은 리전별로 다릅니다. 특정 AWS 리전에 대한 로그의 유효성을 검사하려면 --region 전역 옵션을 지정해야 합니다.

옵션

validate-logs에 대한 명령줄 옵션은 다음과 같습니다. --trail-arn--start-time 옵션이 필요합니다. --account-id 옵션은 조직 추적에 추가로 필요합니다.

--start-time

지정한 UTC 타임스탬프 값이 검증되거나 검증된 후에 전달된 로그 파일을 지정합니다. 예: 2015-01-08T05:21:42Z.

--end-time

지정한 UTC 타임스탬프 값이 검증되거나 검증되기 전에 전달된 로그 파일을 선택적으로 지정합니다. 기본값은 현재 UTC 시간(Date.now())입니다. 예: 2015-01-08T12:31:41Z.

참고

지정된 시간 범위의 경우 validate-logs 명령은 해당 다이제스트 파일에서 참조하는 로그 파일만 확인합니다. Amazon S3 버킷의 다른 로그 파일은 확인되지 않습니다. 자세한 내용은 특정 파일을 CloudTrail이 전달했는지 확인 단원을 참조하세요.

--s3-bucket

다이제스트 파일이 저장되는 Amazon S3 버킷을 선택적으로 지정합니다. 버킷 이름이 지정되지 않은 경우 AWS CLI는 DescribeTrails()를 호출하여 검색합니다.

--s3-prefix

다이제스트 파일이 저장되는 Amazon S3 접두사를 선택적으로 지정합니다. 지정되지 않은 경우 AWS CLI는 DescribeTrails()를 호출하여 가져옵니다.

참고

현재 접두사가 지정한 시간 범위 도중에 사용된 접두사와 다를 때에만 이 옵션을 사용해야 합니다.

--account-id

로그 검증을 위한 계정을 선택적으로 지정합니다. 이 매개 변수는 조직 내 특정 계정의 로그를 검증하기 위한 조직 추적에 필요합니다.

--trail-arn

검증할 추적의 Amazon 리소스 이름(ARN)을 지정합니다. ARN 추적 형식은 다음과 같습니다.

arn:aws:cloudtrail:us-east-2:111111111111:trail/MyTrailName
참고

추적에 대한 추적 ARN을 얻기 위해 validate-logs를 실행하기 전에 describe-trails 명령을 사용할 수 있습니다.

지정한 시간 범위에서 로그 파일을 여러 개의 버킷에 전달한 경우 추적 ARN과 함께 버킷 이름과 접두사를 지정하고 버킷 중 하나에서만 로그 파일 검증을 제한할 수 있습니다.

--verbose

지정된 시간 범위에서 모든 로그 또는 다이제스트 파일의 선택적인 출력 검증 정보입니다. 출력은 파일의 변경, 수정 또는 삭제 여부를 나타냅니다. 비 상세 표시 모드(기본값)에서 확인이 실패한 경우에만 정보가 반환됩니다.

다음 예는 지정된 시작 시간에서 현재까지 현재 추적에 대해 구성된 Amazon S3 버킷을 사용하고 상세 표시 출력을 지정하여 로그 파일을 검증합니다.

aws cloudtrail validate-logs --start-time 2015-08-27T00:00:00Z --end-time 2015-08-28T00:00:00Z --trail-arn arn:aws:cloudtrail:us-east-2:111111111111:trail/my-trail-name --verbose

validate-logs 작동 방식

validate-logs 명령은 지정된 시간 범위에서 가장 최근 다이제스트 파일을 검증함으로써 시작합니다. 먼저 다이제스트 파일이 속해 있는 위치에서 다운로드되었음을 검증합니다. 즉, CLI가 S3 위치 p1에서 다이제스트 파일 df1을 다운로드하면 validate-logs가 p1 == df1.digestS3Bucket + '/' + df1.digestS3Object를 검증합니다.

다이제스트 파일의 서명이 유효하다면, 각 로그의 해시 값이 다이제스트 파일에서 참조되고 있는지를 검증합니다. 그런 다음 명령은 시간을 거슬러 올라가 이전 다이제스트 파일과 참조되는 로그 파일을 연속으로 검증합니다. 이는 start-time에 지정된 값에 도달하거나 다이제스트 체인이 종료될 때까지 계속됩니다. 다이제스트 파일이 누락되었거나 올바르지 않은 경우 검증할 수 없는 시간 범위는 출력에 위치합니다.

검증 결과

검증 결과는 다음과 같은 형식의 요약 머리글로 시작합니다.

Validating log files for trail trail_ARN between time_stamp and time_stamp

기본 출력의 각 라인에는 다음과 같은 형식으로 하나의 다이제스트 또는 로그 파일의 검증 결과가 포함됩니다.

<Digest file | Log file> <S3 path> <Validation Message>

다음 표는 로그 및 다이제스트 파일에 가능한 검증 메시지를 설명합니다.

파일 형식 검증 메시지 설명
Digest file valid 다이제스트 파일 서명이 유효합니다. 참조하는 로그 파일을 확인할 수 있습니다. 이 메시지는 상세 표시 모드에만 포함됩니다.
Digest file INVALID: has been moved from its original location 다이제스트 파일을 검색한 S3 버킷 및 S3 객체가 다이제스트 파일 자체에 기록된 S3 버킷 또는 S3 객체 위치와 일치하지 않습니다.
Digest file INVALID: invalid format 다이제스트 파일 형식이 잘못되었습니다. 다이제스트 파일이 나타내는 시간 범위에 해당하는 로그 파일을 검증할 수 없습니다.
Digest file INVALID: not found 다이제스트 파일을 찾을 수 없습니다. 다이제스트 파일이 나타내는 시간 범위에 해당하는 로그 파일을 검증할 수 없습니다.
Digest file INVALID: public key not found for fingerprint 지문 다이제스트 파일에서 기록된 지문에 해당하는 퍼블릭 키를 찾을 수 없습니다. 다이제스트 파일을 검증할 수 없습니다.
Digest file INVALID: signature verification failed 다이제스트 파일 서명이 유효하지 않습니다. 다이제스트 파일이 유효하지 않으므로 참조하는 로그 파일을 검증할 수 없으며, 내부에서 API 활동에 관한 어설션이 이루어지지 않습니다.
Digest file INVALID: Unable to load PKCS #1 key with fingerprint 지문 지정된 지문이 있는 PKCS #1 형식의 DER 인코딩 퍼블릭 키를 로드할 수 없으므로 다이제스트 파일을 검증할 수 없습니다.
Log file valid 로그 파일이 검증되었으며 전달 이후 수정되지 않았습니다. 이 메시지는 상세 표시 모드에만 포함됩니다.
Log file INVALID: hash value doesn't match 로그 파일에 대한 해시가 일치하지 않습니다. CloudTrail이 전송한 후 로그 파일이 수정되었습니다.
Log file INVALID: invalid format 로그 파일 형식이 잘못되었습니다. 로그 파일을 검증할 수 없습니다.
Log file INVALID: not found 로그 파일이 없어 검증할 수 없습니다.

출력에는 반환된 결과에 관한 요약 정보가 포함됩니다.

출력 예

상세 표시

다음 예제 validate-logs 명령은 --verbose 플래그를 사용해 다음을 따르는 샘플 출력을 생성합니다. [...]는 샘플 출력이 축약되었다는 것을 나타냅니다.

aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name --start-time 2015-08-31T22:00:00Z --end-time 2015-09-01T19:17:29Z --verbose
Validating log files for trail arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name between 2015-08-31T22:00:00Z and 2015-09-01T19:17:29Z Digest file s3://example-bucket/AWSLogs/111111111111/CloudTrail-Digest/us-east-2/2015/09/01/111111111111_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T201728Z.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1925Z_WZZw1RymnjCRjxXc.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_POuvV87nu6pfAV2W.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1930Z_l2QgXhAKVm1QXiIA.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_eQJteBBrfpBCqOqw.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1950Z_9g5A6qlR2B5KaRdq.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_i4DNCC12BuXd6Ru7.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_Sg5caf2RH6Jdx0EJ.json.gz valid Digest file s3://example-bucket/AWSLogs/111111111111/CloudTrail-Digest/us-east-2/2015/09/01/111111111111_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T191728Z.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1910Z_YYSFiuFQk4nrtnEW.json.gz valid [...] Log file s3://example-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1055Z_0Sfy6m9f6iBzmoPF.json.gz valid Log file s3://example-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1040Z_lLa3QzVLpOed7igR.json.gz valid Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T101728Z.json.gz INVALID: signature verification failed Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T091728Z.json.gz valid Log file s3://example-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T0830Z_eaFvO3dwHo4NCqqc.json.gz valid Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T081728Z.json.gz valid Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T071728Z.json.gz valid [...] Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2245Z_mbJkEO5kNcDnVhGh.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2225Z_IQ6kXy8sKU03RSPr.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2230Z_eRPVRTxHQ5498ROA.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2255Z_IlWawYZGvTWB5vYN.json.gz valid Digest file s3://example-bucket/AWSLogs/111111111111/CloudTrail-Digest/us-east-2/2015/08/31/111111111111_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150831T221728Z.json.gz valid Results requested for 2015-08-31T22:00:00Z to 2015-09-01T19:17:29Z Results found for 2015-08-31T22:17:28Z to 2015-09-01T20:17:28Z: 22/23 digest files valid, 1/23 digest files INVALID 63/63 log files valid

비 상세 표시

다음 예제 validate-logs 명령은 --verbose 플래그를 사용하지 않습니다. 다음 샘플 출력에서 하나의 오류가 발견되었습니다. 헤더, 오류 및 요약 정보만이 반환됩니다.

aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name --start-time 2015-08-31T22:00:00Z --end-time 2015-09-01T19:17:29Z
Validating log files for trail arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name between 2015-08-31T22:00:00Z and 2015-09-01T19:17:29Z Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T101728Z.json.gz INVALID: signature verification failed Results requested for 2015-08-31T22:00:00Z to 2015-09-01T19:17:29Z Results found for 2015-08-31T22:17:28Z to 2015-09-01T20:17:28Z: 22/23 digest files valid, 1/23 digest files INVALID 63/63 log files valid

특정 파일을 CloudTrail이 전달했는지 확인

버킷의 특정 파일을 CloudTrail이 전달했는지 확인하려면 상세 표시 모드에서 이 파일을 포함하는 기간 동안 validate-logs를 실행합니다. validate-logs의 출력에 파일이 표시되면 CloudTrail이 해당 파일을 전송한 것입니다.