Amazon Web Services 한국 블로그

AWS CloudTrail Insights 출시 – 기계 학습을 통한 API 이상 활동에 대한 식별 및 대응 기능

클라우드 기반 애플리케이션의 장점은 처음부터 손쉬운 로깅 시스템을 활용 할 수 있다는 점입니다. 예를 들어, AWS CloudTrail 같은 도구를 사용하면 AWS 계정 및 서비스에서 수행된 모든 작업을 추적하여 특정 변경을 야기한 모든 이벤트를 간단하게 찾을 수 있습니다.

하지만, 모든 로깅 항목이 유용한 것은 아닙니다. 로그 데이터가 대량으로 생성되는 대규모 소프트웨어 시스템에서도 조치가 가능한 정보를 찾기 위해 이러한 레코드를 샅샅이 뒤지는 것은 대단히 힘든 과정입니다.  새로운 서비스가 추가될 때는 오탐지와 과도한 알림에 시달리게 될 수 있습니다. 바로 이때, 인공 지능 기반의 자동화 및 기계 학습이 필요한 시점입니다.

AWS CloudTrail Insights는 CloudTrail에 있는 로그에서 자동으로 이벤트를 분석하고 사용자에게 이상 활동에 대한 경고를 보내주는 기능입니다. 예를 들어, 설정된 기준과 다른 TerminateInstance 이벤트가 증가하면 Insight 이벤트에서 이러한 내용을 볼 수 있습니다. 이러한 이벤트를 통해 보다 쉽게 정상적이지 않은 API 활동을 찾고 대응할 수 있습니다.

AWS CloudTrail Insights 시작하기

CloudTrail은 사용자들의 활동 및 API 사용을 추적합니다. CloudTrail은 AWS Management Console, AWS SDK, 명령줄 도구 및 기타 AWS 서비스를 통해 수행된 작업을 포함하여 AWS 계정 활동의 이벤트 이력을 제공합니다. AWS CloudTrail Insights의 출시와 더불어 이제 몇 번의 클릭으로 이러한 로그에서 이상 활동을 탐지하는 기계 학습 모델을 사용할 수 있게 되었습니다. AWS CloudTrail Insights는 기존의 API 호출을 분석하여 이상 활동과 관련된 사용 패턴을 식별하고 Insight 이벤트를 생성합니다.

CloudTrail Insights 활성화 방법을 보여 주는 스크린샷

AWS CLI(명령줄 인터페이스)에서 다음과 같이 put-insight-selectors 명령을 사용하여 트레일에서 Insights를 활성화할 수도 있습니다.

$ aws cloudtrail put-insight-selectors --trail-name trail_name --insight-selectors '{"InsightType": "ApiCallRateInsight"}'

활성화되면 CloudTrail Insights에서 트레일 상세 정보 페이지에 지정된 S3 버킷으로 이벤트를 전송합니다. 이벤트는 또한 CloudWatch Events에도 전송되며, 필요한 경우 다른 CloudTrail Events처럼 CloudWatch Logs 로그 그룹에도 전송할 수 있습니다. 이를 통해 CloudWatch 이벤트에 대응하는 정교한 규칙부터 사용자 정의 AWS Lambda 기능까지 알림과 관련한 옵션이 제공됩니다. Insights를 활성화한 다음에는 트레일에 대한 기존 이벤트가 분석됩니다. 비정상적인 패턴이 발견되면 30분 이내에 CloudTrail Console에 표시됩니다.

CloudTrail Insights 사용해 보기

이 게시물에서는 AWS Console의 AWS CloudTrail Insights 이벤트를 일부 살펴보겠습니다. AWS CLI의 Insight 이벤트를 보려면 event-category 파라미터와 함께 CloudTrail LookupEvents 호출을 사용하십시오.

$ aws cloudtrail lookup-events --event-category insight [--max-item] [--lookup-attributes]

CloudTrail Insights 목록을 빠르게 스캔하면 RunInstances 이벤트가 나타납니다. 더 많은 EC2 인스턴스를 스핀업하려면 비용이 많이 들 수 있습니다. 전에 필요로 했던 것보다 많은 인스턴스를 생성하도록 구성이 잘못되어 있으므로 이 부분을 자세히 살펴보고 싶습니다. 목록을 이러한 이벤트로만 필터링한 후 AWS CloudTrail Insights에서 얻어진 정보가 무엇인지 살펴보겠습니다.

