AWS

Amazon EventBridge + SNS 를 활용한 계정 침해 모니터링 - 2

moonganzi 2023. 4. 17. 10:58

이전 게시글에서 특정 리전에서 인스턴스가 생성 됐을 경우 Amazon EventBridge에서 이벤트 감지 -> Amazon SNS 에서 구독 중인 대상으로 이벤트 알림 발송 하는 방법에 대해 알아봤습니다.

 

https://moonganzi.tistory.com/42

 

이번에는 수신된 정형 되지 않은 데이터를 보기 좋게 수정하여 이메일로 수신할 수 있게 해보겠습니다.

 

이전 아키텍처 중간에 Lambda가 추가되어, 이벤트 발생 시 Lambda에서 이벤트 데이터를 수신하고 원하는 값을 추출하여 SNS로 전송해줍니다.

 

이벤트 발생 시 Lambda를 통해 원하는 값 추출 후 SNS로 전송

위와 같은 순서의 동작을 위해선 앞서 설정한 내용에 대한 일부 수정이 필요합니다.

 

1. Lambda 코드 생성

- 아래와 같이 EventBridge 이벤트에서 원하는 값만을 추출하는 코드를 작성합니다.

  코드 작성 시 기존 사용하던 SNS Arn을 입력합니다.

import json
import boto3

def lambda_handler(event, context):
    sns = boto3.client('sns')
    
    # EventBridge 이벤트에서 추출한 instanceType 값을 가져옵니다.
    message = event['detail']
    instance_type = message['requestParameters']['instanceType']
    source_ip = message['sourceIPAddress']
    arn = message['userIdentity']['arn']
    region = message['awsRegion']
    
    # 이메일 메시지를 생성합니다.
    email_subject = f'{region}에 인스턴스가 생성됐습니다.'
    email_message = f'{region}에 인스턴스가 생성됐습니다. 올바른 사용자가 생성 했는지 확인해주세요.\n\n' \
               f'ARN : {arn}\n' \
               f'Instance Type : {instance_type}\n' \
               f'Source IP : {source_ip}\n'
                
    # 이메일 메시지를 SNS 주제를 통해 전송합니다.
    sns.publish(
        TopicArn='arn:aws:sns:us-east-1:계정Account:email-alarm',
        Subject=email_subject,
        Message=email_message
    )

 

2, EventBridge 대상 편집

- Amazon EventBridge 콘솔 접속 후 아래와 같이 이전에 생성한 이벤트 규칙 선택 -> 편집을 클릭합니다.

편집 클릭

- 대상을 1단계에서 생성한 Lambda 함수로 변경 합니다.

위의 간단한 단계들을 거치면 완료이며, 아래는 결과 예시입니다.

Lambda 코드 수정을 통해 원하는 값들을 더하거나 뺄 수 있습니다.

 

 

사실 위의 작업은 EventBridge의 이벤트 값 추출을 위한 Lambda 코드만 작성이 문제인데, 요즘 같은 좋은 세상에선 ChatGPT와 같은 AI 서비스를 통해 간단한 코드 작성을 대신 해주기에 해볼 수 있었습니다.