본문 바로가기
[AWS-DR]/CloudTrail

[중요2][AWS] CloudTrail 로그 확인!!

by METAVERSE STORY 2024. 7. 1.
반응형
728x170

 

 

 

1. CloudTrail이란?

💡
기본적으로 aws 계정 내에서 일어나는 모든 API를 통하여 계정 활동에 관련 작업을 기록하며 지속적으로 모니터링 하며 보관할수있습니다. Console , AWS SDK, 명령줄 기타 AWS서비스를 통해 수행된 작업을 비롯하여 이벤트 기록을 제공합니다. 또한, 이벤트 기록에서 여러가지 필터링을 이용하여 확인이 가능합니다.

!!!!기본적으로 Trail은 API 호출후 평균 약 15분 이내에 로그를 전송한다.

참고 문헌 : https://aws.amazon.com/ko/cloudtrail/features/개념정리

  1. Cloud Trail은 모든 AWS 계정에서 계정 생성시 활동을 기록 수동으로 설정할 필요 없이 지원되는 서비스의 생성, 수정 및 삭제 작업을 위해 90일동안의 활동 기록
  1. 이벤트 필터링 가능 계정 활동을 보고 검색 및 다운로드 가능 → 리소스 변경에 대한 가시성 확보
  1. s3 서버측 암호화 SES를 사용하여 로그 암호화 가능 → KMS로도 가능하다.
  1. 이벤트 종류
    1. 관리 이벤트 aws 계정 리소스에서 수행되는 관리 작업등
      ex ) ec2 생성 , 삭제 , 수정등의 작업 기록 → aws 계정 ,iam역할,작업한 ip,시간,리소스등의 정보 확인 가능
    1. 데이터 이벤트 리소스 자체 or 리소스 내에서 수행되는 서비스 → 대량 활동
      • Amazon S3 객체 수준 API 활동(예: GetObject, DeleteObject 및 PutObject API 작업)
      • AWS Lambda 함수 실행 활동(Invoke API)
      !! 추적을 생성 할 때 데이터 이벤트는 기록되지 않음 → 설정 시 추가 요금
    1. Cloud Trail Insights
      • 리소스 프로비저닝 급증
      • IAM 작업의 급증 또는 주기적 유지 관리 활동 격차같은 aws계정의 비정상적 활동 식별
  1. 통합되는 서비스
    1. Lambda
      • s3 버킷 알림 기능을 활용하여 s3객체 생성 이벤트를 lambda에 게시가능
      • trail 에서 s3 버킷에 로그를 쓸때 lambda를 호출하여 처리
    1. cloudwatch logs
      • trail에서 기록 관리 및 데이터 이벤트를 cloudwatch logs로 보낼수있다.
      • 지표 필터 생성하여 이벤트,검색 이벤트를 모니터링가능
      • lambda 및 elastisearch 같은 다른 aws로 스트리밍가능
    1. cloudwatch 이벤트
      • 리소스 변경 사항에 자동 대응가능
      • trail 에서 특정 이벤트를 기록할시 실행 작업 정의 가능

2. 실습

이벤트 로그 확인

  1. 콘솔을 통하여 trail 접속
  1. 이벤트 기록을 통하여 로그 확인
    → 기본적인 API활동에 의하여 활동 작업이 로그가 남는다.

이벤트 필터링

  1. 필터링은 시간 및 여러 이벤트 패턴에 따라서 사용자가 조회 가능  
  1. 이벤트 이름으로 필터링 api test를 위해 미리 인스턴스를 생성해둠
    → 인스턴스 생성된것을 확인하고자 검색 결과 나타나지않음 → 다른 이벤트 이름으로 검색해보자!
    → 이전의 auto-scaling 으로 생성된 인스턴스부터 시간및 리소스 유형등을 확인 가능 해당 이벤트에 대하여 자세히 알고자 이벤트 정보 확인
  1. 이벤트 상세 정보 확인
    → 해당 이벤트에 대한 자세한 정보들을 확인 가능하다. 또한, 참조 리소스 까지 같이 확인 가능
  1. 제공되는 cloudtrail 열 리스트
  1. 시간 필터링
    → 특정 시간대를 지정하거나 start-end 시간을 지정도 가능하다.  

