cloudwithbass

[AWS] Amazon CloudWatch vs AWS Cloud Trail vs AWS Config 본문

AWS

[AWS] Amazon CloudWatch vs AWS Cloud Trail vs AWS Config

여영클 2024. 6. 18. 22:36

이번 포스팅에선 모니터링, 감사(audit)과 관련된 서비스들인 Amazon CloudWatch, AWS Config, Cloud Trail에 대해 알아보겠습니다.


AWS CloudWatch

Amazon CloudWatch는 AWS 리소스들과 application을 실시간으로 모니터링합니다.
CloudWatch를 사용하면 다양한 지표를 수집하고 추적할 수 있으며, 이를 통해 리소스의 성능을 최적화하고 문제를 해결할 수 있습니다.

 


 

AWS CloudWatch의 작동 방식

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html

 

CloudWatch는 기본적으로 'metrics repository'입니다.

metric은 예를 들어 EC2 인스턴스의 CPU 사용률, S3의 request 횟수 등이 될 수 있습니다. 

 

사진의 가장 좌측에서 CloudWatch와 custom data로 수집한 metric들을 레포지토리에 저장합니다.

  • metric을 분석해 차트 등으로 시각화할 수 있습니다.
  • metric을 토대로 경보를 보내고, 경보가 트리거될 경우 실행할 작업을 설정할 수 있습니다.

예를 들어보겠습니다.

  1. CloudWatch에서 Auto Scaling Group을 모니터링하도록 설정합니다.
  2. 평균 CPU 사용률이 70%를 초과할 경우 알람을 보내도록 합니다.
  3. 알람이 트리거될 때, 인스턴스 개수를 증가시키는 Auto Scaling 정책을 실행하도록 합니다.

AWS CloudWatch의 추가 기능들

  • CloudWatch Logs: application 로그와 시스템 로그를 수집하고 분석할 수 있음
    • 로그를 중앙 집중화하므로 쉽게 쿼리할 수 있으며, 특정 에러 패턴 검색이 쉽습니다.
    • Amazon OpenSearch Service 클러스터로 거의 실시간 스트리밍을 할 수 있습니다.
      • OpenSearch는 로그 분석, 실시간 애플리케이션 모니터링, clickstream 분석에 쓰이는 검색 및 분석 엔진입니다.
  • Amazon EventBridge (구 Amazon CloudWatch Events) : 시스템 이벤트에 반응하는 자동화된 작업 설정 가능
    • CloudWatch 경보가 생성, 업데이트, 삭제 또는 변경될 때마다 Amazon EventBridge에 이벤트를 전송합니다
    • Amazon EventBridge는 이벤트 버스파이프를 이용해 전송받은 이벤트를 처리합니다.
      • 이벤트 버스는 다수의 대상에 이벤트를 전달하며, 파이프는 단일 대상에 이벤트를 전달합니다.
      • 따라서 파이프를 이용해 이벤트 버스로 이벤트를 전달하는 것이 일반적인 사용 사례례입니다.
  • AWS 계정에 접근이 불가능한 사람과도 지표를 공유할 수 있음

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-dashboard-sharing.html

 

Sharing CloudWatch dashboards - Amazon CloudWatch

Sharing CloudWatch dashboards You can share your CloudWatch dashboards with people who do not have direct access to your AWS account. This enables you to share dashboards across teams, with stakeholders, and with people external to your organization. You c

docs.aws.amazon.com

 

 

 

 


 

 

 

 

 

 

AWS Cloud Trail

AWS CloudTrail은 감사(auditing), 거버넌스(governance), 및 규정 준수(compliance)를 가능하게 해주는 서비스입니다.

 

  • AWS 계정에서 AWS CloudTrail을 활성화하면, 계정의 활동들이 CloudTrail event에 기록됩니다.
  • CloudTrail이 이벤트를 기록하는 방법은 세 가지가 있습니다.

