AWS Monitoring, Audit and Performance
이번 장에서는 SAA를 준비하며 AWS의 모니터링, 감사 서비스에 대해서 알아보도록 한다.
Amazon CloudWatch Metrics
- "CloudWatch"는 AWS의 모든 서비스에 대한 메트릭을 제공한다.
- 메트릭은 모니터링할 변수로 CPU 사용률, 네트워크 사용률 등이 있다.
- 메트릭은 네임스페이스에 속한다.
- "Demension"은 메트릭의 속성(인스턴스 ID, 환경 등)이다.
- 메트릭당 최대 30개의 "Demension"을 지원한다.
- 메트릭에는 타임스탬프가 있다.
- 메트릭의 CloudWatch 대시보드를 생성할 수 있다.
- CloudWatch 사용자 지정 메트릭을 생성할 수 있다.
CloudWatch Metric Streams
- 거의 실시간으로 제공되고 대기 시간이 짧은 상태에서 원하는 목적지로 CloudWatch 메트릭을 지속적으로 스트리밍할 수 있다.
- "Amazon Kinesis Data Firehose"
- 3rd Party 서비스 제공자: Datadog, Dynatrace, New Reric, Splunk, Sumo Logic
- 일부만 스트리밍 하도록 메트릭을 필터링하는 옵션을 제공한다.
CloudWatch Logs
- 로그 그룹: 임의의 이름, 일반적으로 응용 프로그램을 나타낸다.
- 로그 스트림: 응용 프로그램 내의 인스턴스/로그 파일/컨테이너
- 로그 만료 정책을 정의할 수 있다.(만료되지 않음, 30일 등)
- CloudWatch Logs는 아래와 같은 목적지로 로그를 전송할 수 있다.
- Amazon S3(export)
- Kinesis Data Streams
- Kinesis Data Firehose
- AWS Lambda
- OpenSearch
CloudWatch Logs - Sources
- SDK, CloudWatch Logs Agent, CloudWatch Unified Agent
- Elastic Beanstalk: 애플리케이션에서 로그 수집
- ECS: 컨테이너에서 수집
- AWS Lambda: Function에서 로그 수집
- VPC Flow Logs: VPC 특정 로그
- API Gateway
- 필터 기반의 CloudTrail
- Route53: DNS 쿼리 기록
Metric Filter & Insight
- CloudWatch 로그에서 필터를 사용할 수 있다.
- 예를 들어, 로그 내부에서 특정 IP를 찾을 수 있다.
- 로그에서 "ERROR"가 발생한 횟수를 카운트할 수 있다.
- 메트릭 필터를 사용하여 CloudWatch 경보를 트리거할 수 있다.
- CloudWatch 로그 인사이트를 사용하여 로그를 쿼리하고 CloudWatch 대시보드에 쿼리를 추가할 수 있다.
S3 Export
- 로그 데이터를 내보내는 데 최대 12시간이 소요될 수 있다.
- API 호출은
CreateExportTask
다. - 실시간이 아니기 때문에 실시간이 필요한 경우 아래의 이미지와 같이 "Logs Subscription"을 사용한다.
- 다중 계정 및 다중 Region을 사용하는 경우 아래의 이미지와 같이 로그를 통합할 수 있다.
CloudWatch Logs for EC2
- 기본적으로 EC2 시스템의 로그가 CloudWatch로 전송되지 않는다.
- EC2에서 CloudWatch 에이전트를 실행하여 원하는 로그 파일을 푸시할 수 있다.
- IAM 권한이 올바르게 설정되어 있는지 확인해야 한다.
- CloudWatch 로그 에이전트를 On-Premise에서 실행 중인 서비스에도 설정할 수 있다.
CloudWatch Logs Agent & Unified Agent
- 가상 서버(EC2 Instance, On-Premises Servers)에 사용된다.
- CloudWatch Logs Agent
- 에이전트의 오래된 버전이다.
- "CloudWatch Logs"에만 전송이 가능하다.
- CloudWatch Unified Agent
- RAM, 프로세스 등과 같은 추가적인 시스템 레벨의 메트릭을 수집할 수 있다.
- "CloudWatch Logs"로 로그를 전송하여 수집할 수 있다.
- "SSM Parameter Store"를 이용한 중앙 집중식으로 구성할 수 있다.
- Linux 서버/EC2 인스턴스에서 직접 수집할 수 있다.
- CPU(active, guest, idle, system, user, steal)
- Disk metric(free, used, total), Disk IO(writes, reads, bytes, iops)
- RAM(free, inactive, used, total, cached)
- Netstat(TCP 및 UDP 연결 수, net packets, bytes)
- Process(total, dead, blocked, idle, running, sleep)
- Swap Space(free, used, used %)
CloudWatch Alarms
- 모든 메트릭에 대한 알림을 트리거하는 데 사용된다.
- 샘플링, %, max, min 등 다양한 옵션이 있다.
- "OK", "INSUFFICIENT_DATA", "ALARM" 등 다양한 상태가 있다.
- 메트릭을 평가할 시간을 설정할 수 있다.
- 10초, 30초 또는 60초의 배수로 수집 주기를 설정할 수 있다.
- "Amazon EC2"를 타겟으로 설정하여 중지, 종료, 재부팅 또는 복구에 대한 알림을 트리거할 수 있다.
- "EC2 Auto Scaling"을 타겟으로 설정하여 자동 스케일링 작업을 트리거할 수 있다.
- "Amazon SMS"을 타겟으로 설정하여 알림을 전송할 수 있다.
Composite Alarms
- "CloudWatch Alarms"가 단일 메트릭에 있다.
- 복합 알람(Composite Alarms)은 여러 개의 다른 알람의 상태를 모니터링한다.
- AND 또는 OR 조건을 설정할 수 있다.
- 복잡한 복합 알람을 생성하여 "알람 소음(alarm noise)"을 줄이는데 도움이 될 수 있다.
EC2 Instance Recovery
- Status Check
- 인스턴스 상태: EC2 VM의 상태를 확인한다.
- 시스템 상태: 기반 하드웨어의 상태를 확인한다.
- Recovery: 동일한 Private, Public, Elastic IP, metadata, 배치 그룹으로 복구한다.
참고
- "CloudWatch Logs Metrics Filters"를 기반으로 알람을 생성할 수 있다.
- 경보 및 알람을 테스트 하려면 CLI를 통해서 진행할 수 있다.
aws cloudwatch set-alarm-state --alarm-name "myalarm" --state-value ALARM --state-reason "testing purposes"
Amazon EventBridge (CloudWatch Event의 새로운 버전)
- Schedule: Cron jobs(시케줄링된 스크립트)
- Event Pattern: 서비스가 어떤 일을 할 때 반응하는 이벤트 규칙
- "Lambda Function" 트리거, SQS 또는 SNS에 메시지 전송을 할 수 있다.
- 아래의 이미지와 같이 "EventBridge 규칙"을 설정할 수 있다.
- 다른 AWS 계정에서 리소스 기반 정책을 사용하여 이벤트 버스에 액세스할 수 있다.
- 이벤트 버스로 전송된 이벤트를 아카이브할 수 있다.
- 아카이브된 이벤트를 반복할 수 있다.
Schema Registry
- "EventBridge"는 이벤트를 분석하고 스키마를 추론할 수 있다.
- 스키마 레지스트리를 사용하면 응용프로그램에 대한 코드를 생성할 수 있으며, 이 코드는 이벤트 버스에서 데이터가 어떻게 구성되는지 미리 알 수 있다.
- 스키마를 버전화할 수 있다.
Resource-based Policy
- 특정 이벤트 버스에 대한 사용 권한을 관리할 수 있다.
- 예를 들어, 다른 AWS 계정 또는 AWS 영역의 이벤트를 허용하거나 거부할 수 있다.
- AWS 조직의 모든 이벤트를 단일 AWS 계정 또는 AWS Region에 집계하는 데 사용될 수 있다.
CloudWatch Container Insights
- 컨테이너로 부터 메트릭 및 로그를 수집, 집계, 요약할 수 있다.
- 아래와 같은 컨테이너 서비스에 사용될 수 있다.
- Amazon Elastic Container Service (Amazon ECS)
- Amazon Elastic Kubernetes Service (Amazon EKS)
- Kubernetes platforms on EC2
- Fargate (ECS or EKS)
- "CloudWatch Insights"는 "Amazon EKS"와 "Kubernetes"에서 컨테이너형 버전의 "CloudWatch Agent"를 사용하여 컨테이너를 검색할 수 있다.
CloudWatch Lambda Insights
- "AWS Lambda"에서 실행되는 서버리스 애플리케이션의 모니터링 및 문제 해결을 할 수 있다.
- CPU 시간, 메모리, 디스크 및 네트워크를 포함한 시스템 수준의 메트릭 수집, 집계 및 요약을 제공한다.
- Cold Start, Lambda worker shutdown 등 진단정보 수집, 집계 및 요약이 제공된다.
- "Lambda Insights"는 "Lambda Layer"로 제공된다.
CloudWatch Contributor Insights
- 로그 데이터를 분석하고 기여자(Contributor) 데이터를 표시하는 시계열 데이터를 생성한다.
- 상위 N개 기여자에 대한 메트릭 조회
- 고유한 기여자의 총 수와 사용 시간 조회
- 이를 통해 최고의 대화 상대를 찾고 시스템 성능에 영향을 미치는 사용자 또는 대상을 파악할 수 있다.
- AWS에서 생성한 모든 로그(VPC, DNS 등)에 대해 작동한다.
- 예를 들어, 불량 호스트를 찾거나, 가장 무거운 네트워크 사용자를 식별하거나, 가장 많은 오류를 생성하는 URL을 찾을 수 있다.
- 처음부터 규칙을 만들 수도 있고, "CloudWatch Logs"를 활용하여 AWS에서 만든 샘플 규칙을 사용할 수도 있다.
- "CloudWatch"는 다른 AWS 서비스의 메트릭을 분석하는 데 사용할 수 있는 기본 제공 규칙도 제공한다.
CloudWatch Application Insights
- 모니터링되는 애플리케이션의 잠재적인 문제를 보여주는 자동 대시보드를 제공하여 지속적인 문제를 파악할 수 있도록 지원한다.
- 애플리케이션은 "Amazon EC2" 인스턴스에서 실행되며, 이는 선택한 기술(Java, .NET, Microsoft IIS 웹 서버, 데이터베이스 등)만 포함된다.
- "Amazon EBS", "RDS", "ELB", "ASG", "Lambda", "SQS", "DynamoDB", "S3 버킷" 등 다른 AWS 리소스를 사용할 수 있다.
- "SageMaker"에 의해 작동된다.
- 애플리케이션 상태에 대한 가시성 향상으로 애플리케이션 문제 해결 및 복구에 소요되는 시간을 단축할 수 있다.
- 결과 및 경고는 "Amazon EventBridge" 및 "SSM OpsCenter"로 전송된다.
CloudWatch Insights and Operational Visibility
- CloudWatch Container Insights
- "ECS", "EKS", "Kubernetes on EC2", "Fargate", "Kubernetes 에이전트 필요"
- 메트릭 및 로그를 확인할 수 있다.
- CloudWatch Lambda Insights
- 서버 없는 애플리케이션 문제 해결을 위한 세부 메트릭을 확인할 수 있다.
- CloudWatch Contributors Insights
- CloudWatch 로그를 통해 "Top-N"개의 기여자를 찾는다.
- CloudWatch Application Insights
- 애플리케이션 및 관련 AWS 서비스 문제 해결을 위한 자동 대시보드를 제공한다.
AWS CloudTrail
- AWS 계정에 대한 거버넌스, 컴플라이언스 및 감사를 제공한다.
- "CloudTrail"은 기본적으로 활성화되어 있다.
- AWS 계정 내에서 발생한 Event/API 호출 기록을 저장하고 있다. (Console, SDK, CLI, AWS Services)
- "CloudTrail"의 로그를 "CloudWatch" 로그 또는 "S3"에 저장할 수 있다.
- 추적은 모든 Region(기본값) 또는 단일 지역에 적용할 수 있다.
- AWS에서 리소스가 삭제된 경우 "CloudTrail"을 먼저 확인하여 검색할 수 있다.
Events
- Management Events:
- AWS 계정의 리소스에 대해 수행되는 작업이다.
- 대표적으로 아래와 같은 작업이 있을 수 있다.
- 보안 구성(
IAM AttachRolePolicy
) - 라우팅 데이터에 대한 규칙 구성(
Amazon EC2 CreateSubnet
) - 로깅 설정(
AWS CloudTrail CreateTrail
)
- 보안 구성(
- 기본적으로 "CloudTrail"은 관리 이벤트를 기록하도록 구성된다.
- 읽기 이벤트(리소스를 수정하지 않는)와 쓰기 이벤트(리소스를 수정할 수 있는)를 분리할 수 있다.
- Data Events:
- 기본적으로 데이터 이벤트는 기록되지 않는다.(대량의 작업 때문에)
- "Amazon S3" 개체 수준의 활동(예:
GetObject
,DeleteObject
,PutObject
): 읽기 및 쓰기 이벤트를 구분할 수 있다.
CloudTrail Insights
- "CloudTrail Insights"를 통해 계정에서 비정상적인 활동을 감지할 수 있다.
- 부정확한 리소스 프로비저닝
- 서비스 한도 초과
- "AWS IAM" 작업 버스트
- 주기적인 유지관리 활동의 공백
- "CloudTrail Insights"는 정상적인 관리 이벤트를 분석하여 기준선을 생성한다.
- 쓰기 이벤트를 지속적으로 분석하여 특이한 패턴을 탐지한다.
- "CloudTrail" 콘솔에 이상 징후가 나타난다.
- 이벤트는 "Amazon S3"로 전송된다.
- "EventBridge" 이벤트가 생성된다.(자동화 요구사항에 맞도록)
CloudTrail Events Retention
- 이벤트는 "CloudTrail"에 90일 동안 저장된다.
- 이벤트를 이 기간 이후로 유지하려면 "S3"에 기록하고 "Athena"를 사용해야 한다.
- "Amazon EventBridge"와 통합되어 "DynamoDB"의 테이블 변경 API 호출을 탐지하고 "SNS"를 통해 알림을 발생시킬 수 있다.
AWS Config
- AWS 리소스 컴플라이언스 감사 및 기록을 지원한다.
- 시간 경과에 따른 구성 및 변경 사항을 기록한다.
- "AWS Config"에서는 아래와 같은 질문에 답변할 수 있도록 도움을 줄 수 있다.
- 보안 그룹에 제한 없이 SSH에 액세스할 수 있는가?
- 나의 S3 버킷에 누구든 Public 접근할 수 있는가?
- 시간이 지남에 따라 ALB 구성이 어떻게 변경되었는가?
- 변경 사항에 대한 알림(SNS Notifications)을 받을 수 있다.
- "AWS Config"는 지역별(per-region) 서비스다.
- 여러 지역 및 계정에 걸쳐 집계가 가능하다.
- "S3"에 구성 데이터를 저장하고 "Athena"로 분석이 가능하다.
Rules
- AWS 관리 구성 규칙 및 사용이 가능하다.(75개 이상)
- 사용자 지정 규칙을 만들 수 있으며 "AWS Lambda"에 정의해야 한다.
- 예: 각 "EBS" 디스크가 "gp2" 유형인지 평가
- 예: 각 "EC2" 인스턴스가 "t2.micro"인지 평가
- 규칙을 평가/트리거할 수 있다.
- 각 규칙 변경 시마다
- 일정한 시간 간격으로
- "AWS Config Rules"에서 작업이 발생하는 것을 방지하지 않는다.
- "Free tier"에서는 사용이 불가능하며, Region에 기록된 구성당 $0.003, Reion에 기록된 규칙 평가당 $0.001이다.
Resource
- 시간 경과에 따른 리소스 컴플라이언스 보기
- 시간 경과에 따른 리소스 구성 보기
- 시간 경과에 따른 리소스의 "CloudTrail" API 호출 보기
Remediations
- "SSM Automation Documents"를 사용하여 비준수 리소스에 대한 교정 자동화를 할 수 있다.
- AWS에서 관리하는 자동화 문서를 사용하거나 사용자 지정 자동화 문서를 작성할 수 있다.
- "Lambda Function"를 호출하는 사용자 지정 자동화 문서를 생성할 수 있다.
- 자동 업데이트 적용 후 리소스가 여전히 비준수인 경우 업데이트 적용 재시도를 설정할 수 있다.
Notifications
- AWS 리소스가 규정을 준수하지 않을 경우, "EventBridge"를 사용하여 알림을 트리거할 수 있다.
- 구성 변경 및 규정 준수 상태 알림을 "SNS"로 전송하는 기능을 사용할 수 있다. (모든 이벤트 - SNS 필터링 또는 클라이언트 사이드 필터링 사용)
CloudWatch vs CloudTrail vs Config
- CloudWatch
- 성능 모니터링(메트릭, CPU, 네트워크 등) 및 대시보드
- 이벤트 및 알림
- 로그 집계 및 분석
- CloudTrail
- 모든 사용자가 계정 내에서 수행한 API 호출 기록
- 특정 리소스에 대한 추적을 정의
- 글로벌 서비스
- Config
- 구성 변경사항 기록
- 규정 준수 규칙에 따라 리소스 평가
- 변경 사항 및 규정 준수 일정 파악
Elastic Load Balancer 와의 통합
- CloudWatch
- 들어오는 연결 메트릭 모니터링
- 시간 경과에 따라 오류 코드를 %로 시각화
- 대시보드를 만들어 로드 밸런서 성능을 파악
- Config
- 로드 밸런서에 대한 Security Group 규칙 추적
- 로드 밸런서에 대한 구성 변경 사항 추적
- SSL 인증서가 항상 로드 밸런서에 할당되었는지 확인(Compliance)
- CloudTrail
- API 호출을 사용하여 로드 밸런서를 변경한 사용자 추적
참고한 자료
'Infrastructure > Certificate' 카테고리의 다른 글
[SAA] Security & Encryption (0) | 2023.10.04 |
---|---|
[SAA] Advanced Identity (0) | 2023.10.04 |
[SAA] Machine Learning (0) | 2023.10.03 |
[SAA] Data Analytics (0) | 2023.10.03 |
[SAA] Databases (0) | 2023.10.02 |