AWS CloudTrail에서 보안 그룹 변경을 감지하고 Lambda와 EventBridge를 이용하여 이메일 통지를 해 봤습니다.

AWS CloudTrail에서 보안 그룹 변경을 감지하고 Lambda와 EventBridge를 이용하여 이메일 통지를 해 봤습니다.

AWS CloudTrail에서 보안 그룹 변경을 감지하고 Lambda와 EventBridge를 이용하여 이메일 통지를 해 봤습니다.
Clock Icon2025.06.16

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 AWS CloudTrail에서 보안 그룹 변경을 감지하고 Lambda와 EventBridge를 이용하여 이메일 통지를 해 봤습니다.

IAM 정책 및 역할 준비

먼저 Lambda에서 SNS를 이용하여 이메일을 통지하기 위해 필요한 역할을 생성할 필요가 있습니다.

[arn:aws:sns:ap-northeast-2:xxxxxxxxx] 에는 Amazon SNS에서 생성한 토픽 Arn을 입력합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "arn:aws:sns:ap-northeast-2:xxxxxxxxx"
        }
    ]
}

Lambda 함수 코드 작성

정책과 역할을 생성했다면, Lambda 함수를 생성하고 코드를 작성합시다.

Lambda 함수의 런타임은 [Python 3.13]입니다.

[arn:aws:sns:ap-northeast-2:xxxxxxxxxxx] 항목에는 SNS 토픽의 Arn을 입력합니다.

import json
import boto3

sns_topic_arn = 'arn:aws:sns:ap-northeast-2:xxxxxxxxxxx'
sns = boto3.client('sns')

def lambda_handler(event, context):
    detail = event['detail']
    event_name = detail['eventName']
    user = detail['userIdentity']['arn']
    sg_id = detail.get('requestParameters', {}).get('groupId', 'N/A')

    message = f"""
    🚨 보안 그룹 변경 탐지
    - 이벤트: {event_name}
    - 사용자: {user}
    - 보안 그룹 ID: {sg_id}
    """

    sns.publish(
        TopicArn=sns_topic_arn,
        Subject='[알림] 보안 그룹 변경 감지',
        Message=message
    )

    return {'statusCode': 200, 'body': '알림 전송 완료'}

EventBridge 규칙 생성

이제 마지막으로 EventBridge 규칙을 생성합시다.

{
  "source": ["aws.ec2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventName": [
      "AuthorizeSecurityGroupIngress",
      "RevokeSecurityGroupIngress",
      "AuthorizeSecurityGroupEgress",
      "RevokeSecurityGroupEgress",
      "CreateSecurityGroup",
      "DeleteSecurityGroup"
    ]
  }
}

추가한 각 항목에 대한 설명은 아래 표를 통해 확인할 수 있습니다.

이벤트 이름 설명
AuthorizeSecurityGroupIngress 인바운드 규칙 추가
RevokeSecurityGroupIngress 인바운드 규칙 제거
AuthorizeSecurityGroupEgress 아웃바운드 규칙 추가
RevokeSecurityGroupEgress 아웃바운드 규칙 제거
CreateSecurityGroup 보안 그룹 생성
DeleteSecurityGroup 보안 그룹 삭제

결과 확인

보안 그룹을 생성하거나 규칙을 추가, 제거, 변경했을 경우 아래와 같이 이메일로 통지가 오는 것을 확인할 수 있습니다. 이메일 내용에는 이벤트가 발생한 보안 그룹과 발생한 이벤트, 조작한 사용자를 확인할 수 있습니다.

jw-sgtestcloud-1

문의 사항은 클래스메소드 코리아로!

클래스메소드 코리아에서는 다양한 세미나 및 이벤트를 진행하고 있습니다.
진행중인 이벤트는 아래 페이지를 참고해주세요.

https://classmethod.kr/board/library

AWS에 대한 상담 및 클래스 메소드 멤버스에 관한 문의사항은 아래 메일로 연락주시면 감사드립니다!
Info@classmethod.kr

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.