AWS CloudTrail
- AWS 계정에 거버넌스와 규정 준수, 감사권을 부여하며 동작이 기본값으로 설정되어 있음
- AWS 계정 내의 모든 이벤트 기록과 서비스에 의한 API 호출 기록(콘솔, SDK, CLI 등)을 볼 수 있음
- 모든 로그를 볼 수 있으며 로그들을 CloudWatch Logs나 S3로 옮길 수 있음
- 모든 리전과 단일 리전에 추적을 적용할 수 있으므로 모든 리전에서 축적된 이벤트의 모든 기록을 S3 버킷에 넣을 수 있음
- 누군가 AWS에 있는 EC2 인스턴스 같은 것을 삭제한 상황에서 API 호출을 이용해 누가 삭제했는지 알 수 있음
CloudTrail Diagram
- SDK, CLI, 콘솔의 동작, IAM 사용자와 역할, 다른 여러 서비스까지 CloudTrail 콘솔에 존재하며
여기서 일어나는 일을 점검하고 감사할 수 있고
모든 이벤트를 90일 이상 보존하고 싶다면 CloudWatch Logs로 보내거나 S3 버킷으로 보내면 됨
CloudTrail Events
- CloudTrail에서 볼 수 있는 이벤트는 세 종류
- 관리 이벤트 (Management Events)
AWS 계정 내 리소스에 작동한 연산을 나타냄
예1) 누군가 보안을 구성하려면 IAM AttachRolePolicy라는 API 코드를 쓸 것이며 이것은 CloudTrail에 표시됨
예2) 서브넷을 생성해도 마찬가지로 표시
예3) 로깅을 셋업해도 볼 수 있음
리소스나 AWS 계정을 수정하는 모든 것이 CloudTrail에 표시되며 기본적으로 추적은 관리 이벤트를 항상 로그하게 구성됨
관리 이벤트는 리소스를 수정하지 않는 읽기 이벤트와 리소스를 수정하는 쓰기 이벤트가 존재
읽기 이벤트는 IAM 내 모든 사용자를 나열하거나 EC2 내의 모든 인스턴스를 나열하는 등의 손상을 입히지 않는 이벤트를 말하며
쓰기 이벤트는 DynamoDB 테이블을 지우려고 시도하는 등의 AWS 인프라에 손상을 입힐 수 있는 이벤트를 말함 - 데이터 이벤트 (Data Events)
GetObject나 DeleteObject 같은 S3의 객체 활동을 나타냄
기본적으로 데이터 이벤트는 대규모 연산이며 자주 일어나기 때문에 로깅되지 않음
읽기와 쓰기 이벤트를 분리할 수 있는 옵션이 존재 (읽기 이벤트는 GetObejct, 쓰기 이벤트는 PutObject에 해당)
또한 Lambda 함수 실행 활동을 알기 위해서는 Invoke API를 실행하면 람다 함수가 몇 번 실행됐는지 알 수 있음 - CloudTrail Insights Events
CloudTrail Insights
- 모든 서비스를 통틀어 관리하면 이벤트가 너무 많고
계정 내에서 API가 매우 급속히 실행되고 있다면 무엇이 문제이고 평소와 다른게 무엇인지 알아차리기 힘듦 - CloudTrail Insights를 사용하면 유료로 활성화되지만 이벤트를 분석해서 수상한 활동을 찾아냄
- CloudTrail은 먼저 정상적인 관리 활동을 분석해서 기준을 세우고 그 후 들어오는 쓰기 이벤트를 계속해서 분석하며
뭔가 변경되거나 변경하려 한 경우마다 평소와 다른 패턴을 감시하고 뭔가 감지되면 Insights 이벤트를 생성하며
이 Insights 이벤트는 CloudTrail 콘솔에 표시되고 필요하면 S3로도 보내지며
자동화할 경우를 대비하여 EventBridge 이벤트가 생성됨 - 예) 불명확한 리소스 프로비저닝 서비스, 한계 도달, AIM 동작 과다 사용, 주기적 유지 보수 활동의 빈틈 등
CloudTrail Events Retention
- 기본적으로 CloudTrail 내 이벤트는 90일까지 저장되고 그 이후에 삭제되지만
때때로 보존 기간을 늘려야할 때가 존재
예) 일 년 전의 일을 감사해야할 때 - 보존 기간을 늘리기 위해서는 이벤트를 S3에 보내 Athena를 사용해 이벤트를 분석하면 됨
즉, 모든 관리 이벤트와 데이터 이벤트, Insights 이벤트는 전부 CloudTrail 내에서 90일간 보존되지만
더 오래 보존하려면 S3 버킷에 이를 로그하고 S3에 데이터를 쿼리하기 위한 서버리스 서비스인 Athena 서비스를 이용해 분석
분석을 통해 관련 있는 이벤트를 찾고 정보를 얻을 수 있음
<CloudTrail 실습>
- CloudTrail 대시보드
CloudTrail Insight가 활성화되어 있지 않음
최근 계정 내의 이벤트 기록을 볼 수 있어 이벤트 기록으로 가면 여러 서비스에서 실행된 API 호출을 볼 수 있음
여기에는 호출이 실행된 시간, 실행한 사용자 이름, 이벤트 소스 등도 볼 수 있음
또한 읽기 전용 이벤트나 쓰기 이벤트로 분류해 볼 수 있으며 삭제 역할이나 삭제 정책 같은 것을 볼 수 있음
TerminateInstances를 검색해보면 EC2에서 언제 인스턴스가 삭제됐는지 알 수 있으며 누가 삭제했는지 등을 알 수 있음
또한 이벤트 레코드에 대한 정보를 얻을 수 있어 언제 일어났는지, 어떤 리전에서 일어났는지, 이벤트가 일어난 IP와
요청 매개변수 등의 정보를 통해서 누가, 무엇을, 언제, 어떻게 이벤트를 일으켰는지 알아낼 수 있음
또한 참조된 리소스와 연결시켜주므로 리소스 이름을 클릭할 경우 제거되지 않은 이상 연결되게 됨
여기서는 90일간의 관리 이벤트를 보여줌
- CloudTrail Insight
90일 이전의 것을 보고 싶을 때는 Insights를 활성해 추적을 생성하면 되지만 비용이 발생함
이는 다수의 계정에서 활성화할 수 있으며 CloudTrail 내에서 모든 걸 직접 관리할 수 있음
이름을 DemoTrail로 정한 후 이 로그를 어디로 보낼지 설정해야 하는데 새로운 버킷이나 이미 존재하는 버킷으로 보낼 수 있음
새 버킷으로 보내면 이 추적을 저장하기 위해 자동으로 버킷이 생성되며 버킷을 암호화할지 고를 수 있음
또한 로그 파일 검사를 활성화할 수 있고 SNS 알림 전송을 설정할 수 있음
또한 로그를 CloudWatch Logs로 보낼 수 있기 때문에 이를 활성화하고 새 로그 그룹을 만들어
CloudTrail 내의 모든 이벤트의 정보를 CloudWatch Logs와 S3에서 모두 얻을 수 있다는 의미로 이름을 설정
그리고 새 역할을 자동으로 만들도록 이름을 CloudTrailRoleForDemo로 설정
다음으로는 CloudWatch Logs와 S3 등에 로그하고 싶은 로그 이벤트 유형을 선택해야 함
관리 이벤트란 AWS 리소스에서 일어나는 모든 이벤트를 뜻하며 인스턴스를 제거하거나 새 IAM 역할을 생성하는 것을 말함
데이터 이벤트란 S3 버킷이나 람다 함수에서 일어나는 이벤트를 뜻함
Insights 이벤트는 계정 내에서 일어나는 평소와 다른 활동 오류나 사용자 활동을 감지하면 생성됨
관리 이벤트는 읽기나 쓰기 이벤트를 포함하거나
KMS 이벤트는 제외할 수 있어 암호화가 많이 일어나서 무시하고 싶을 때를 위해 사용
데이터 이벤트는 데이터 소스를 골라야 하는데 S3와 Lambda가 있고 S3를 고르면
현재와 미래의 모든 S3 버킷을 읽기나 쓰기형으로 로그할 수 있고 PutObject, ReadObject, GetObject를 로그할 수 있음
또는 단일 버킷을 선택할 수도 있어 어떤 버킷을 읽기와 쓰기형으로 로그할지는 원하는대로 S3 버킷 중에서 고르면 됨
Lambda와 S3를 동시에 원한다면 새 데이터 이벤트 유형을 추가하면 되며
Lambda를 넣고 모든 함수를 고르면 모든 함수에 대한 데이터 이벤트를 로그하게 됨
Insights 이벤트는 활성화되어 있다고 나오기 때문에 사용량 이상이 로그되면 이를 볼 수 있음
CloudTrail 생성 이후로는 추적이 생성되어 어디로 가는지 알 수 있어
S3 버킷과 CloudWatch Logs 그룹으로 로그되고 있음을 알 수 있음
- CloudTrail 생성 확인
S3 버킷과 CloudWatch Logs의 로그 그룹에 CloudTrail 로그가 되어 있음을 알 수 있음
이후EC2에 키 쌍으로 만들면 S3와 CloudWatch로 데이터가 보내지게 되어 CloudWatch Logs와 S3에 이벤트가 로그됨
CloudWatch Logs에서 이 이벤트를 보면 CreateKeyPair에 관련된 생성 시간과 같은 모든 데이터를 볼 수 있음
또한 S3 버킷으로 이동해서도 찾아볼 수 있고 JSON 파일을 다운로드할 수 있음
이 둘은 동일한 이벤트 레코드
- Cloud Trail Athena
또한 S3의 경우 Athena를 사용해 레코드를 쿼리할 수 있으므로
CloudTrail로 가서 이벤트 기록을 보면 Athena 테이블을 생성할 수 있고 CloudTrail 로그를 선택할 수 있음
이후 이 테이블을 열어 테이블 미리보기와 위의 S3 버킷을 선택하여 쿼리를 실행할 수 있음
이를 통해 이벤트 버전과 사용자 정보, Athena로 가는 여러 행 이벤트 시간, 이벤트 소스, 이름, 리전 소스 IP 주소,
사용자 에이전트 등을 볼 수 있어 이 이벤트와 관련된 쿼리를 실행해 순서대로 데이터를 분석할 수 있음
'Cloud > AWS' 카테고리의 다른 글
[SAA] CloudTrail vs CloudWatch vs Config (0) | 2022.04.20 |
---|---|
[SAA] Config 개요 (0) | 2022.04.20 |
[SAA] EventBridge 개요 (0) | 2022.04.18 |
[SAA] CloudWatch 이벤트 (0) | 2022.04.18 |
[SAA] CloudWatch 경보를 사용한 EC2 인스턴스 복구 (0) | 2022.04.18 |