S3 - Trail 추적기존 방식처럼 Trail로만 로그를 보는 데는 90일이라는 기간이 정해져 있기 때문에 이전의 데이터도 확인을 하고 싶을 시 S3버킷을 이용하는 방법이 있다.

  1. 추적 생성
    → 로그 파일을 보호하기 위해서 KMS를 사용가능.(실습이기에 모든것을 비활성화) → 또 앞서 개념 정리를 하면서 연동 가능한 서비스 중 watch logs를 이용할수도있다.
  1. 이벤트 선택
    → kms 이벤트는 제외 모든 api활동 (이벤트는 관리 이벤트만 나머지는 추가비용)
  1. 생성 진행
    → 이전의 추적을 생성해뒀으므로 따로 생성을 하진 않았다.
  1. 버킷 생성 확인
    → 다중 리전 추적 기능을 제공하므로 모든 리전의 정보가 나타난다. 따라서, 본인이 해당하는 리전에 대해서 로그 정보를 확인하면 된다.
  1. 로그 확인
    → 해당 로그들이 생성됨을 확인했다. (해당 날짜에 대해서 나타나며 시간별로 확인가능 하지만, 다소 UI가 떨어져서 식별하기가 어렵다... 확인해야 하는 번거로움 존재
    → 해당 객체의 URL을 통하여 접속한 결과 아찔하다....  

athena를 이용한 s3 로그 분석이전의 trail 에서 생성한 추적은 식별하기에 있어 불편함이 존재하여 특정 쿼리들을 이용해서 편리하게 보고자 하는 열을 나열할수도 있으며 해당 로그들을 분석해보자!

  1. Athena 테이블 생성
    → 해당 테이블생성시 trail 에 대한 정보를 나타내 준다. → 또한 이전의 추적으로 생성한 버킷을 지정한다 (해당 버킷에 존재하는 로그를 대상으로 쿼리를 진행하기때문이다.)
    CREATE EXTERNAL TABLE cloudtrail_logs_aws_cloudtrail_logs_186086016278_655f63bf ( eventVersion STRING, userIdentity STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, invokedBy: STRING, accessKeyId: STRING, userName: STRING, sessionContext: STRUCT< attributes: STRUCT< mfaAuthenticated: STRING, creationDate: STRING>, sessionIssuer: STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, userName: STRING>>>, eventTime STRING, eventSource STRING, eventName STRING, awsRegion STRING, sourceIpAddress STRING, userAgent STRING, errorCode STRING, errorMessage STRING, requestParameters STRING, responseElements STRING, additionalEventData STRING, requestId STRING, eventId STRING, resources ARRAY<STRUCT< arn: STRING, accountId: STRING, type: STRING>>, eventType STRING, apiVersion STRING, readOnly STRING, recipientAccountId STRING, serviceEventDetails STRING, sharedEventID STRING, vpcEndpointId STRING ) COMMENT 'CloudTrail table for aws-cloudtrail-logs-186086016278-655f63bf bucket' ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/'; TBLPROPERTIES ('classification'='cloudtrail');
    → 다음처럼 쿼리형식을 확인 가능
  1. 테이블 생성 확인
  1. 간단하게 event name을 select 쿼리
  1. 서울 리전에서만 발생한 이벤트 확인
  1. 실행 중인 인스턴스 확인

AWS CLI를 통한 확인CLI는 홈페이지에서 설치가능 https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-windows.html
→ AWS Cli 설치
https://docs.aws.amazon.com/ko_kr/awscloudtrail/latest/userguide/view-cloudtrail-events-cli.html - 명령들 참조 가능

aws cloudtrail lookup-event help - > 이벤트에 대한 명령줄 도움받기 aws cloudtrail lookup-event --max-results 1 (default 10 1~50까지 가능) aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances -> 인스턴스 구동된 이벤트 기록 (이벤트 이름으로 조회) aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventSource,AttributeValue=ec2.amazonaws.com -> EventSource 조회 aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::S3::Bucket -> 리소스 유형
  • 최신 이벤트 기록 1개 조회

  • 구동한 인스턴스 이력

CloudWatch logs 및 insight 이용

3.결론

Trail을 이용하여 AWS계정 내에서 일어나는 모든 이벤트에 대한 로그를 자동으로 남아 지기 때문에
90일간의 기록이 지난 데이터들도 S3 를 이용하여 장기간의 데이터를 보관 할 수 있어 상당히 유용하게 사용 할 수 있는 서비스인 것 같다.
또한, s3 버킷으로 지난 로그들을 분석하기에는 불편함이 존재하여 Athena를 이용한다면 특정 쿼리문을 이용하여 테이블에 나타난 colume 명을 이용하여 필터를 할수있다.

 

 

 

 

 

출처 : https://hyup2423.tistory.com/22

반응형
그리드형

댓글