1. Event history

  • 하나의 AWS 리전에 대해 보기, 검색, 다운로드가 가능한 기록을 제공합니다.
  • 이 기록은 최대 90일 이전의 일들까지 확인할 수 있으며, 수정이 불가능합니다.
  • 이 이벤트들은 AWS 콘솔, CLI, AWS SDK, API를 통해 이루어진 활동들을 일컫습니다.

2. CloudTrail Lake

  • 사용자 및 API 활동을 캡처, 저장, 접근, 분석하기 위한 관리형 데이터 레이크(data lake)입니다.
  • 기존 JSON 포맷의 이벤트를 ORC 포맷으로 변환합니다.
    • ORC 포맷은 빠른 데이터 검색에 최적화된 열 기반 스토리지 형식입니다.
  • 이벤트는 데이터 스토어에 저장되 최대 약 10년 간 유지할 수 있습니다.

3. Trails

  • AWS 활동 기록을 S3 버킷에 저장합니다.
    • 따라서 S3 버킷을 SQL로 분석할 수 있게 해주는 Amazon Athena를 이용해 로그 분석을 손쉽게 할 수 있습니다.
  • CloudWatch에 이벤트를 전송할 수 있습니다. 
    • 따라서 특정 로그를 감지하고, 이에 대한 경보도 보낼 수 있습니다.

 

AWS Config와 CloudWatch를 이용하면 유용한 아키텍처 구성이 가능합니다.

아래는 사용자가 DeleteTable API를 사용할 경우 SNS로 알림을 주는 아키텍처 예시입니다.

아키텍처는 udemy의 SAA 강의를 참고했습니다.

  1. 사용자가 RDB에 대해  DeleteTable API를 사용합니다.
  2. 이 API 이벤트가 CloudTrail에 의해 Amazon EventBridge를 트리거합니다.
  3. Amazon EventBridge는 이벤트 파이프나 버스를 이용해 SNS를 트리거합니다.

 

 


 

 

 

AWS Config

AWS Config는 AWS 계정 내의 리소스들의 구성을 평가, 감사, 기록할 수 있도록 도와줍니다.

 

  • 여기서 리소스는 EC2, EBS, VPC 등이 될 수 있으며, 리소스가 다른 리소스와 어떻게 연관되어 있는지, 과거에서 현재까지어떻게 변화했는지 추적할 수 있습니다. 
  • AWS Config의 대상이 될 수 있는 리소스의 목록은 다음 문서를 참고 바랍니다.

https://docs.aws.amazon.com/ko_kr/config/latest/developerguide/resource-config-reference.html


 

AWS Config는 리소스 구성을 어떻게 감사할까?

AWS Configure는 리소스가 생성될 때, 변경될 때, 또는 사용자의 정의에 따라 리소스의 스냅샷을 생성합니다.

이 스냅샷은 다음 사진과 같이 S3 버킷에 저장할 수 있으며, 스냅샷 변경 사항에 대한 알림을 받기 위해 Amazon SNS을 통해 스트리밍할 수 있습니다.

 

AWS Config는 리소스 구성을 어떻게 평가할까?

리소스의 구성을 평가할 때 Rule(규칙)을 사용합니다.Rule은 사용자 정의형 Rule과 미리 정의된 384개의 AWS 관리형 Rule로 나뉩니다.

 

예를 들어 AWS 관리형 규칙 중 's3-bucket-server-side-encryption-enabled'가 있습니다.이 규칙은 s3가 SSE(Server-Side-Encryption)을 사용하는지 검사합니다. 검사에 따른 결과는 다음과 같습니다.

  • COMPLIANT - 규칙이 규정 준수 검사 조건을 통과합니다.
  • NON_COMPLIANT - 규칙이 규정 준수 검사 조건을 충족하지 않습니다.
  • ERROR - 필수 파라미터 또는 선택 사항 파라미터가 유효하지 않거나 올바른 유형이 아니거나 형식이 잘못되었습니다.
  • NOT_APPLICABLE - 규칙의 논리를 적용할 수 없는 리소스를 필터링하는 데 사용되었습니다. 예를 들어 alb-desync-mode-check규칙은 애플리케이션 로드 밸런서만 검사하고 네트워크 로드 밸런서와 게이트웨이 로드 밸런서는 무시합니다.

