• 프로필사진
    Home
  • Portfolio
  • github [#ffffff] Created with Sketch.
    Github
  • linkedin
    Linkedin
  • Setting
  • Posting
    • 분류 전체보기 (105)
      • Aws (96)
      • Backend (3)
      • Extension (1)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • IAM USER로 로그인 하면 CloudWatch에 Log 기록하기
        2024년 12월 27일
        • wngnl05
        • 작성자
        • 2024.12.27.:53

         

        CloudTrail 만들어줍니다.

        CloudTrail에서 Cloudwatch LogGroup을 만들어서 연결해주고

        Cloudwatch LogGroup을 트리거로 한 Lambda함수를 생성해줍니다.

         

        Lambda에서 LOG_GROUP_NAME, LOG_STREAM_NAME 변수에 IAM USER 로그인

        로그를 저장할 로그 그룹 이름과 로그 스트림 이름을 지정해줍니다.

         

        로그인 하기 전에 LOG_GROUP_NAME 의 이름을 가진 로그 그룹을 미리 만들어야 합니다.

         

        Lambda Code    Python

        더보기
        import boto3
        import base64
        import zlib
        import json
        from datetime import datetime
        
        def lambda_handler(event, context):
            # CloudWatch Logs 그룹 및 스트림 설정
            LOG_GROUP_NAME = '<로그 그룹 이름>'
            LOG_STREAM_NAME = '<로그 스트림 이름>'
            
            logs_client = boto3.client('logs')
            try:  # 로그 스트림이 없다면 만들기
                logs_client.create_log_stream(logGroupName=LOG_GROUP_NAME, logStreamName=LOG_STREAM_NAME)
            except logs_client.exceptions.ResourceAlreadyExistsException:
                pass
            
            event_data = event['awslogs']['data']  # 이벤트 데이터 추출
            decoded_data = base64.b64decode(event_data)  # base64 디코딩
            decompressed_data = zlib.decompress(decoded_data, 16 + zlib.MAX_WBITS)  # 압축 해제
            log_data = json.loads(decompressed_data)  # JSON 파싱
            log_events = log_data['logEvents']  # 로그 이벤트 추출
            
            LOG_EVENT = []
            for log_event in log_events:
                log_message = json.loads(log_event['message'])
                if log_message['eventName'] == 'ConsoleLogin' and log_message['userIdentity']['type'] == 'IAMUser':  # IAM USER 로그인 이벤트 확인 시
                    # eventTime을 정수형 UNIX 타임스탬프로 변환
                    timestamp = int(datetime.strptime(log_message['eventTime'], '%Y-%m-%dT%H:%M:%SZ').timestamp() * 1000)
                    # 로그 스트림에 전송할 메시지
                    message = json.dumps({
                        'USER': f"{log_message['userIdentity']['userName']} has logged in!"
                    })
                    LOG_EVENT.append({'timestamp': timestamp, 'message': message})
            
            if LOG_EVENT:  # 로그 스트림에 메시지 보내기
                logs_client.put_log_events(
                    logGroupName=LOG_GROUP_NAME,
                    logStreamName=LOG_STREAM_NAME,
                    logEvents=LOG_EVENT
                )
        
            return {'statusCode': 200, 'body': json.dumps('Processed successfully')}

         

         

        저작자표시 비영리 변경금지

        'Aws' 카테고리의 다른 글

        Eks Bottlerocket 노드그룹 만들기  (0) 2024.12.27
        Vpc Flowlog 역활 만들기  (0) 2024.12.27
        VPC안의 Lambda에게 인터넷 연결해주기  (0) 2024.12.27
        MySQL 명령어 정리  (0) 2024.12.27
        Eks Velero 백업 & 복원 하기  (0) 2024.12.27
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바