보안담당자의 업무 지옥 탈출기 (2)
- 개발/업무자동화
- 2026. 1. 23.
2026.01.22 - [개발/업무자동화] - 보안담당자의 업무 지옥 탈출기 (1)
보안담당자의 업무 지옥 탈출기 (1)
야근할것 같아가 ‘정신이 혼미해져서’ 자동화를 만들었다솔직히 말하면 이 글은 토할것 같은 업무량과 퇴근시간을 지키고 싶어 시작된 프로젝트다.문득 생각했다.‘나 왜 이러고 살지?’ 그
richest2yh.tistory.com
지난 글에서 왜 이걸 만들게 됐는지 설명했다. 이번에는 실제로 어떻게 구현했는지 적어본다.
결론부터 말하면, 생각보다 삽질을 많이 했다. 특히 SharePoint 필터 쿼리에서 멘탈이 좀 나갔다.
결론부터 말하자면, 생각보다 X나 어렵다.
하지만 만들고 나니 진짜 편하다.
전체 흐름 다시 정리
Power Automate 흐름은 총 4개다.
| 흐름 | 트리거 | 하는 일 |
| 01_알림발송 | Splunk 웹훅 | Teams 알림 + SharePoint 저장 + 소명메일 |
| 02_회신처리 | Forms 응답 | 매칭 → SharePoint 상태 업데이트 |
| 03_리마인더 | 매일 9시 | 3일 미회신자 리마인더 발송 |
| 04_주간리포트 | 매주 월 9시 | 현황 집계 → 메일 발송 |
하나씩 설명한다.
1. 알림발송 흐름
Splunk에서 유사도 탐지가 되면 웹훅으로 JSON을 쏜다.
Power Automate에서 이걸 받아서 처리하는데, 순서가 중요하다.

1. JSON 구문 분석 - 웹훅으로 받은 데이터 파싱
2. SharePoint 중복 체크 - 발신자+수신자 조합이 이미 있는지 확인
3. 조건 분기 - 중복이면 스킵, 화이트리스트면 스킵, 신규면 진행
4. ㅆeams 채널에 알림 - 보안팀 채널에 탐지 정보 전송
5. SharePoint에 항목 만들기 - 이력 저장
6. 소명요청 메일 발송 - 유출 사용자에게 Forms 링크 포함해서 발송
여기서 중복 체크가 핵심이다. Splunk가 10분마다 돌기 때문에 같은 메일이 여러 번 탐지될 수 있다. 발신자+수신자 조합을 키로 해서 이미 처리한 건인지 확인해야 한다.
삽질 포인트 1: SharePoint 필터 쿼리
SharePoint에서 중복 체크하려면 필터 쿼리를 써야 한다.
SenderEmail eq 'abcde@회사.com' and ReceiverEmail eq 'abcde123@naver.com'
근데 이게 한글 컬럼명으로는 안 된다.
처음에 SharePoint 리스트 만들 때 "발신자메일", "수신자메일" 이렇게 한글로 만들었다가 필터가 계속 실패했다.
에러 메시지도 제대로 안 뜨고 그냥 빈 결과만 나왔다.
구글링 한~~~~~~~참 하다가 알았다.
이걸 쓰려면 컬럼 생성 시 영어 이름으로 만들고, 나중에 표시 이름만 한글로 바꿔야 한다.
안 그러면 에러도 안 뜨고 빈 값만 나와서 멘탈 터진다.
2. 회신처리 흐름
사용자가 소명요청 메일을 받으면 Forms 링크를 클릭해서 소명서를 작성한다.
Forms 항목:
1. 수신자 메일주소 (필수)
2. 발송 목적
3. 수신자와의 관계
4. 첨부파일 내용 요약
5. 직책자 사전 승인 여부

Forms에서 응답이 제출되면 Power Automate가 트리거된다.
여기서 매칭이 중요하다. SharePoint에 저장된 탐지 건 중에서 어떤 건에 대한 소명인지 찾아야 한다.
매칭 로직:
• 발신자 = Forms 응답자 이메일 (자동 수집됨)
• 수신자 = Forms 1번 답변 (사용자가 입력)
이 두 개를 조합해서 SharePoint에서 해당 항목을 찾고, 상태를 "소명요청" → "회신완료"로 바꾼다.
삽질 포인트 2: 오타 지옥
처음에 매칭이 자꾸 실패했다.
원인은 사용자가 수신자 메일을 오타로 입력하는 거였다.
abced@naver.com을 abced999@nave.com으로 쓴다든지. 이러면 매칭이 안 되고 미처리 건으로 남는다.
해결책: 소명요청 메일 본문에 수신자 정보를 명시하고,
"아래 수신자 메일주소를 복사해서 붙여넣기 해주세요"라고 안내문을 넣었다.
완벽한 해결은 아니지만 오타율이 확 줄었다.

3. 리마인더 흐름
매일 오전 9시에 돌아간다.
1. SharePoint에서 상태가 "소명요청"인 항목 조회
2. 요청일로부터 3일 지났는지 계산
3. 3일 지났으면 리마인더 메일 발송
4. 상태를 "리마인더발송"으로 변경

addDays(triggerOutputs()?['headers']['x-ms-file-last-modified'], 3)
여기서 날짜 계산할 때 addDays 함수를 썼다.
UTC 기준이라 한국 시간이랑 좀 차이가 있는데, 3일 기준이라 크게 문제는 없었다.
4. 주간리포트 흐름
매주 월요일 오전 9시에 돌아간다.
1. SharePoint 전체 항목 조회
2. HTML 테이블로 변환
3. 보안팀 메일로 발송
테이블 필드: 이름, 부서, 발신메일, 수신메일, 상태

처음에는 전체 필드를 다 넣었는데 너무 길어서 핵심만 남겼다.
상세 내용은 SharePoint 가서 보면 되니까.
예외처리: 화이트리스트
어떤 사용자는 업무상 자기 개인 메일로 자료를 보내야 하는 경우가 있다.
예를 들어 영업팀에서 거래처 미팅 자료를 본인 폰으로 보는 경우.
이런 건 소명 확인 후 정상으로 판단되면 화이트리스트에 등록한다.
SharePoint에 "Whitelist" 컬럼을 만들어서 "예"로 체크하면 다음부터 알림이 안 간다.
중복 체크할 때 화이트리스트 여부도 같이 확인하도록 했다.
명명 규칙
Power Automate 흐름이 많아지면 관리가 힘들다. 나중에 뭐가 뭔지 모르게 된다.
그래서 명명 규칙을 정했다.
내부유출_mail_유사도_01_01_알림발송
내부유출_mail_유사도_01_02_회신처리
내부유출_mail_유사도_01_03_리마인더
내부유출_mail_유사도_01_04_주간리포트
프로젝트_채널_탐지유형_버전_순번_기능명
이렇게 하면 나중에 다른 탐지 시나리오 추가할 때도 체계적으로 관리할 수 있다.
보안 자동화라고 해서 거창하게 개발할 필요 없다.
GUI 툴이 다 해준다. 코딩 몰라도 된다.
중요한 건: 탐지보다 후속 조치.
그걸 사람이 수작업으로 하면 언제나 누락되고, 결국 문제가 터진다.
이 글이 비슷한 고민하고 있는 사람들에게 작은 힌트가 되면 좋겠다.
'개발 > 업무자동화' 카테고리의 다른 글
| 보안담당자의 업무 지옥 탈출기 (1) (3) | 2026.01.22 |
|---|---|
| Teams ChatGPT bot (0) | 2025.02.05 |
| Teams Bot 만들기 (알림봇) (1) | 2024.12.18 |