CloudTrail, CloudWatch, AWS config는 AWS 리소스와 애플리케이션의 상태, 성능, 보안 수준을 관리하기 위한 주요서비스이다.
이벤트란 IAM 유저 및 롤 등, 사용자가 AWS 리소스에 대해 행한 액션의 기록이다.
CloudTrail은 다음과 같은 상세한 내역을 남긴다.
API 액션은(s3버킷 생성, 인스턴스 시작등) 물론, 비-API 액션(관리 콘솔 로그인등) 도 기록한다.
관리 이벤트에는 AWS리소스와 관련해 사용자가 실행한 작업 또는 실행하려고 시도한 모든 작업이 포함된다.
AWS는 이와 같은 관리 이벤트를 제어 측면의 작업으로 부르기도 한다.
데이터 이벤트는 데이터 작업 유형에 따라 S3객체 레벨 작업과 Lambda 함수 실행등 두가지 타입이 있다.
S3 객체레벨 작업
기본적으로 CloudTrail 은 90일간의 관리 이벤트를 기록해 이벤트 히스토리라는 검색 및 다운로드가 가능한 데이터베이스에 저장한다. 단 이벤트 히스토리에는 데이터 이벤트는 기록되지 않는다.
CloudTrail은 리전별로 해당 리전에 대한 이벤트 히스토리를 생성한다.
90일 이상의 이벤트 히스토리를 저장하거나, 로그에서 특정 서비스 또는 액션을 제외시키거나 S3다운로드나 업로드 등을 포함시키는 등 CloudTrail의 커스텀 이벤트 로그를 사용하려는 경우 트레일(Trail)을 이용한다.
트레일은 CloudTrail 로그를 S3버킷에 전달하는 이벤트 기록과 관련된 환경셜정 옵션이다. 로그 파일은 JSON 포맷 문서에 하나 이상의 로그 엔트리를 지닌다.
생성은 단일 리전으로 할 수도 있고 전체 리전에서 발생하는 로그를 기록할 수 도있다.
트레일을 생성하면 cloudTrail이 이벤트를 기록하고 이를 S3버킷에 로그파일로 저장하는데 약 15분의 시간이 소요된다.
CloudTrail은 로그 파일이 변조 또는 삭제되지 않았음을 보장할 수 있는 방법을 제공한다.
해커가 시스템에 침투하면, 거의 대부분 공격 행위와 관계된 로그 파일을 변조 또는 삭제하므로 이와 같은 보증기능은 의미가 있다.
CloudTrail 에서 로그 파일 진실성 검증 옵션을 활성화 하면 S3버킷에 로그파일이 전송될 때마다 파일의 암호 해시를 연산 및 확인하게 된다.
해시는 로그 파일 자체에서 파생된 유일한 값이며 로그 파일에서 1바이트라도 변경 되면 전체 해시가 바뀌게 되므로 로그 파일 전체의 무결성, 온전성, 진실성을 확인 할 수 있다.
Cloudwatch는 AWS 리소스 및 비-AWS 리소스의 성능 지표 또는 매트릭스를 수집 수정 시각화하는 서비스이다.
모든 AWS리소스는 자신의 매트릭스를 CloudWatch로 전송한다.
주요 성능 매트릭스로는 EC2인스턴스의 CPU활성화, EBS볼륨의 읽기 및 쓰기 IOPS,S3 버킷 용량 등이 있으며
애플리케이션 및 온프레미스 서버의 커스텀 매트릭스를 CloudWatch로 전송할 수 있다.
Cloudwatch Alarms으로 매트릭스 값에 따라 알림 메시지를 전송하거나 특정 액션을 취할 수 있다.
CloudWatch logs는 AWS리소스 및 비-AWS 리소스의 로그를 수집, 저장, 시각화하고 검색 기능을 제공한다.
또한 로그에서 애플리케이션의 오류 횟수, 웹서버의 전송 바이트 용량 등 커스텀 매트릭스를 추출해 제공할 수 있다.
CloudWatch는 네임스페이스를 기준으로 매트릭스를 관리한다. AWS 서비스의 매트릭스는 AWS 네임스페이스에 저장되며, 좀 더 쉬운 분류를 위해 AWS/Service 형식으로 사용된다.
ex) ec2매트릭스의 네임스페이스는 AWS/EC2 이다.
네임스페이스는 매트릭스를 담는 컨테이너와 같은 역할을 하며, 비슷한 이름을 혼동하지 않도록 돕는다.
하나의 매트릭, 즉 개별 성능 지푠느 변수이자 시간순으로 작성된 데이터 포인트의 집합이며, 각 데이터 포인트에는 타임스탬프, 관련값, 측정 단위가 포함된다.
개별 성능 지표는 네임스페이스, 네임, 옵션인 차원으로 구분 될 수 있다. 차원은 비슷한 성능 지표를 구분하기 위해 사용하는 이름/값 쌍이다.
AWS서비스가 CloudWatch에 매트릭스를 전송하는 주기는 해당 서비스의 모니터링 타입에 따라 달라진다.
대부분의 서비스는 기본 모니터링을 지원하며 일부 서비스의 경우 기본모니터링과 상세 모니터링을 지원한다.
기본 모니터링은 5분 주기로 CloudWatch에 성능 지표를 전송하며 EC2는 기본 설정으로 기본 모니터링을 제공하고 EBS는 gp2볼륨에 대해 기본 모니터링을 제공한다. EC2는 1분마다 지표를 수집하지만 평균적으로 5분마다 지표를 전송한다.
AWS서비스가 생성하는 매트릭스는 1분 미만으로 측정되는 타임스탬프 해상도를 지닌다. (일반 해상도 매트릭스)
커스텀 매트릭스의 경우 1초까지의 해상도를 제공할 수 있다. (고해상도 매트릭스)
CloudWatch에서는 매트릭스를 임의로 삭제할 수 없으며, 정해진 기한에 자동으로 만료돼 삭제된다.
만료기한은 해상도에 따라 다르며, 시간이 경과함에 따라 고해상도 매트릭스는 차츰 저해상도 매트릭스에 편입된다.
고해상도 매트릭스는 3시간 동안 저장되며 이후 모든 분 단위로 수집된 데이터는 1분 해상도의 데이터 포인트에 편입ㄴ되고 고해상도 매트릭스의 데이터 포인트는만료와 동시에 삭제된다.
CloudWatch는 일정 시간 동안의 데이터 포인트에 대한 통계적 분석을 한 뒤 이를 시계열 그래프로 제공한다.
이는 사용량 급증 등 시간 흐름에 따른 리소스 변화를 확인할 수 있는 기회를 제공한다.
CloudWatch가 제공하는 주요 통계량
CloudWatch 는 매트릭스 연산 및 그래프화를 위해 다양한 수학적 함수를 제공한다. 하나의 시계열 속에 여러 개의 매트릭스를 결합해서 출력하려는 경우 사칙연산 및 제곱 등 산술 함수가 도움을 줄 수 있다.
CloudWatch는 사직연산 등 산술 함수 이외에도 평균, 최대, 최소, 표준편차, 합 등의 수학식을 제공한다. (통계함수는 그래프화 할 수는 없다)
Cloudwatch Logs는 AWS 소스는 물론 비-AWS 소스의 로그를 수집할 수 있으며 이렇게 수집된 로그에서의 검색 및 커스텀 매트릭스 추출도 가능하다.
ex) CloudTrail 로그 수집, 인스턴스의 애플리케이션 로그 수집 등
CloudWatch Logs에 전달하는 로그 이벤트는 타임스탬프와 UTF-8으로 인코딩된 이벤트 메시지를 포함해야 하며, 보통의 바이너리 데이터는 저장할 수 없다.
CloudWatch는 여러개의 로그 스트림을 로그 그룹에 넣어 조직화할 수 있으며, 하나의 로그 스트림은 단 하나의 로그 그룹에만 존재할 수 있다.
로그 그룹의 유지기간은 최소 1일에서 10년 또는 무기한으로 설정할 수 있다 (기본설정은 무기한)
로그 스트림에 매트릭 필터를 적용해서 데이터를 추출해 CloudWatch 매트릭스 생성에 사용할 수 있다.
CloudTrail 설정을 통해 트레일 로그를 CloudWatch Logs의 로그 스트림으로 전송 할 수 있다. 이렇게하면 트레일 로그에서 바로 각종 지표를 추출하거나 검색하는 것이 가능해진다.
CloudTrail의 트레일로그는 JSON포맷이며 S3에 저장할 수는 있지만 로그를 검색할 수 있는 방법은 제공하지 않는다. 하지만 CloudWatch는 Json문서를 잘 이해하며 검색 기능또한 쉽게 제공이 가능하기 떄문에 같이 사용하면 좋다.
but 256KB를 초과하는 로그 이벤트를 전송할 수 없다는것 주의할것
단일 지표를 모니터링 하다가 값의 변화가 발생하면 이메일 알림, 인스턴스 리부팅, Auto scaling액션 실행 등 미리 지정된 특정 동작을 취하는 서비스이다.
알림 생성 기준치
데이터포인트 모니터링 기간은 알림 상태를 변화시킬 수 있도록 기준치 똔든 기준 범위 내에 있어야한다. 알림의 상태는 아래의 3가지 중 하나에 해당한다.
ALARM 상태가 반드시 문제 발생을 의미하는것은 아니며 OK상태가 반드시 문제가 없다는 의미가 아니라는 점을 기억하자.
알람 상태 전환 시 특정 액션을 취하도록 하 ㄹ수 있으며, ALARM 상태 이외에도 액션을 부여할 수 있다.
EventBridge는 특정 이벤트 또는 스케줄을 모니터링 하다가 관련 액션을 취할 수 있다.
예를 들어서 실행중인 EC2인스턴스가 중지된다던가 하는것도 하나의 이벤트가 될 수 있다.
EventBridge는 이벤트에 반응해 액션을 취하는 반면 CloudWatch Alarms는 성능 지표에 반응해 액션을 취한다는 점에서 차이가 있다.
EventBridge는 이벤트 버스를 모니터링 한다.
EventBridge에서 룰은 이벤트에 반응해 취하게 될 액션을 정의한다.
AWS Config는 특정 시간대의 AWS 리소스의 환경설정 내역을 추적하며, 일종의 환경 설정 타임머신이다. AWS Config를 이용해서 사용자는 현 시점의 환경설정과 과거 특정 시점의 환경설정 내역을 비교할 수 있다.
또한 하나의 리소스와 다른 리소스 간의 관계를 파악할 수 있으며, 특정 요소의 설정 변경이 다른 요소에 어떤 영향을 미칠지 파악할 수 있다.
AWS Config의 기능은 CloudTrail, EventBridge와 구분되며 오직 AWS Config만이 특정 시점의 환경 설정 내역을 통합적으로 관리한다.
제공 기능
AWS Config의 핵심 요소로 기존 리소스의 발견, 환경설정 내역 기록, 변경사항 기록, 시간 ㅎ름에 따른 변경 추적 등의 기능을 수행한다.
기본적으로 해당 리전 내 모든 아이템을 모니털이 한다.
특정 시점의 리소스 타입, ARN, 생성 시점 등 리소스 설정값을 포함하며, 다른 리소스와의 관계성 정보도 제공한다.
환경설정 아이템은 AWS Config 내에 저장되고 사용자가 직접 삭제할 수 없다.
AWS Config는 환경설정 아이템을 이용해 리소스별 환경설정 히스토리를 생성한다. 환경설정 히스토리는 특정 리소스의 시간대별 환경설정 아이템 집합니며, 생성 시기,
시간대별 설정내역 등이 포함되고 CloudTrail의 API 로그 기록도 포함된다.
특정 시간대의 모든 환경설정 아이템 집함으로 모니터링 대상이 되는 모든 리소스의 환경설정 백업이라고 할 수 있으며 AWS CLI를 통해 설정 가능하다.
환경설정 스냅샷을 딜리버리 채널에 전송하며 주기는 3,6,12,24 시간 단위로 가능하다.
환경설정 아이템을 직접 삭제할 수는 없지만 AWS Config 설정에서 아이템 보관기한을 최소 30일에서 7년까지 조절할 수 있다. 단 S3로 전송된 환경설정 히스토리 및 스냅샷에는 적용되지 않는다.
사용자는 콘솔 또는 CLI를 통해 언제든 환경설정 레코더를 시작하거나 중지시킬 수 있다.