최신 이벤트를 살펴보겠습니다.

일 분 동안 RunInstances API 호출량이 급증한 것을 알 수 있습니다. Insights 그래프에서 원시 이벤트를 JSON으로 볼 수 있습니다.

{
    "Records": [
        {
            "eventVersion": "1.07",
            "eventTime": "2019-11-07T13:25:00Z",
            "awsRegion": "us-east-1",
            "eventID": "a9edc959-9488-4790-be0f-05d60e56b547",
            "eventType": "AwsCloudTrailInsight",
            "recipientAccountId": "-REDACTED-",
            "sharedEventID": "c2806063-d85d-42c3-9027-d2c56a477314",
            "insightDetails": {
                "state": "Start",
                "eventSource": "ec2.amazonaws.com",
                "eventName": "RunInstances",
                "insightType": "ApiCallRateInsight",
                "insightContext": {
                    "statistics": {
                        "baseline": {
                            "average": 0.0020833333},
                        "insight": {
                            "average": 6}
                    }
                }
            },
            "eventCategory": "Insight"},
        {
            "eventVersion": "1.07",
            "eventTime": "2019-11-07T13:26:00Z",
            "awsRegion": "us-east-1",
            "eventID": "33a52182-6ff8-49c8-baaa-9caac16a96ce",
            "eventType": "AwsCloudTrailInsight",
            "recipientAccountId": "-REDACTED-",
            "sharedEventID": "c2806063-d85d-42c3-9027-d2c56a477314",
            "insightDetails": {
                "state": "End",
                "eventSource": "ec2.amazonaws.com",
                "eventName": "RunInstances",
                "insightType": "ApiCallRateInsight",
                "insightContext": {
                    "statistics": {
                        "baseline": {
                            "average": 0.0020833333},
                        "insight": {
                            "average": 6},
                        "insightDuration": 1}
                }
            },
            "eventCategory": "Insight"}
    ]}

여기서 기준 API 호출량이 0.002인 것을 볼 수 있습니다. 이것은 일반적으로 약 500분마다 한 번씩 RunInstances를 호출한다는 것을 의미하므로 그래프에 표시되는 활동은 분명히 정상적이지 않습니다. CloudTrail Events 탭을 클릭하면 이 Insight 이벤트에 그룹화된 개별 이벤트를 볼 수 있습니다. 아마도 일반적인 EC2 autoscaling 활동이었던 것처럼 보이지만 좀 더 상세하게 확인하고 싶습니다.

이 탭의 이벤트를 확장하고 “View Event”를 클릭하면 CloudTrail의 이벤트를 바로 확인하고 자세한 정보를 살펴볼 수 있습니다. 이벤트 메타데이터와 연결된 EC2IAM 리소스를 검토한 결과 이러한 동작이 비정상적이기는 하지만 문제의 원인이 아님을 확인했습니다. autoscaling이 정상적인 작업을 수행했고 올바른 유형의 인스턴스가 생성된 것으로 보입니다.

주요 사항

시작하기 전에 몇 가지 중요한 사항을 알아 두십시오.

  • CloudTrail Insights에서 각 Insight 유형에 대해 쓰기 관리 이벤트를 분석할 경우 10만 개당 $0.35가 소요됩니다. 출시 시점에는, API 호출량 분석이 유일하게 사용 가능한 유형입니다.
  • 활동 기준 범위는 CloudTrail 트레일이 작동하는 리전 및 계정입니다.
  • 계정에서 처음 Insights 이벤트를 활성화한 후 비정상적인 활동이 감지되면 Insights를 활성화한 후 36시간 이내에 첫 번째 Insights 이벤트를 수신할 수 있습니다.
  • 비정상적인 활동이 새롭게 발견되면 로깅되며 대개는 30분 이내에 대상 S3 버킷과 AWS 콘솔에 Insight 이벤트가 전송됩니다.

다른 질문이나 기능에 대한 요청이 있으시면 알려 주십시오!

— Brandon