Programming/Cloud

[AWS]CloudTrail

BadaGreen_Kim 2023. 7. 15. 14:57

CloudTrail

AWS CloudTrail 이란?

AWS 계정에서 AWS Service가 수행하는 작업들은 CloudTrail에 이벤트로 기록됩니다. 이 때 이벤트는 AWS Management Console, AWS CLI, AWS SDK, API에서 수행하는 모든 작업들을 말한다.

AWS CloudTrail을 사용해 AWS 인프라 전반에 걸친 계정활동을 확인, 검색, 다운로드, 보관, 응답할 수 있다. 따라서 AWS 계정 활동에 대한 CloudTrail을 통한 가시성 확보는 보안 및 운영에서 매우 중요하다.

CloudTrail 작동 방식

CloudTrail은 생성 시 AWS 계정에서 활성화된다. AWS 계정에서 이루어진 활동이 CloudTrail 이벤트에 기록되고, AWS Console의 Event History에서 이벤트 기록을 확인할 수 있다.

이벤트 기록을 통해 AWS 계정에서 발생한 지난 90일간의 활동을 확인할 수 있다.

CloudTrail은 지정한 Amazon S3 Bucket에 이벤트를 저장할 수 있도록 구성되어 있다. 또한 Amazon CloudWatch Logs 및 Events를 통해 Trail의 이벤트를 전송 및 분석할 수도 있다.

모든 리전에 적용되는 Trail

모든 리전에 적용되는 Trail을 생성하면 CloudTrail은 각 리전에만 이벤트를 기록하고 CloudTrail 이벤트 로그 파일을 지정한 Amazon S3 Bucket으로 전송한다.

리전 하나에 적용되는 Trail

하나의 리전에 적용되는 Trail을 생성하면 CloudTrail은 해당 리전에만 이벤트를 기록한다.

모범사례에 의하면 모든 리전에 적용되는 Trail을 생성할 것을 권장한다.

당연하지만 이벤트를 Logging하는 AWS 리전에서만 해당 Trail을 볼 수 있다. 모든 리전에서 이벤트를 Logging하는 Trail을 생성할 경우 해당 Trail이 모든 AWS 리전의 Console에 존재하게 된다.

기본적으로 CloudTrail 이벤트 Log 파일은 Amazon S3 SSE(서버측 암호화)를 사용해 암호화한다. 선택에 따라서 AWS Key Management Service(AWS KMS) 키를 통해 Log 파일을 암호화할 수 있다.

원하는 기간만큼 Amazon S3 Bucket에 Log 파일을 저장할 수 있고, Amazon S3 수명 주기 규칙을 정의해 Log 파일을 자동으로 보관/삭제할 수 있다.


CloudTrail 워크플로우

1. AWS 계정에 대한 이벤트 기록 확인

AWS Console 혹은 AWS CLI 등을 사용해 지난 90일간 기록된 이벤트를 확인 및 검색할 수 있다.

2. 이벤트 다운로드

AWS 계정에서 지난 90일동안 발생한 이벤트를 CSV, JSON 파일로 다운로드할 수 있다.

3. Trail 생성

CloudTrail은 Trail한 결과를 Amazon S3 Bucket으로 Log 파일을 전송할 수 있다. AWS Console로 Trail을 생성하면 기본적으로 모든 리전에 Trail이 적용된다. AWS CLI 혹은 API를 사용해 Trail을 생성하면 기본적으로 해당 리전에 대해서만 Trail이 적용된다.

4. Amazon SNS Topic 생성 및 구독

Amazon SNS Topic을 구독하면 Log 파일이 Amazon S3 Bucket으로 전송될 대 알림을 받을 수 있다. 다양한 방식으로 여러 상황에 따른 알림을 받을 수 있다.

5. 로그 파일 보기

Amazon S3를 사용해 Log 파일을 확인 및 검색할 수 있다.

6. 사용자 권한 관리

AWS IAM을 사용해 Trail을 생성, 구성, 삭제, Logging의 시작과 종료, Log 파일이 포함된 Amazon S3 Bucket에 접근할 수 있는 AWS IAM 사용자를 관리할 수 있다.

7. CloudWatch Logs를 사용한 이벤트 모니터링

CloudTrail의 Log를 CloudWatch Logs로 이벤트를 전송하도록 Trail를 구성할 수 있습니다. 그 후 CloudWatch Logs를 사용해 AWS 계정에서 특정 API 호출 및 이벤트가 발생했는지 모니터링 할 수 있다.

8. 관리 이벤트 및 데이터 이벤트 Logging

읽기 전용, 쓰기 전용 혹은 모든 관리 이벤트와 데이터 이벤트를 Logging하도록 Trail을 구성할 수 있다.

9. ClouodTrail Insights 이벤트 Logging

기록 관리 API 호출과 관련된 비정상적인 활동을 식별하고 이에 대응할 수 있도록 Insights Event를 Logging하도록 Trail을 구성할 수 있다. Trail이 읽기 전용 또는 비관리 이벤트를 Logging하도록 구성되어 있으면 CloudTrail Insights 이벤트 Logging을 활성화할 수 없다.

