BESPIN Tech Blog
  • Home
  • Tech
    • CSP

      AWS

      GCP

      NCP

      Cloud

      Migration

      LZ, Control Tower

      Backup

      Monitoring

      Container

      Infra

      OS

      Middleware

      Data

      RDB

      Big Data Platform

      Application

      CI/CD

      BESPICK 구독하기 ㅣ 1668-1280

  • Trend
  • IT
최신 리포트 다운로드 지금 바로 문의하기
BESPIN Tech Blog
  • Home
  • Tech
    • CSP

      AWS

      GCP

      NCP

      Cloud

      Migration

      LZ, Control Tower

      Backup

      Monitoring

      Container

      Infra

      OS

      Middleware

      Data

      RDB

      Big Data Platform

      Application

      CI/CD

      BESPICK 구독하기 ㅣ 1668-1280

  • Trend
  • IT
최신 리포트 다운로드 지금 바로 문의하기
BESPIN Tech Blog
BESPIN Tech Blog
  • Tech
    • CSP
      • AWS
      • GCP
      • NCP
    • Cloud
      • Migration
      • LZ, Control Tower
      • Backup
      • Monitoring
      • Container
    • Infra
      • OS
      • Middleware
    • Data
      • RDB
      • Big Data Platform
    • Application
      • CI/CD
  • Trend
  • IT
  • Contact US
AWS

AWS Console Login 시 Lambda를 이용하여 Slack 으로 알람 발생 구성

by 민우 서 2025년 05월 26일
2025년 05월 26일
28

안녕하세요 오늘은 BESPIN GLOBAL SRE실 정민아님이 작성해주신 ‘AWS Console Login 시 Lambda를 이용하여 Slack 으로 알람 발생 구성’ 대해 소개해드리도록 하겠습니다.

목차

  1. 설명
  2. 구성
  3. 정상 동작 확인

1. 설명

1) AWS Console Login 시 Slack을 통하여 알람을 받는 방법에 대해서 작성하였습니다.
2) 필수 조건

  • CloudTrail 로깅 활성화가 되어 있어야만, 사용자가 콘솔 로그인 시 해당 로그를 확인하여 Slack으로 알람이 발생되도록 할 수 있습니다.
  • 콘솔을 로그인하는 리전에 따라서 CloudTrail 이벤트에 기록되므로 이벤트 기록이 있는 리전별로 람다 함수를 생성하여야 합니다.
    ※ 구성된 리전 외 다른 리전으로 로그인할 경우 슬랙으로 알람이 발생되지 않습니다

3) 로직

  • User: Login -> CloudTrail logging -> CloudWatch EventBridge -> Lambda -> Slack

2. 구성

1) CloudTrail Logging 활성화

  • AWS CloudTrail > Trail > Create Trail
  • Trail log bucket and folder: CloudTrail 로깅이 적재될 S3 Bucket을 선택합니다

2) Lambda Function 생성

  • Region: us-east-1 (앞서 확인한 부분과 동일하게 구성된 리전 외 다른 리전으로 로그인 할 경우 슬랙으로 알람이 발생되지 않습니다.)
  • Runtime: Python 3.8
  • 환경 변수 설정 (슬랙 채널 생성 및 Web Hook URL 이 생성된 전제 조건하에 진행)
    • Key: HOOK_URL / Value: Slack 채널의 웹 훅 URL
    • Key: slackChannel / Value: Slack 채널명
  • 코드 업데이트
import boto3
import json
import logging
import os
import time
from datetime import datetime
from datetime import timedelta
from base64 import b64decode
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
HOOK_URL = os.environ['HOOK_URL']
SLACK_CHANNEL = os.environ['slackChannel']
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
 
 logger.info("Event: " + str(event))
 data = event['detail']
 
 accountType = data['userIdentity']['type']
 
 # Root 인지 IAMUser 인지 구분
 if accountType == "Root":
 accountUserName = "Root"
 elif accountType == "IAMUser":
 accountUserName = data['userIdentity']['userName']
 else:
 accountUserName = " "
 
 # KST 시간 변환
 state_login_time = data['eventTime'][:19]
 kst_login_time = datetime.strptime(state_login_time, '%Y-%m-%dT%H:%M:%S') - timedelta(hours=-9) #KST 시
간 변환
 
 # Slack Message Title
 title = "[%s]%s AWS Console Login" %(accountType, accountUserName)
 
 # sourceIPAddress
 sourceIPAddress = data['sourceIPAddress']
 
 # MFA 사용 유무
 usedMFA = data['additionalEventData']['MFAUsed']
 
 # 접속 성공 유무
 loginStatusCheck = data['responseElements']['ConsoleLogin']
 
 
 # 성공 실패 색지정
 if loginStatusCheck == "Success" :
 sendColor = "#36A64F"
 elif loginStatusCheck == "Fail" :
 sendColor = "#FF0000"
 elif loginStatusCheck == "Failure" :
 sendColor = "#FF0000" 
 else :
 sendColor = "#A4AAA7"
 
 sendMessage = "*접속시간*\n%s\n*접속 IPAddress*\n%s\n*Console Login 결과*\n%s\n*MFA 사용유무
