Aws

SSM으로 EC2 접근 시 CloudWatch에 로그 기록하기

wngnl05 2024. 12. 27. 15:15

로그 스트림 생성하기

aws logs create-log-stream \
  --log-group-name <로그 그룹 이름> \
  --log-stream-name <로그 스트림 이름>

ssm_login.sh  

#!/bin/bash
SESSION_ID=$(aws ssm describe-sessions --state Active --query 'Sessions[*]' --output json | jq -r 'max_by(.StartDate) | .SessionId')
LOG_ENTRY=$(jq -n \
  --arg eventTime "$(date '+%Y-%m-%dT%H:%M:%SZ')" \
  --arg eventSource "ssm.amazonaws.com" \
  --arg state "Active" \
  --arg accountId "654654489681" \
  --arg sessionId "$SESSION_ID" \
  '{eventTime: $eventTime, eventSource: $eventSource, state: $state, accountId: $accountId, sessionId: $sessionId}')

TIMESTAMP=$(date +%s%3N)
LOG_EVENTS_JSON=$(jq -n \
  --argjson timestamp $TIMESTAMP \
  --arg message "$LOG_ENTRY" \
  '[{timestamp: $timestamp, message: $message}]')

LOG_GROUP_NAME=<로그 그룹 이름>
LOG_STREAM_NAME=<로그 스트림 이름>
aws logs put-log-events --log-group-name $LOG_GROUP_NAME --log-stream-name $LOG_STREAM_NAME --log-events "$LOG_EVENTS_JSON"

/usr/bin 경로로 이동

sudo mv ./ssm_login.sh /usr/bin/

 

"기본 설정" 클릭

 

편집을 누르고 Linux shell profile 에 아래 명령어를 작성해줍니다.

sh ssm_login.sh > /dev/null 2>&1

 

이제 SSM으로 접근 시 sh 파일이 실행되는 것을 확인 할 수 있습니다.

 

대시보드

SSM Access : < 최근 접속 횟수 >

SSM Access : ${SUM}

Log Insight

 

 

fields @timestamp, @message, @logStream, @log
| sort @timestamp desc
| display eventTime, eventSource, state, accountId, sessionId