10. Log 파일 암호화 활성화

Log 파일 암호화는 Log 파일에 대한 추가 보안 계층을 설정하는 것이다. AWS KMS 관리형 키(SSE-KMS)로 CloudTrail의 Log 파일을 암호화할 수 있다.

11. Log 파일 무결성 활성화

Log 파일 무결성 검증을 활성화 하는 것은 Log 파일이 CloudTrail에서 제공된 후 변경되지 않았음을 보장하는데 도움이 된다.

12. 다른 AWS 계정과 Log 파일 공유

AWS 계정간에 Log파일을 서로 공유할 수 있다.

13. 여러 AWS 계정의 Log 파일을 취합

여러 AWS 계정의 Log 파일을 단일 Amazon S3 Bucket에 취합할 수 있다.


CloudTrail 개념

CloudTrail 이벤트란?

CloudTrail 이벤트는 AWS 계정의 활동 기록을 말한다. CloudTrail 이벤트는 AWS Management Console, AWS SDK, AWS CLI 및 기타 API 계정 활동에 대한 모든 기록을 제공한다. CloudTrail에서 Logging할 수 있는 두 가지 유형의 이벤트인 관리 이벤트와 데이터 이벤트가 존재한다.

관리 이벤트란? (Management Events)

관리 이벤트는 AWS 계정의 Resource에 대해 수행되는 관리 작업에 대한 정보를 말한다. 이를 제어 영역 작업이라고도 한다. 이를 Control Plane Operations라고 부르기도 한다.

  • 보안 구성 (IAM의 AttachRolePolicy API 등)
  • 디바이스 등록 (Amazon EC2 CreateDefualtVpc API 등)
  • 데이터 라우팅 규칙 구성 (Amazon EC2 CreateSubnet API 등)
  • 로깅 설정 (AWS CloudTrail API 등)

관리 이벤트에는 AWS 계정에서 발생한 비 API 이벤트도 포함될 수 있다. (로그인 기록:ConsoleLogin)

데이터 이벤트란? (Data Events)

데이터 이벤트는 Resource 상에서 혹은 Resource 내에서 수행되는 Resource 작업에 대한 정보를 말한다. 이를 데이터 영역 작업이라고 한다.

  • Amazon S3 객체 수준 API 활동 (GetObject, DeleteObject, PutObject API 등)
  • AWS Lambda 함수 실행 활동 (Invoke API 등)

Trail을 생성하면 데이터 이벤트는 기본적으로 비활성화 된다. 해당 이벤트를 기록하려면 활동을 수집할 Resource 혹은 Resource 유형을 Trail에 명시적으로 추가해야한다.

인사이트 이벤트란? (Insights Events)

CloudTrail Insights 이벤트는 AWS 계정에서 비정상적인 활동에 대한 정보를 말한다. 해당 이벤트를 활성화하고 이상행위가 감지될 경우 Insights Events는 다른 폴더나 Trail에 대한 대상 Amazon S3 Bucket의 접두사에 Logging된다.

Insights Events는 관련 API, Incident 기간, 통계 등 비정상적인 활동을 파악하고, 이에 대한 조치를 취하는데 도움을 주는 정보를 제공하는 역할을 한다.

다른 이벤트 유형과는 달리, 계정 API 사용량 변화가 계정의 일반적인 사용 패턴과 크게 다르다는 것을 CloudTrail이 감지한 경우에만 Logging된다. Insights Events를 생성할 수 있는 활동의 예는 다음과 같다.

  • AWS 계정은 일반적으로 분당 Amazon S3 deleteBucket API 호출을 20회 이하로 Logging하지만, AWS 계정에서 분당 평균 100회의 deleteBucket API 호출을 Logging하기 시작한다.
  • AWS 계정은 일반적으로 Amazon EC2 AuthorizeSecurityGroupIngress API에 분당 20회의 호출을 Logging하지만, AWS 계정에서 AuthorizeSecurityGroupIngress API 호출 Logging이 존재하지 않게 된다.

위와 같은 예시 상황의 경우 Insights Events가 생성될 수 있다. (단순히 예시긴 하다)

기본적으로 Traiil을 생성할 때 Insights Events이 비활성화 된다. 해당 이벤트를 기록하려면 새로운 Trail 또는 기존 Trail의 Insights Events 모음을 명시적으로 활성화 해야 한다.

CloudTrail 이벤트 기록이란?

CloudTrail 이벤트 기록은 CloudTrail 이벤트에 대한지난 90일 간의 기록을 말한다. 이 기록을 통해 AWS Management Console, AWS SDK, AWS CLI 및 기타 AWS 계정 활동에 대한 가시성을 확보할 수 있다.

Trail이란 무엇인가?

Trail은 Amazon S3 Bucket, CloudWatch Logs 및 CloudWatch Events에 CloudTrail 이벤트를 제공할 수 있는 구성이다. Trail을 사용하여 제공하고자 하는 CloudTrail이벤트를 필터링하고, AWS KMS 키로 CloudTrail의 이벤트 Log 파일을 암호화하면, Log 파일 제공을 위해 Amazon SNS 알림을 설정할 수 있다.

