Lambda + EventBridge로 RDS 수동 백업 해제를 감지하고 통지하는 구성을 만들어 봤습니다.
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Lambda + EventBridge로 RDS 수동 백업 해제를 감지하고 통지하는 구성을 만들어 봤습니다.
IAM 정책 & 역할 준비
먼저 Lambda에 연결할 IAM 정책과 역할을 준비합니다.
이메일로 전송하기 위한 SNS 권한과 로그를 보존할 CloudWatchLogs 권한을 추가합니다.
[arn:aws:sns:ap-northeast-2:xxxxxxxxxx]에는 SNS 토픽 Arn을 입력합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:ap-northeast-2:xxxxxxxxxx"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
Lambda 함수 생성 및 코드 작성
Lambda 함수는 [Python 3.13]을 사용하고 조금 전 생성한 IAM 역할을 연결합니다.
이벤트가 발생하면 EventBridge가 이를 감시하고 Lambda가 실행됩니다. Lambda에서는 발생한 이벤트 정보를 받아 사용자의 이메일로 전송합니다.
import boto3
from datetime import datetime
sns = boto3.client('sns')
SNS_TOPIC_ARN = 'arn:aws:sns:ap-northeast-2:xxxxxxxxxx'
def lambda_handler(event, context):
detail = event.get('detail', {})
req_params = detail.get('requestParameters', {})
user_identity = detail.get('userIdentity', {})
db_instance_id = req_params.get('DBInstanceIdentifier')
backup_retention = req_params.get('backupRetentionPeriod')
user_arn = user_identity.get('arn')
event_time = detail.get('eventTime', datetime.utcnow().isoformat())
event_name = detail.get('eventName')
message_lines = ["🔒 [보안 알림] RDS 백업 설정이 변경되었습니다.\n"]
if db_instance_id:
message_lines.append(f"📌 DB 인스턴스 ID: {db_instance_id}")
if event_name:
message_lines.append(f"📌 이벤트 유형: {event_name}")
if backup_retention is not None: # 0도 의미 있으므로 None 체크
message_lines.append(f"📌 백업 보존 기간: {backup_retention}일")
if event_time:
message_lines.append(f"📌 변경 시각: {event_time}")
if user_arn:
message_lines.append(f"📌 변경 사용자: {user_arn}")
message_lines.append("\n⚠️ 백업 보존 기간이 0일로 설정되면 자동 백업이 비활성화되어 데이터 복구가 어려워질 수 있습니다.")
message_lines.append("빠른 확인과 조치를 권장합니다.\n")
message_lines.append("▶ 자세한 내용은 CloudTrail 콘솔에서 확인하세요:")
message_lines.append("https://console.aws.amazon.com/cloudtrail/home#/events")
message = "\n".join(message_lines)
sns.publish(
TopicArn=SNS_TOPIC_ARN,
Subject="[보안 알림] RDS 백업 설정 변경 감지",
Message=message
)
EventBridge 규칙 생성
EventBridge 규칙은 CloudTrail에서 생성된 RDS 이벤트 중 [ModifyDBInstance]를 감지합니다. RDS의 자동 백업은 on/off 기능이 아니라 백업 기간이 0인지 혹은 그 이상인지로 백업의 유무를 결정짓기 때문에 [backupRetentionPeriod]가 [0] 일 때 이벤트를 감지하고 Lambda를 실행합니다.
{
"source": ["aws.rds"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventName": ["ModifyDBInstance"],
"requestParameters": {
"backupRetentionPeriod": [0]
}
}
}
결과 확인
RDS의 백업 보존 기간을 0으로 수정합니다.
RDS 수정이 완료되면 이메일이 도착하는 것을 확인할 수 있습니다.
이번 블로그에서는 간단한 정보만 이메일로 전송했지만, 실제로는 발생한 이벤트를 기반으로 다양한 내용을 담아 자유롭게 이메일 텍스트를 꾸밀 수 있습니다. 여러분도 이를 참고하여 상황에 맞는 알림 메시지를 만들어 보시기 바랍니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.
문의 사항은 클래스메소드 코리아로!
클래스메소드 코리아에서는 다양한 세미나 및 이벤트를 진행하고 있습니다.
진행중인 이벤트는 아래 페이지를 참고해주세요.
AWS에 대한 상담 및 클래스 메소드 멤버스에 관한 문의사항은 아래 메일로 연락주시면 감사드립니다!
Info@classmethod.kr