아래는 스냅샷의 예입니다.(출처: https://docs.aws.amazon.com/ko_kr/config/latest/developerguide/deliver-snapshot-cli.html)

더보기

{
    "fileVersion": "1.0",
    "requestId": "asudf8ow-4e34-4f32-afeb-0ace5bf3trye",
    "configurationItems": [
        {
            "configurationItemVersion": "1.0",
            "resourceId": "vol-ce676ccc",
            "arn": "arn:aws:us-west-2b:123456789012:volume/vol-ce676ccc",
            "accountId": "12345678910",
            "configurationItemCaptureTime": "2014-03-07T23:47:08.918Z",
            "configurationStateID": "3e660fdf-4e34-4f32-afeb-0ace5bf3d63a",
            "configurationItemStatus": "OK",
            "relatedEvents": [
                "06c12a39-eb35-11de-ae07-adb69edbb1e4",
                "c376e30d-71a2-4694-89b7-a5a04ad92281"
            ],
            "availibilityZone": "us-west-2b",
            "resourceType": "AWS::EC2::Volume",
            "resourceCreationTime": "2014-02-27T21:43:53.885Z",
            "tags": {},
            "relationships": [
                {
                    "resourceId": "i-344c463d",
                    "resourceType": "AWS::EC2::Instance",
                    "name": "Attached to Instance"
                }
            ],
            "configuration": {
                "volumeId": "vol-ce676ccc",
                "size": 1,
                "snapshotId": "",
                "availabilityZone": "us-west-2b",
                "state": "in-use",
                "createTime": "2014-02-27T21:43:53.0885+0000",
                "attachments": [
                    {
                        "volumeId": "vol-ce676ccc",
                        "instanceId": "i-344c463d",
                        "device": "/dev/sdf",
                        "state": "attached",
                        "attachTime": "2014-03-07T23:46:28.0000+0000",
                        "deleteOnTermination": false
                    }
                ],
                "tags": [
                    {
                        "tagName": "environment",
                        "tagValue": "PROD"
                    },
                    {
                        "tagName": "name",
                        "tagValue": "DataVolume1"
                    }
                ], 이하 생략

 

 

 

제가 정리한 글이 도움이 되셨길 바랍니다.

최대한 공식 문서를 토대로 작성했으나, 만약 잘못된 정보가 있을 경우 댓글로 알려주시면 감사드리겠습니다.

 

 

 


 

 

 

참고 문서

 

  • What is Amazon CloudWatch?

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html

  • Amazon OpenSearch 서비스로 CloudWatch 로그 데이터 스트리밍

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/CWL_OpenSearch_Stream.html

  • What is Amazon CloudWatch Logs?

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html

 

  • What is Amazon EventBridge?

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html

 

  • 경보 이벤트 및 EventBridge

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/cloudwatch-and-eventbridge.html

 

  • Logging Amazon CloudWatch API and console operations with AWS CloudTrail

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/logging_cw_api_calls.html

 

  • What is AWS CloudTrail?

https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html

 

  • AWS CloudTrail lake와 함께 일하기

https://docs.aws.amazon.com/ko_kr/awscloudtrail/latest/userguide/cloudtrail-lake.html

 

  • 메가존 클라우드 기술 블로그

https://www.megazone.com/techblog_20220112/

 

  • What is AWS Config?

https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html

 

  • NDS 기술 블로그

https://tech.cloud.nongshim.co.kr/2023/10/12/%EC%86%8C%EA%B0%9C-aws-config