CloudTrail을 관리하는 방법?

CloudTrail Console

AWS CloudTrail Console에서 CloudTrail 서비스를 사용 및 관리할 수 있다. AWS Console은 다음과 같은 다양한 작업을 수행할 수 있도록 인터페이스를 제공한다.

  • AWS 계정의 최근 이벤트 및 이벤트 기록 보기
  • 지난 90일간의 이벤트에 대해 필터링된 파일이나 전체 파일 다운로드
  • CloudTrail Trail 생성 및 편집
  • 다음을 포함한 CloudTrail Trail 구성1. Amazon S3 Bucket 선택2. Log 접두사 설정3. CloudWatch Logs에 대한 전송 구성4. 암호화를 위한 AWS KMS Key 사용5. Log 파일 전송에 대한 Amazon SNS 알림 활성화6. Trail에 대한 태그 추가 및 관리

CloudTrail CLI

AWS Command Line Interface(CLI)는 명령줄에서 CloudTrail과 상호 작용할 때 사용할 수 있는 도구이다.

CloudTrail API

AWS Console, AWS CLI 이외에 CloudTrail RESTful API를 사용해 CloudTrail을 직접 프로그래밍할 수 있다.

AWS SDK

CloudTrail API를 사용하는 대신 AWS SDK중 하나를 사용할 수 있다. 각 SDK는 다양한 프로그래밍 언어 및 플랫폼을 위한 라이브러리와 샘플 코드로 구성되어 있다. AWS SDK를 사용하면 편리하게 CloudTrail에 프로그래밍 방식으로 접근할 수 있다.

CloudTrail에 대한 접근제어방법?

AWS IAM을 사용해 AWS CloudTrail에 접근해야 하는 모든 IAM 사용자에 대해 개별 사용자를 생성한다. 관리자에 대해서도 IAM 사용자를 생성하여 IAM 사용자 관리 권한을 부여한 후 모든 작업에 대해 해당 IAM 사용자를 사용한다. 각 IAM 사용자에 따라 서로 다른 보안 자격 증명 조합을 부여할 수 있고 다양한 권한을 부여하고, 필요할 경우 언제든지 권한을 변경 또는 취소할 수 있다.

CloudTrail의 관리 이벤트 및 데이터 이벤트를 Logging하는 방법?

기본적으로 Trail은 AWS 계정에 대한 관리 이벤트를 모두 Logging하지만, 데이터 이벤트는 포함하지 않는다. 원한다면 데이터 이벤트를 Logging하도록 Trail을 생성하거나 업데이트할 수 있다. Trail 설정과 일치하는 이벤트만 Amazon S3 Bucket 및 Amazon CloudWatch Logs 으로 전송된다.

CloudTrail Insights Events를 Logging하는 방법?

AWS CloudTrail Insights은 AWS 사용자 CloudTrail의 관리 이벤트를 지속적으로 분석하여 비정상적인 API 호출을 식별하고 이에 대응할 수 있도록 지원합니다. Insights Events의 세부정보 페이지에는 이벤트가 비정상적인 활동의 그래프로 표시되고, 비정상적인 활동의 시작 및 종료 시간과 함께 작업이 비정상적인지 여부를 확인하는데 사용되는 기준 요소가 표시된다.

기본적으로 Trail은 CloudTrail Insights Events를 Logging하지 않는다.

Trail을 모든 리전에 적용할 경우 이점은 무엇일까?

  • Trail에 대한 구성 설정이 모든 AWS 리전에서 일괄적으로 적용된다.
  • 단일 Amazon S3 Bucket 및 CloudWatch Logs 로그 그룹이 모든 AWS 리전의 CloudTrail 이벤트를 수신한다.
  • 한 위치에서 모든 AWS 리전에 대한 Trail 구성을 관리한다.
  • 새 AWS 리전에서 이벤트를 즉시 수신한다. 새 AWS 리전이 시작되면 CloudTrail은 원래 추적과 동일한 설정으로 새 리전의 사용자에 대한 모든 리전 Trail의 복사본을 자동으로 생성한다.
  • 비정상적인 활동을 모니터링하기 위해 자주 사용하지 않는 AWS 리전에서 Trail을 생성할 필요는 없다.

Trail을 모든 리전에 적용하면 아래와 같이 된다.

  • CloudTrail은 모든 AWS 리전의 계정활동에 대한 Log 파일을 지정된 단일 Amazon S3 Bucket에 전송하고 선택적으로 CloudWatch Logs 로그 그룹으로도 전송한다.
  • Trail에 대해 Amazon SNS Topic을 구성하면 모든 AWS 리전의 Log 파일 전송에 대한 SNS알림이 해당 단일 SNS Topic으로 전송된다.
  • Log 파일 무결성 확인을 활성화 하면, 모든 AWS 리전의 Trail에 대해 Log 파일 무결성 확인이 활성화 된다.