*\n%s" % ( kst_login_time, sourceIPAddress, loginStatusCheck, usedMFA)
 
 slack_message = {
 'channel': SLACK_CHANNEL,
 'attachments': [
 {
 "color": sendColor,
 "title": title,
 "text": sendMessage # "*접속시간*\n%s\n*접속 IPAddress*\n%s\n*Console Login 결과*\n%s\n*MFA 
사용유무*\n%s" % ( kst_login_time, sourceIPAddress, loginStatusCheck, usedMFA)
 }
 ]
 }
 req = Request(HOOK_URL, json.dumps(slack_message).encode('utf-8'))
 try:
 response = urlopen(req)
 response.read()
 logger.info("Message posted")
 except HTTPError as e:
 logger.error("Request failed: %d %s", e.code, e.reason)
 except URLError as e:
 logger.error("Server connection failed: %s", e.reason)

관련하여 해당 로그는 CloudWatch LogGroup 내 출력되는 로그를 확인할 수 있으며 커스텀하여 원하는 내용만을 Slack으로 알람 받을 수 있도록 업데이트 하시면 됩니다.

3) CloudWatch EventBridge 생성

  • AWS CloudWatch > Event > Rule 생성
  • Event Pattern
{
 "source": [
 "aws.signin"
 ],
 "detail-type": [
 "AWS Console Sign In via CloudTrail"
 ]
}
  • Target: 생성한 Lambda Function

3. 정상 동작 확인

  • AWS Console 로그인 시 아래와 같은 형태로 알람 발생이 됩니다.

여기까지 ‘AWS Console Login 시 Lambda를 이용하여 Slack 으로 알람 발생 구성’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다. 

Written by 정 민아 / SRE실

BESPIN GLOBAL

관련

awsslackLambdaAWS Console Login

HOT Trend

Recent Posts

  • 딜로이트도, 맥킨지도, 베스핀글로벌도: AI 에이전트로 일 바꾸는 시대

    2025년 07월 04일 클라우드베스핀글로벌clouddata데이터AI인공지능HelpNow AIbespinglobalAI에이전트helpnow업무자동화딜로이트
  • ⚔️데이터센터에서 시작된 전쟁? 요즘 뜨는 AIDC 개념부터 트렌드까지!

    2025년 06월 27일 클라우드clouddata데이터AI데이터센터클라우드 데이터센터bespinglobalAIDCAI 인프라베스핀글로벌
  • 구글부터 엔비디아까지, 빅테크 기업들의 AI 전략 최신본📖

    2025년 06월 20일 cloud베스핀글로벌클라우드data데이터AI구글마이크로소프트엔비디아AI에이전트google I/ONVIDIA GTC 2025Microsoft build 2025
  • AI를 연결한다고? 업계가 주목하는 ‘MCP’ 알아보기🔍

    2025년 06월 13일 베스핀글로벌클라우드cloudAIMCP
  • [WhaTap] RDS Failover/Reboot 관제 2 – RDS Failover

    2025년 05월 30일 RDSRDS FailoverRebootFailoverbespin global

베스핀글로벌은 모든 기업의 AI 혁신을 실현하기 위해, 세상에서 가장 혁신적이고 자동화된 AI 서비스와 솔루션을 만들어갑니다.
상호 : 베스핀글로벌 주식회사 ㅣ 대표자명 : 김써니, 허양호 ㅣ 사업자등록증번호 : 638-87-00223 ㅣ 통신판매번호 : 2019-서울서초-0347 ㅣ 대표전화 : 1668-1280
사업장주소지 : 서울특별시 서초구 강남대로 327, 13,14,15,16층(서초동,대륭서초타워) ㅣ 이메일 : info@bespinglobal.com ㅣ 개인정보 처리방침 ㅣ 개인정보 처리방침 안내

© 2026 BESPIN GLOBAL, All Rights Reserved.

BESPINGLOBAL
패밀리 사이트
China MEA SEA US

BESPIN Tech Blog
  • Home
  • Tech
    • CSP

      AWS

      GCP

      NCP

      Cloud

      Migration

      LZ, Control Tower

      Backup

      Monitoring

      Container

      Infra

      OS

      Middleware

      Data

      RDB

      Big Data Platform

      Application

      CI/CD

      BESPICK 구독하기 ㅣ 1668-1280

  • Trend
  • IT