AWS CloudTrail
- AWS 계정의 거버넌스, 컴플라이언스, 감사를 실형하는 방법
- AWS 계정 안에 일어난 모든 이벤트와 API 호출 이력을 콘솔, SDK, CLI, 기타 AWS 서비스를 통해 얻을 수 있다.
- 모든 로그가 CloudTrail에 나타난다.
- 이 로그들을 CloudTrail에서 CloudWatch Logs나 S3에 넣을 수 있다.
- 모든 리전에 걸쳐 누적된 이벤트 이력을 하나의 특정한 S3 버킷에 넣고 싶으면 트레일을 생성해 모든 리전이나 하나의 리전에 적용할 수 있다.
- 만약 누군가 AWS의 뭔가를 삭제했다면 누가 그렇게 했는지 CloudTrail을 통해 확인할 수 있다.
CloudTrail 안에 API 호출이 남아있기 때문에 알 수 있다.

CloudTrail Events
- 관리 이벤트
- AWS 계정 안에서 리소스에 대해 수행된 작업을 나타낸다.
ex) 누군가 보안을 설정할 때마다 IAM AttachRolePolicy라는 API 호출을 사용할 것이고, 그것이 CloudTrail에 나타날 것이다.
- 기본값으로 트레일은 모든 관리 이벤트를 로깅하도록 설정되어 있다.
- 관리 이벤트의 구분
- 리소스를 변경하지 않는 읽기 이벤트
- 누군가 IAM에서 몯느 사용자를 나열하거나 EC2에서 모든 EC2 인스턴스를 나열하는 이벤트
- 리소스를 수정할 수 있는 쓰기 이벤트
- DynamoDb 테이블을 삭제하거나 삭제 시도
- 데이터 이벤트
- 기본값으로 데이터 이벤트는 로깅되지 않는다.
고용량 작업이기 때문
- 데이터 이벤트 종류
- S3 객체 수준 활동
ex: GetObject, DeleteObject, PutObject 등이 있다.
- 읽기 이벤트와 쓰기 이벤트 분리 가능
읽기: GetObject
쓰기: DeleteObject, PubObject
- Lambda 함수 실행 활동
- Invoke API를 사용하면 람다 함수가 몇 번 호출되는지 알 수 있다.
- CloudTrail Insights 이벤트
- CloudTrail Insights를 활성화하면 비용을 지불해야함.
- CloudTrail Insights는 계정에서 일어나는 이벤트를 분석하고 비정상적인 활동을 탐지
ex: 부정확한 리소스 프로비저닝, 서비스 한도 도달, AWS IAM 액션의 폭증, 주기적 유지보수 활동 누락 등...
- CloudTrail은 정상적인 관리 활동을 분석해 기준선을 만들고 올바른 형태의 이벤트인지 분석
즉, 무언가 변경되거나 변경 시도가 있으면 비정상적인 패턴인지 탐지한다.

CloudTrail 이벤트 보관
- 기본적으로 이벤트는 CloudTrail에 90일 보관된다.
- 감사 목적으로 1년 전에 일을 다시 찾아보려 할 경우 이벤트를 더 오래 보관 가능
- 더 길게 보관하는 방법
S3에 전송하고 Athena를 사용해 분석

CloudTrail - EventBridge 통합
- API 호출을 가로채기 위한 EventBidge와의 통합은 중요하다
- 예시

DynamoDB에서 테이블을 삭제할 때 SNS 알림을 받고 싶을 경우
- API호출 할때 CloudTrail에 로길된다.
- 그 API 호출이 이벤트로서 EventBridge에 남게 된다.
그럼 구체적인 DeleteTable API 호출을 확인할 수 있고, 그걸로 규칙을 생성할 수 있다.
- 그 규칙에는 대상이 있을 것이고 SNS로 대상을 지정하면 경보를 생성할 수 있다.
통합 방법 예시
- 사용자가 나의 계정에서 역할을 맡을 때마다 알림을 받길 원한다.

- AssumeRole은 IAM 서비스에 있는 API이므로 CloudTrail에 로깅된다.
- 이후 EventBridge 통합을 이용해 SNS 토픽으로 가는 메시지를 트리거
- 보안 그룹 인바운드 규칙을 변경하는 API 호출을 가로채기

- 보안 그룹 호출: AuthorizedSecurityGroupIngress (EC2 API 호출)
- 이것도 CloudTrail에 로깅이된다.
- EventBridge에 나타나 SNS 알림을 트리거