root@syslogserver:/etc# cat /etc/group | grep sudo
sudo:x:27:logmgmt,ayaan <- 해당 부분에 허용할 그룹을 추가해주면 됩니다.
root@syslogserver:/etc#

 

'기술 노트 > ubuntu' 카테고리의 다른 글

telegraf 설치하기  (1) 2024.03.15
InfluxDB 2.x 설치하기  (1) 2024.03.15
snmp-exporter에 MIB 등록하기  (0) 2024.02.07
elastalert2 rules 설정  (0) 2024.01.15
elastalert2 설치하기  (0) 2024.01.15

ISMS 인증 심사원 교육 시 확인 인증조항별 키워드 자료 입니다.

2개의 교육을 받아 교육별 키워드를 공유합니다.

 

해당 키워드 공유에 문제가 발생할 경우 삭제하겠습니다.

 

인증 조항 A 교육 (24년 진행) B 교육(22년 진행)
1 관리체계 수립 및 운영    
1.1 관리체계 기반 마련    
1.1.1 경영진의 참여 "보고" 및 의사결정체계 미흡 경영진 역할 및 책임 문서화, 보고체계
1.1.2 최고책임자의 지정 "임원급" 지정, 5조/5천억 겸직 금지, 180일내 과기부 신고 CISO, CPO 공식지정, 자격요건
1.1.3 조직 구성 위원회, 실무조직, 정보보호팀 구성 및 운영 실무조직, 정보보호위원회, 정보보호실무협의체
1.1.4 범위 설정 범위설정(자산누락), 인증범위 내 모든 자산(서비스) 핵심자산, 예외사항 근거 관리, 문서화
1.1.5 정책 수립 정책승인, 임직원 공유 및 열람 정책, 시행문서 승인(CEO, CISO), 임직원 전달
1.1.6 자원 할당 전문성 있는 인력, 예산, 자원할당 인력(전문성) 확보, 예산, 인력 지원, 계획, 결과 분석 평가
1.2 위험관리    
1.2.1 정보자산식별 자산 분류기준, 모든 자산식별, 중요도 산정 기준, 식별, 보안등급, 정기적 최신화
1.2.2 현황 및 흐름분석 흐름도 오류/누락, 문서현행화 정보서비스흐름도, 개인정보흐름도, 최신화
1.2.3 위험평가 매년 1회 이상 수행, CISO에 결재, 관리/법적/기술적측면으로 위험평가 수행 위험평가 방법론, 계획, 연1회, DOA, 경영진 승인
1.2.4 보호대책 선정 위험이행계획 수립, CISO 보고 위험처리(회피, 전가, 감소, 수용), 이행계획
1.3 관리체계 운영    
1.3.1 보호대책 구현 CISO보고, 보호대책을 구현, 잔여위험 관리, 운영명세서 증적 불일치 보호대책 구현 정확성, 효과성, 구체성 진척 보고
1.3.2 보호대책 공유 정보보호대책에 대하여 실제 담당부서에 공유/교육 보호대책 담당자, 보호대책 공유 & 교육
1.3.3 운영현황 관리 상시적 운영현황 활동 (월간, 분기보고 등), 문서화 및 누락 (개인)정보보호 활동 문서화, 경영진 확인
1.4 관리체계 점검 및 개선    
1.4.1 법적요구사항 준수 검토 법률 개정을 검토하지 않고 적용하지 않음 (1년 1회이상) 법규 최신성, 연1회 검토
1.4.2 관리체계 점검 1년에 1회이상, 내부감사의 독립성이 위배된 경우, 일부만 점검함 인력(독립성, 전문성), 연1회 경영진 보고
1.4.3 관리체계 개선 보안감사 결과에 대한 보고, 개선, 재발방지 대책, KPI 지표 관리 근본원인, 재발방지 기준 절차
2 보호대책 요구사항    
2.1 정책, 조직, 자산관리    
2.1.1 정책의 유지관리 정책의 일관성 미흡, 정책을 연1회이상 개정하지 않음 타당성 검토, 환경 변화 제개정, 이해관계자 검토, 이력관리
2.1.2 조직의 유지관리 CISO, CPO, 정보보호책임자/담당자, 개인정보담당자 역할정의, 활동평가 KPI 및 인사에 반영 담당자 R&R, 평가(MBO, KPI), 의사소통체계(주간보고, 게시판)
2.1.3 정보자산 관리 보안등급 부여, 담당자/책임자 지정, 자산관리대장 현행화 보안등급 취급절차, 책임자 & 관리자
2.2 인적보안    
2.2.1 주요직무자 지정 및 관리 (공식지정) 주요직무자, 개인정보취급자 명단(현행화) 기준 정의, 지정, 최신화, 개인정보취급자 목록, 최소화
2.2.2 직무분리 직무분리를 수행할 수 없을 때는 관리자 승인과 추가 보완대책 필요 직무 분리 기준, 보완통제(상호검토, 상위관리자 승인, 개인계정, 로그감사)
2.2.3 보안서약 보안서약서 누락, 보안서약서 항목 누락(책임), 보안서약서 보관 채용, 퇴직, 외부자, 서약서 보관
2.2.4 인식제고 및 교육 훈련 교육계획 수립, 직무별 차등교육, 미이수자 추가교육, 설문조사 후 내년에 반영 교육계획, 승인, 연1회 수행, 직무자 별도교육, 적정성 평가
2.2.5 퇴직 및 직무변경 관리 퇴직 시 사용자 계정 미삭제, 접근권한 미회수, 퇴사 시 보안서약서 (손해배상) 인사변경 공유, 자산 반납 & 권한 회수 & 결과 확인
2.2.6 보안 위반 시 조치 보안 위배자 징계 미수행, 내부 정보보호 규정에 보안 위배자 규정이 없음 처벌규정 수립, 적발 시 조치
2.3 외부자 보안    
2.3.1 외부자 현행 관리 위탁업체 현행화, 재위탁 업체 현행화, 외부 위탁 시 위험평가 수행 위탁 업무, 시설, 서비스 식별, 위험 파악, 보호대책 마련
2.3.2 외부자 계약 시 보안 표준 위수탁 계약서 사용 위탁업체 역량 평가, 계약서(보안요건, 개발요건)
2.3.3 외부자 보안 이행 관리 수탁사 보안점검 및 교육 외부자 점검&감사, 개선계획, 재위탁 시 승인
2.3.4 외부자 계약 변경 및 만료시 보안 보안서약서, 개인정보 파기, 계정삭제 및 권한 회수 외부자 자산, 계정, 권한 회수, 서약서 징구, 중요정보 파기
2.4 물리적 보안    
2.4.1 보호구역 지정 보호구역 지정과 표시판 부착 보호구역 지정 기준(통제, 제한, 접견), 보호대책
2.4.2 출입통제 출입기록 관리 출입 통제 절차, 출입 기록 점검
2.4.3 정보시스템 보호 시스템 물리적 배치도, 케이블 정리, 전력 이중화 특성 고려 배치, 배치도(서버, 랙), 케이블(전력, 통신)
2.4.4 보호설비 운영 운영 점검표 보호설비(항온항습, 화재감지, 소화, 누수, UPS, 발전기, 이중전원), IDC 계약서 & 검토
2.4.5 보호구역 내 작업 보호구역 내 작업 승인내역 및 작업 내역, 작업내역 점검 보호구역 내 작업신청, 작업기록 검토
2.4.6 반출입 기기 통제 모바일 기기 반출입 통제 반출입기기 통제절차(서버, 모바일, 저장매체/보안스티커, 보안SW설치), 반출입 이력 점검
2.4.7 업무환경 보안 화면보호기, 패스워드, 백신 업데이트 출력물 정리, 공용 PC 보안대책 시설(문서고), 기기(복합기, 파일서버), 개인 업무환경(PC, 책상) 보호대책, 검토
2.5 인증 및 권한관리    
2.5.1 사용자 계정 관리 계정부여 이력, 과도한 권한, 공식적인 승인 사용자 계정 발급 절차(등록, 변경, 삭제), 최소권한, 계정책임(본인)
2.5.2 사용자 식별 1인1ID, 공유계정 승인 이력, 외부업체 계정 관리, 디폴트 계정 변경 유일 식별자, 추측 식별자 제한, 동일식별자 타당성, 보완대책, 책임자 승인
2.5.3 사용자 인증 인터넷을 통한 접근 2-Factor 인증, 로그인 실패관리 인증 절차(로그인 횟수제한, 불법 로그인 시도 경고), 외부 개처시 안전 인증&접속수단
2.5.4 비밀번호 관리 비밀번호 작성규칙, 변경주기, 초기 비밀번호 변경 비밀번호 관리 절차, 작성규칙(사용자, 이용자)
2.5.5 특수계정 및 권한관리 특수계정 승인, 목록 특수계정 사용자 정기적 검토 특수권한 최소인원, 공식 승인, 별도 목록화
2.5.6 접근권한 검토 접근권한 검토(정기적) 수행, 접근권한 검토 후에 조치 계정 및 접근권한 변경 이력 남김, 검토기준(주체, 방법, 주기) 수립 및 이행, 문제점 조치
2.6 접근통제    
2.6.1 네트워크 접근 NAT 사용, 네트워크 접근제어, 업무망과 내부망 관리, 네트워크 접근통제 내부망 인가 사용자 접근, 영역 분리 및 접근통제, IP 주소 기준(사설 IP), 원거리 구간 보호대책
2.6.2 정보시스템 접근 계정승인, IP제한, 세션타임아웃, 서버접근제어, ssh 및 sftp 공용계정 제한 서버, NW, 보안시스템 OS 접근 통제, 세션타임아웃, 불필요서비스 제거, 주요서비스 독립서버
2.6.3 응용프로그램 접근 안전한 인증수단(인터넷 접근시), 세션 타임아웃, 동시접속 차단, 개인정보 다운로드, like 조건, 마스킹 처리 응용 접근권한 차등 부여, 정보 노출 최소화, 세션타임아웃, 동시세션 제한, 관리자페이지 통제
2.6.4 데이터베이스 접근 DB 접근경로, DB 공유계정, DB 사용자계정, DBA 권한부여, DB 연결 접속관리, 임시 테이블에 개인정보 저장 데이터베이스 테이블 목록 식별, 접근통제(응용프로그램, 서버, 사용자)
2.6.5 무선 네트워크 접근 업무망과 고객 무선망 분리, 안전하지 않는 암호화, 패스워드 설정 무선 네트워크 보호대책(인증, 암호화), 사용신청 및 해지절차, 비인가 무선 네트워크 보호대책
2.6.6 원격접근 통제 원격(재택) 접근 시에 VPN(2-Factor) 인증 사용, 원격접근 계정관리, 단말기 백신 설치 원칙금지, 보완대책(승인, 특정 단말, 허용범위, 기간 한정), 보호대책, 단말기 지정, 임의조작 금지
2.6.7 인터넷 접속 통제 유해사이트 차단, 인터넷(망분리) 차단, 서버내에서 인터넷 연결 차단 주요 직무자, 취급 단말기, 주요 정보시스템(DB서버 등) 인터넷 접속통제, 망분리 대상 식별, 적용
2.7 암호화 적용    
2.7.1 암호정책 적용 법적 암호화대상에 대한 암호화 수행, 안전한 암호화 알고리즘 암호정책(대상, 강도, 사용) 수립, 저장, 전송, 전달 시 암호화
2.7.2 암호키 관리 암호키 관리 절차, 암호키 관리 대장, 암호키 접근을 통제 암호키 관리절차(생성, 이용, 변경, 파기), 복구방안(보관), 암호키 접근권한 최소화
2.8 정보시스템 도입 및 개발보안   도입 시 타당성 검토 및 인수절차, 보안요구사항 정의, 시큐어코딩 표준
2.8.1 보안 요구사항 정의 보안 요구사항 정의  
2.8.2 보안 요구사항 검토 및 시험 항목 누락없이 보안 요구사항 시험, 개인정보영향평가, 시스템 도입 시에 보안성 검토 검토기준(법 요건, 보안 요건), 코딩 취약점 점검, 개선조치, 공공기관 개인정보영향평가 수행
2.8.3 시험과 운영환경 분리 개발환경과 운영환경 분리, 분리가 어려우면 상호검토 수행 개발 및 시험과 운영시스템 분리, 어려울 경우 보안대책(상호검토, 변경승인, 승급자, 백업)
2.8.4 시험 데이터 보안 개발환경과 운영환경 분리, 분리가 어려우면 상호검토 수행 운영데이터 사용 제한, 불가피 사용 시 보완통제(책임자, 모니터링, 시험 후 삭제)
2.8.5 소스 프로그램 관리 형상관리 소스프로그램 백업, 접근권한 관리 소스 접근통제 절차, 운영환경 아닌 곳 안전 보관, 변경이력 관리
2.8.6 운영환경 이관 배포담당자와 배포절차 마련, 이관 시 불필요한 파일도 배포됨, 관리자 승인 후 배포 운영환경 이관 통제 절차로 실행, 문제 대응 방안 마련, 필요한 파일만 설치
2.9 시스템 서비스 운영 관리    
2.9.1 변경 관리 개발환경과 운영환경 분리, 분리가 어려우면 상호검토 수행 정보자산 변경 절차, 변경 수행 전 영향 분석
2.9.2 성능 및 장애관리 성능, 용량, 장애관리, 부적절한 장애조치 내역, 시스템 용량 산정 성능 및 용량 모니터링 절차, 초과 시 대응절차, 장애 인지, 대응절차, 장애조치 기록, 재발방지대책
2.9.3 백업 및 복구관리 백업대상, 주기, 방법, 복구 테스트 실시 백업 및 복구절차(대상, 주기, 방법, 절차) 수립, 복구테스트, 중요정보 저장 백업매체 소산
2.9.4 로그 및 접속기록 관리 접속기록 서버 용량, 법적 보유기간 및 항목 로그관리 절차, 생성 보관, 별도 저장장치 백업, 로그 접근권한 최소화, 개처시 접속기록 법 준수
2.9.5 로그 및 집속기록 점검 접속로그 매월 1회 점검(보고), 이상행위 및 다운로드 검토, 과다 개인정보 조회 검토 로그 검토기준(비인가 접속, 과다조회) 수립, 문제 발생 시 사후조치, 주기적 점검
2.9.6 시간 동기화 서버 시간 동기화 설정 (클라우드는 시간 동기화 관리가 필요 없음) 정보시스템 표준시간 동기화, 주기적 점검
2.9.7 정보자산의 재사용 및 폐기 폐기 관리대장, 완전파기 재사용 및 폐기 절차 수립, 복구 불가방법, 폐기이력 및 증적, 폐기절차 계약서, 교체 복구시 대책
2.10 시스템 및 서비스 보안관리    
2.10.1 보안시스템 운영 방화벽 정책 과다 허용, 정책 공식 승인, 방화벽 정책 변경 이력 관리 보안시스템 운영절차, 접근인원 최소화, 정책 변경 절차, 예외정책 최소화, 정책 타당성 검토, 설치
2.10.2 클라우드 보안 클라우드 콘솔 사용자 관리, 클라우드 보안설정, 승인 후 접근제어 등록 CSP R&R 계약서 반영, 클라우드 보안 통제 정책 수립ㆍ이행, 관리자 권한 보호대책, 정기적 검토
2.10.3 공개서버 보안   공개서버 보호대책, DMZ에 설치, 보안시스템 통해 보호, 게시 저장 시 절차, 노출 확인 및 차단
2.10.4 전자거래 및 핀테크 보안 안전한 결제, 보안성 검토, 침입차단 및 탐지시스템 운영 전자거래 및 핀테크 보호대책, 연계 시 송수신 정보 보호대책 수립, 안전성 점검
2.10.5 정보전송 보안 타 조직관 연계 시 전송보안, 보안성 검토 외부에 개인정보 전송 정책 수립, 조직 간 개인정보 상호교환 시 협약체결 등 보호대책
2.10.6 업무용 단말기기 보안 업무용 모바일 단말 승인, 업무용 모바일 단말 분실대책, 업무용 단말기 보호대책, 업무용 단말 취약점 조치 업무용 단말기 접근통제 정책, 공유 시 DLP 정책, 분실 시 DLP 대책, 주기적 점검
2.10.7 보조저장매체 관리 보조저장장치 현행화, USB사용 승인 내역, 안전한 장소에 보관, USB 사용 기록 관리 보조저장매체 취급 정책, 관리 실태 주기적 점검, 통제구역 사용 제한, 악성코드 및 DLP 대책, 보관
2.10.8 패치관리 EOS 대응 계획, 프로그램 패치 패치관리 정책, 패치현황 관리, 불가 시 보완대책, 인터넷 패치 제한, PMS 보호대책
2.10.9 악성코드 통제 백신 업데이트, 실시간 검사를 수행 악성코드 보호대책, 예방탐지 활동, 보안프로그램 최신상태 유지, 감염 시 대응절차
2.11 사고 예방 및 대응    
2.11.1 사고 예방 및 대응 체계 구축 침해대응절차, 조직, 비상연락망, 지침에 신고기준 정의, 협조기관 사고대응체계, 외부기관 침해사고 대응체계 구축 계약서 반영, 외부기관 협조체계 수립
2.11.2 취약점 점검 및 조치 연1회 취약점 검사, 취약점에 대한 보완조치, 책임자에게 보고 취약점 점검 절차 수립 및 정기적 점검, 결과 보고, 최신 보안취약점 발생 파악, 점검 이력 기록관리
2.11.3 이상행위 분석 및 모니터링 이상행위 대응 모니터링 체계 내외부 침해시도, 개인정보 유출시도, 부정행위 모니터링, 임계치 정의 및 이상행위 판단 등 조치
2.11.4 사고 대응 훈련 및 개선 연1회 모의훈련, 훈련 결과를 대응체계에 반영 침해사고 및 유출사고 대응 모의훈련 계획수립, 모의훈련 연1회 실시, 대응체계 개선
2.11.5 사고 대응 및 복구 유출통지, 침해사고 원인 및 재발방지, 정보보호위원회보고 침해사고 인지 시 대응 및 보고, 정보주체 통지 및 관계기관 신고, 종결 후 공유, 재발방지대책 수립
2.12 재해복구    
2.12.1 재해재난 대비 안전조치 재해복구절차, 조직, RTO/RPO, 복구대책 IT재해유형 식별, 피해&업무 영향 분석, 핵심 IT서비스 및 시스템 식별, RTO, RPO 정의, BCP
2.12.2 재해복구 시험 및 개선 연1회 재해복구 시험 및 결과, 복구전략 및 대책 보완 BCP 수립ㆍ이행, 복구전략 및 대책 정기적 검토ㆍ보완
3 개인정보처리단계별 요구사항    
3.1 개인정보 수집 시 보호조치    
3.1.1 개인정보 수집 및 이용 동의 시 모든 항목포함, 동의시점, Q&A등 수집도 동의, 14세미만 법정더래인 명확 고지(목항기거) 후 동의, 방법 및 시점, 명확 표시, 만14세(법정대리인 동의), 동의 기록 보관
3.1.2 개인정보 의 수집 제한 최소수집, 선택정보에 동의하지 않을 수 있다는 사실 개인정보 최소한 정보 필수항목 수집, 최소 이외 선택항목, 거부권
3.1.3 주민등록번호 처리 제한 법령에 근거하여 수집, 대체수단 제공(CI, DI) 주민번호 수집 법적 근거, 법조항 구체적 식별, 대체수단 제공
3.1.4 민감정보 및 고유식별정보의 처리 제한 민감정보 일괄동의 금지, 민감정보 동의 시에 불이익에 관한 사항 포함해야 함 민감정보&고유식별정보 별도 동의, 법령 구체적 근거
3.1.5 개인정보 간접수집 수집출처, 3개월 이내 통지, 수집출저 통지에 대한 기록 보유 간접수집 동의획득 책임(제공자), 사회통념 동의 의사 이용, 자동수집장치, 통지(요구, 처리자), 보관
3.1.6 영상정보처리기기 설치 운여 안내판, 운영 및 관리 방침 허용장소 및 목적, 공공기관 공청회, 안내판, 운영관리방침, 보관기관 만료시 삭제, 위탁 시 계약서
3.1.7 마케팅 목적의 개인정보 수집 및 이용 포괄동의 안됨, 2년마다 재동의, 메일에 "(광고)" 표시 홍보 별도 동의, 광고 사전 동의, 2년 확인, 영리목적 광고 고지(전송자, 수신거부방법), 야간 금지
3.2 개인정보 보유 및 이용시 보호조치    
3.2.1 개인정보 현황관리 개인정보파일 개보위에 등록 (60일 이내 등록) 개인정보 현황 정기적 관리, 공공기관 개인정보파일 등록, 개인정보파일을 처리방침에 공개
3.2.2 개인정보 품질보장 본인확인 절차를 통한 개인정보 품질확보 수집 개인정보 최신화, 정보주체 개인정보 품질(정확성, 완전성, 최신성) 유지
3.2.3 이용자 단말기 접근보호 스마트폰 앱 접근권한 동의, 스마트폰 접근권한 과도한 동의 이동통신단말장치 접근권한 고지, 동의, 선택권한 거부권, 동의 및 철회방법 마련
3.2.4 개인정보 목적 외 이용 및 제공 목적 외 이용 시 동의, 공공 제3자 제공 시에 대장 기록 목적 외 별도 동의, 법적 근거, 제3자 안전조치, 공공기관(목적 외 관보&홈페이지 게재, 목적 외 대장)
3.2.5 가명정보 처리 가명정보 처리방침 공개, 가명정보와 추가정보 분리, 특이체 제거, 재식별 검토  
3.3 개인정보 제공 시 보호조치    
3.3.1 개인정보 제3자 제공 동의 거부권, 최소한의 개인정보만 제3자 제공 제3자 별도 동의, 거부권, 최소정보 제한, 제3자 제공내역 기록보관, 제3자 접근 시 보호절차 통제
3.3.2 개인정보 처리 업무 위탁 개인정보처리방침에 수탁사 공개, 홍보 등 업무위탁을 정보주차에게 알려야 함  
3.3.3 영업의 양수 등에 따른 개인정보의 이전 이전 사실 통지, 이전을 원하지 않을 때 방법 및 절차 마련함 양도ㆍ합병 이전 시 통지(개통면), 통지요건(사실, 받는자, 이전 불원), 본래 목적 이용
3.3.4 개인정보의 국외이전 개인정보처리방침에 국외이전 공개(클라우드), 국외 이전 별도 동의 국외이전 고지(목항기거자, 목항기국일방자)동의, 계편공 동의갈음, 국외이전 계약, 국외 보호조치
3.4 개인정보의 파기    
3.4.1 개인정보의 파기 목적 달성 시 파기, 이벤트 종료 시 파기, 익명처리로 파기 가능 개인정보 보유기간 및 파기 정책, 불필요 시 파기, 안전한 방법 파기, 파기 기록 관리
3.4.2 처리목적 달성 후 보유 시 조치 목적 달성 개인정보 분리보관, 선택정보는 파기 불필요 시 최소 기간, 최소정보 보관, 보존 시 분리보관, 목적 범위 내 처리, 접근권한 최소인원 제한
3.5 정보주체 권리보호    
3.5.1 개인정보처리방침 공개 개인정보처리방침 공개 (의무사항 모든 항목) 개인정보 처리방침 공개, 법령 요구내용 포함, 변경 시 공지, 변경 사항 이력관리
3.5.2 정보주체 권리보장 10일 이내 열람, 요청 내역 기록, 정보전송요구권 권리(열람, 정정ㆍ삭제, 처리정지) 행사 방법 및 절차, 이의제기, 동의 철회, 처리 기록, 타인 권리 침해
3.5.3 정보주체에 대한 통지 이용내역 통지 (메일, SMS 등) 개인정보 이용내역 주기적 통지(100만명 연1회), 통지항목 법 요구항목 포함

참고 자료 입니다.

 

구분 수행업무 증적자료 기안자/담당자 최종결재자 또는 최종확인자
년 1회 정보보호 관련 예산 확보 및 년간감사계획 승인 시 년간감사계획서
정보보호위원회회의록 - 위험분석 실시를 위한 컨설팅진행 승인 등
정보보호담당자 정보보호위원회
  위험분석 시 위험분석 계획서 정보보호담당자 정보보호책임자
  위험분석 시 DoA 정보보호담당자 CEO
  위험분석 시 정보보호대책 이행계획서 정보보호담당자 정보보호책임자
  위험분석 시 위험분석평가보고서 정보보호담당자 CEO
  기술적 취약점 점검 시 기술적 취약점 점검결과 정보보호담당자 CEO
  정책/지침 제/개정 시 정보보호위원회회의록 - 정책/지침 제.개정 승인 정보보호담당자 정보보호위원회
  정책/지침 제/개정 시 정보보호 관련 정책/지침 앞장에 개정이력 관리 정보보호담당자 -
  정책/지침 제/개정 시 정보보호 관련 정책/지침 전 문서를 그룹웨어에 공지 정보보호담당자 -
  정보보호 년간 교육 및 인식제고 계획 시 정보보호 년간교육 및 인식제고 계획서 정보보호담당자 정보보호책임자
  교육 시 정보보호교육 계획서
개인/정보보호 교육자료
정보보호교육 결과보고서
정보보호담당자 정보보호책임자
  교육 시
(개인정보 위탁사 대상)
정보보호교육 계획서
개인/정보보호 교육 자료
정보보호교육 결과보고서
정보보호담당자 정보보호책임자
  교육 시
(정책/지침 제/개정 시)
정보보호교육 계획서
개인/정보보호 교육 자료
법 개정된 내용
정보보호교육 결과보고서
정보보호담당자 정보보호책임자
  침해사고 모의훈련 시 비상연락망
침해사고모의훈련계획서
침해사고모의훈련결과서
정보보호담당자 정보보호책임자
  IT재해복구 시험 시 비상연락망
IT재해복구 시험계획서
IT재해복구 시험결과서
정보보호담당자 정보보호책임자
  감사 시 감사결과보고
정보보호위원회회의록
정보보호담당자 정보보호위원회
  위탁사 점검 시 수탁사 점검 정보보호담당자 정보보호위원회
  직무기술 검토 시 직무기술서 정보보호담당자
정보보호관리자
정보보호책임자
정보보호지킴이
상위권자
6개월 인가된 직원 출입 권한 검토 출입통제장치 출입/접근이력 검토대장
열쇠관리대장
물리보안담당자
열쇠담당자
정보보호관리자
  업무용 USB 관리 업무용 USB관리대장 업무용 USB 자산관리자  
  일반정보처리시스템 로그 점검 로그 검토 결과 및 백업대장 해당 정보처리시스템의 자산관리자 정보보호관리자
  정보보호시스템 정책 적정성 검토 로그 검토 결과 및 백업대장 해당 정보보호시스템의 자산관리자 정보보호관리자
  주요직무자 접근 권한 적정성 검토 주요직무자 리스트 및 접근권한 적정성 검토대장 부서장 정보보호관리자
  모바일기기승인현황 검토 모바일기기승인현황 검토대장 해당 정보처리시스템의 자산관리자 해당 정보처리시스템의 자산책임자
  접근권한 검토 접근권한 검토대장 해당 정보처리시스템의 자산관리자 해당 정보처리시스템의 자산책임자
  정보시스템 성능 및 용량 검토 정보시스템 성능 및 용량 검토대장 해당 정보처리시스템의 자산관리자 해당 정보처리시스템의 자산책임자
월 1회 사무실/PC/모바일 보안 점검 사무실/PC/모바일 보안 점검표 해당직원 상위권자(기안자 소속)
  출입관리 점검 외부 출입자 및 노트북/정보시스템/저장매체 반출입 포함 출입 방문자의 업무 담당자 정보보호담당자
  개인정보처리시스템 점검 로그검토 결과 및 백업대장 해당 개인정보처리시스템의 자산관리자 정보보호관리자
  공용 단말기/공용 계정 점검 공용계정 사용대장 공용 단말기/공용 계정 사용자 상위권자(기안자 소속)
  악성코드 탐지 검사 악성코드 탐지 검사 로그 해당 정보처리시스템의 자산관리자 -
  정보시스템 성능 및 용량 검토 정보시스템 성능 및 용량 검토대장 모니터링 담당자 모니터링 담당자의 상위권자
일1회 악성코드 엔진 업데이트 중요 서버 로그, PC 업데이트 로그 해당 정보처리시스템의 자산관리자
악성코드 담당자
-
수시 직원 입사시 정보보호서약서 징구 인사부서 상위권자(기안자 소속)
  위수탁 계약 체결 시 외부용역 위탁 협약서 계약부서 상위권자(기안자 소속)
  외주 개발/변경 시 외부용역 위탁 협약서
개발 보안요구사항 체크리스트
계약부서 상위권자(기안자 소속)
  위탁사 직원 업무 시 정보보호서약서 징구 계약부서 상위권자(기안자 소속)
  (개인)정보보호 조직 구성 시 정보보호 조직도 정보보호담당자 CEO
  CISO 지정 시 정보보호 최고책임자 지정신고서 정보보호담당자 CEO
  주요직무자용 - 계정 생성 및 권한 변경 시 계정 및 권한 신청/변경 신청서 주요직무자 정보보호책임자
  계정 생성 및 권한 변경 시 계정 및 권한 신청/변경 신청서 해당직원 상위권자(기안자 소속)
  직원 퇴사 시 사직원, 비밀유지서약서 해당직원 상위권자(기안자 소속)
  직원 직무변경 시 직무변경 체크리스트 해당직원 상위권자(기안자 소속)
  외부자 계약만료/업무종료/담당자변경 시 퇴사/계약만료 체크리스트 해당외부자의 담당직원 상위권자(기안자 소속)
  정보시스템 개발 시 계정 및 권한 신청/변경 신청서
개발 보안요구사항 체크리스트
응용프로그램 이관 대장
해당직원 상위권자(기안자 소속)
  정보시스템 개발 시 기술적 취약점 점검결과
(신규 개발 및 기능추가 등 미들급이상의 변경시 적용)
해당직원 정보보호관리자
  신규 정보시스템 도입 시 정보시스템 신규/개선 체크리스트 해당직원 구매부서 담당자
  기존 정보시스템 개선/변경/파기 시 변경처리작업계획서 해당직원 상위권자(기안자 소속)
  기존 정보시스템 개선 시 정보시스템 신규/개선 체크리스트 해당직원 구매부서 담당자
  정책 및 룰셋 업데이트 시 변경처리작업계획서 해당직원 상위권자(기안자 소속)
  웹사이트에 기밀 정보 공개 시 공개 내용 검토 해당직원 정보보호관리자
  웹사이트에 대외비 정보 공개 시 공개 내용 검토 해당직원 상위권자(기안자 소속)
  휴대용 저장매체 사용 시 휴대용 저장매체 예외적용 신청서) 해당직원 상위권자(기안자 소속)
  저장매체 폐기/재사용 시 저장매체 재사용/파기 대장 해당직원 해당 정보처리시스템의 자산책임자
  업무용으로 모바일기기를 사용 시 모바일기기 사용신청서 해당직원 정보보호관리자
  업무용으로 무선AP를 사용 시 무선AP사용 신청서 해당직원 정보보호관리자
  원격업무 신청 시 특정단말인증, 사용자인증, 구간암호화, 접속단말 보안(백신, 패치) 등 적용 해당직원 정보보호책임자
  개인정보를 외부업체에 전송 시 개인정보를 암호화 후 패스워드는 별도채널을 통해 전달 해당직원 개인 정보보호책임자
  개인정보가 포함된 문서를 출력 시 개인정보 출력관리 대장 해당직원 개인 정보보호책임자
  암호키 생성/복구 시 암호키관리대장 해당직원 정보보호책임자
  암호키 변경/폐기 시 암호키관리대장 해당직원 정보보호위원회
  정보시스템 장애 발생 시 장애사고 관리대장 해당직원 해당 정보처리시스템의 자산책임자
  침해사고 1등급 발생 시 침해사고발생보고서
침해사고대응보고서
정보보호담당자 CEO
  개인정보가 유출되었을 시 개인정보 유출 신고서 정보보호담당자 CEO
  침해사고 2등급 발생 시 침해사고발생보고서
침해사고대응보고서
정보보호담당자 정보보호책임자
  침해사고 3등급 발생 시 침해사고발생보고서
침해사고대응보고서
정보보호담당자 정보보호관리자
  재해 발생 시 대응보고서 정보보호담당자 CEO

 

이전에 다니던 회사 중 한 곳에서 컨설팅 받으면서 받은 자료입니다.

회사마다 역할은 다를 수 있어요.

그냥 참고 자료로 공유합니다.

 

담당자 역할 및 책임
정보보호책임자
  • 정보보호관리체계의 수립 및 관리ㆍ운영
  • 정보보호 취약점 분석ㆍ평가 및 개선
  • 침해사고의 예방 및 대응
  • 사전 정보보호대책 마련 및 보안조치 설계ㆍ구현
  • 정보보호 사전 보안성 검토
  • 중요 정보의 암호화 및 보안서버 적합성 검토
  • 그 밖에 관계 법령에 따라 정보보호를 위하여 필요한 조치의 이행 등 정보보호에 관한 업무 총괄 등
정보보호 관리자
  • 정보자산/접근통제/운영관리 등 정보보호관리체계 내 모든 보안업무에 관한 조정 및 감독
  • 정보자산/접근통제/운영관리 등 정보보호관리체계 내 모든 보안업무의 추진계획 관리 등
정보보호 담당자
  • 정보자산/접근통제/운영관리 등 정보보호관리체계 내 보안업무의 시행방법, 절차 등 추진계획 수립/시행
  • 자산 별 위험분석 및 보안대책 강구/관리
  • 보안사고 대응 및 복구 관리
  • 보안사고 모니터링 및 대응
  • 정보자산의 반출ㆍ입 등 정보자산에 대한 관리
  • 보호구역에 대한 출입통제 관리
  • 임직원 입사 및 퇴사 시 보안관리 등
팀 및 그룹별 정보보호 담당자
  • 해당 보안업무의 추진계획 시행
  • 구현된 보안대책의 운영
  • 해당 파트 내 정보자산에 대한 중요도 등급 결정
  • 해당 부서원 별 정보자산에 대한 접근통제 권한 결정
  • 해당 부서원 퇴직 시 서약서 징구 및 필요한 정보보호 조치
  • 해당 부서원에 대한 보안 교육 등
서버 담당자
  • 자산 별 위험분석 및 보안대책 강구/관리
  • 시스템 모니터링 및 사고 대응
  • 서비스 중요도에 따른 복구 방안 마련
서비스 담당자
  • 서비스 모니터링 및 사고 대응
이외 담당자
  • 자산 별 위험분석 및 보안대책 강구/관리
  • 모니터링 및 사고 대응 (복구 관리 포함)

이전 기록을 찾아서 자료 공유합니다.

이전 자료이다보니 UI가 최신이 아니에요. 소스코드를 중점으로 보시길~

 

제 기준으로 AWS의 정보보안 업무를 위해서 모니터링을 진행한 코드입니다.

각 담당자 분들 상황에 맞게 소스코드 수정해서 사용하시면 좋을 것 같아요.

 

모니터링 구성도

 

aws cloudtrail 추적 생성

 

CloudTrail CloudWatch Lambda로 로그 전송 설정

 

람다 설정

생성 함수는 CloudWatch Logs → Lambda로 전달 받을 수 있어야 함.

Runtime은 Node.js로 설정

 

소스코드 (본인에 맞게 수정해서 활용하세요!!!)

//------------------------------------------------------------------------------------------------
// Import Library
//------------------------------------------------------------------------------------------------
  
var https = require('https');
var util = require('util');
var zlib = require('zlib');
  
//------------------------------------------------------------------------------------------------
// Prototype Overriding
//------------------------------------------------------------------------------------------------
Date.prototype.format = function(f) {
    if (!this.valueOf()) return " ";
   
    var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"];
    var d = this;
       
    return f.replace(/(yyyy|yy|MM|dd|E|hh|mm|ss|a\/p)/gi, function($1) {
        switch ($1) {
            case "yyyy": return d.getFullYear();
            case "yy": return (d.getFullYear() % 1000).zf(2);
            case "MM": return (d.getMonth() + 1).zf(2);
            case "dd": return d.getDate().zf(2);
            case "E": return weekName[d.getDay()];
            case "HH": return d.getHours().zf(2);
            case "hh": return ((d.getHours() % 12) ? d.getHours() : 12).zf(2);
            case "mm": return d.getMinutes().zf(2);
            case "ss": return d.getSeconds().zf(2);
            case "a/p": return d.getHours() < 12 ? "오전" : "오후";
            default: return $1;
        }
    });
};
   
String.prototype.string = function(len){var s = '', i = 0; while (i++ < len) { s += this; } return s;};
String.prototype.zf = function(len){return "0".string(len - this.length) + this;};
Number.prototype.zf = function(len){return this.toString().zf(len);};
  
//------------------------------------------------------------------------------------------------
// Global Variable Define
//------------------------------------------------------------------------------------------------
  
var FINAL_CONTEXT;
  
var attachment = {
    "title" : null,
    "color" : null,
    "pretext" : null,
    "title_link" : null,
    "text" : null,
};
      
//------------------------------------------------------------------------------------------------
// Function Define
//------------------------------------------------------------------------------------------------
 
// function makeSlackAttachment(title, body, color){
function makeSlackAttachment(body, color){ // <- Slack 메시지 알림시 title 제거해야 보기가 좋음
      
    var newAttachment = attachment.constructor();
//    newAttachment.title = title;
    newAttachment.text = body;
    newAttachment.color = color;
      
    return newAttachment;
}
  
  
// slackMessage를 게시하도록 요청
function sendSlackMessage(attachments, channel) {
      
    // console.log("\n 슬랙 메세지 전송할 내용 >>> " + JSON.stringify(attachments));
      
    var slackApiBody = {
        "channel": "aws_log",
        "username": "CloudTrail",
        "text": null,
        "icon_emoji": ":cloudtrail:",
        "attachments" : []
    };
      
    // var newSlackApiBody = slackApiBody; // .constructor();
    slackApiBody.attachments.push(attachments);
    // newSlackApiBody.channel = channel;
  
      
  
    try {
          
        console.log("\n 최종 바디 메세지 >>>> " + JSON.stringify(slackApiBody));
          
        var options = {
            method: 'POST',
            hostname: 'hooks.slack.com',
            port: 443,
            path: '???????????????????????????????????????????????????'
        };
      
        var req = https.request(options, function (res) {
            res.setEncoding('utf8');
            res.on('data', function (chunk) {
                console.log('Slack Message SUCCESS !!');
                // FINAL_CONTEXT.done('Slack Message SUCCESS !!');
                FINAL_CONTEXT.succeed('Slack Message SUCCESS !!');
            });
        });
      
        req.on('error', function (e) {
            console.log('problem with request: ' + e.message);
            FINAL_CONTEXT.fail('Slack Message FAIL !!');
        });
      
        req.write(util.format("%j", slackApiBody));
        req.end();
          
        console.log('Slack Message Request complete !!');
    } catch (error) {
        console.log('Slack Send Exception : ' + error.Message);
        FINAL_CONTEXT.fail('Slack Message FAIL !!');
    } finally {
        console.log('Slack Message Request END !!');
        // FINAL_CONTEXT.done('Slack Message END !!');
    }
}
  
// CloudWatch Log는 zlib를 통해 복호화 과정을 거쳐야만 해석이 가능하다.
function cloudWatchUnzip(input) {
    // console.log(input);
    var payload = new Buffer(input.awslogs.data, 'base64');
      
    zlib.gunzip(payload, function(e, result) {
        if (e) {
            FINAL_CONTEXT.fail(e);
        } else {
            result = JSON.parse(result.toString('ascii'));
            if (result.logEvents != undefined) {
                loopEvents(result.logEvents);  
            } else {
                console.log("\n cloudWatchUnzip Result is >>>> " + JSON.stringify(result));
                console.log("\n cloudWatchUnzip Type Is Un Correct !! [ 예상하지 못한 유형의 Result ] !! ");  
            }
              
        }
    });
}
  
// 정책 내 전체 허용 값의 존재 유무
function ipOpenPublic(ipArray, eventName) {
      
    var isPublic = false;
      
    if (ipArray != undefined) {
        for (var j = 0; j < ipArray.length; j++) {
            var targetIp = (ipArray[j].cidrIp != undefined) ? ipArray[j].cidrIp : ipArray[j].cidrIpv6;
              
            // 전체 허용한 정책이 있는 경우, 경고메세지 추가
            if (eventName === "AuthorizeSecurityGroupIngress" && (targetIp === "0.0.0.0/0" || targetIp === "::/0")) {
                isPublic = true;
                break;
            }
        }
    }
      
    return isPublic;
}
  
// Target IP 에 대한 메세지를 생성한다.
function addMessageFromIpArray(ipArray, originMessage, ipMessageHead, eventName) {
      
    if (ipArray != undefined) {
        for (var j = 0; j < ipArray.length; j++) {
          
            var cidrIp = ipArray[j].cidrIp;
            var ipMessage =  ipMessageHead + " / 대상: " + cidrIp;
              
            // 전체 허용한 정책이 있는 경우, 경고메세지 추가
            if (eventName === "AuthorizeSecurityGroupIngress" && (cidrIp === "0.0.0.0/0" || cidrIp === "::/0")) {
                ipMessage = ipMessage + " - 대상 지정 필요 여부 확";
            }
              
            originMessage = addMessage(originMessage, ipMessage);
        }
    }
      
    return originMessage;
}
  
// 실제 이벤트를 해석하여 각 이벤트명에 따라 구분 동작하도록 하는 함수이다.
function parsingEvent(eventLog) {
    // 실제 원하는 로그는 로그이벤트 내 Message 항목이다.
    var log = eventLog;                  
    var oneHour = 3600000;
    var koreaOffsetHour = 9;
                  
    console.log("\n\n 실제 이벤트 로그 >> " + JSON.stringify(log) + "\n\n");          
                  
    // 로그 공통 포맷
    var utc = new Date(log.eventTime).getTime() + (new Date(log.eventTime).getTimezoneOffset() * 60000);
    var exetime = new Date(utc + (oneHour*koreaOffsetHour)).format("yyyy년 MM월 dd일 a/p hh시 mm분 ss초");
    var sourceip = log.sourceIPAddress;
    var eventName = log.eventName;
    var exeregion = log.awsRegion;
    var userType = log.userIdentity.type;
    var useragent = (log.userAgent === undefined) ? "" : log.userAgent;
    var username = (log.userIdentity.type === "IAMUser") ? "Account: " + log.userIdentity.userName + " (" + sourceip + ")" : "Account: Root (" + sourceip + ")";
    //    var channel = (log.userIdentity.type == "IAMUser") ? "@" + log.userIdentity.userName : "@sangmin";
    var channel = "aws_log";
  
    // 기본 공통 메세지
    var headMessage = `${username}`;
    var tailMessage1 = `\n Event Time: ${exetime}`;
    var tailMessage2 = `\n Region: ${exeregion} `;
    var detailMessage = "";
      
    // 슬랙 메세지 양식
    var slackTitle;
    var slackBody;
    var slackColor = "good";     // danger:빨간색 | warning:주황색 | good:녹색
      
    if (eventName != undefined && (eventName).indexOf('Create') > -1) {
          
        if (eventName != "CreateLogStream"){
           
            // Create 값이 있는 경우
            console.log("로그수집 >>>> " + JSON.stringify(log));
              
        }
    }
      
    // 채널이 있는 경우이거나, 사용자가 Root나 User가 아닌 경우이거나, 회사 IP가 아닌 경우
    // if (channel != "" && (userType === "Root" || userType === "IAMUser") && (sourceip != "121.165.242.121")) {
    if (channel != "" && (userType === "Root" || userType === "IAMUser")) {
          
        // EC2 인스턴스를 실행한 경우
        if (eventName === "RunInstances") {
              
            var items = log.responseElements.instancesSet.items;
      
            for (var i = 0; i < items.length; i++) {
      
                var exeinstance = items[i].instanceId;
          
                slackTitle = "EC2 인스턴스 생성"
                slackColor = "good";
                detailMessage = `\n 시작된 인스턴스 ID: ${exeinstance} (${exeregion})`;
                  
                slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
            }
        }
         
         // EC2 인스턴스를 중지한 경우
        if (eventName === "StopInstances") {
              
            var items = log.responseElements.instancesSet.items;
      
            for (var i = 0; i < items.length; i++) {
      
                var exeinstance = items[i].instanceId;
          
                slackTitle = "EC2 인스턴스 중지"
                slackColor = "danger";
                detailMessage = `\n 중지된 인스턴스 ID: ${exeinstance} (${exeregion})`;
                  
                slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
            }
        }
         
        // EC2 인스턴스를 종료한 경우
        if (eventName === "TerminateInstances") {
              
            var items = log.responseElements.instancesSet.items;
      
            for (var i = 0; i < items.length; i++) {
      
                var exeinstance = items[i].instanceId;
          
                slackTitle = "EC2 인스턴스 종료"
                slackColor = "danger";
                detailMessage = `\n 종료된 인스턴스 ID: ${exeinstance} (${exeregion})`;
                  
                slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
            }
        }
         
         // IAM을 이용하여 User를 생성한 경우
        if (eventName === "CreateUser") {
              
            var createuser = log.responseElements.user.userName;
      
            slackTitle = "User 생성"
            slackColor = "good";
            detailMessage = `\n 생성된 User ID: ${createuser} (${exeregion})`;
              
            slackBody = `${slackTitle} \n` + `User를 생성한 ${headMessage}` + tailMessage1 + detailMessage;
              
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
         
        // IAM을 이용하여 User를 Group에 넣은 경우
        if (eventName === "AddUserToGroup") {
              
            var createuser = log.requestParameters.userName;
            var usergroup = log.requestParameters.groupName;
      
            slackTitle = "User 그룹 지정"
            slackColor = "good";
            detailMessage = `\n User: ${createuser} (${exeregion}) \n User Group: ${usergroup}`;
              
            slackBody = `${slackTitle} \n` + `User Group을 지정한 ${headMessage}` + tailMessage1 + detailMessage;
              
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
         
          
        // RDS를 생성한 경우
        else if (eventName === "CreateDBInstance") {
      
            slackTitle = "RDS 생성";
            slackColor = "good";
              
            detailMessage = `\n DB Name:` + log.responseElements.dBName + ` \ DB Engine :` + log.responseElements.engine;
              
            slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + tailMessage2 + `( ${exeregion})` + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
          
        // DynamoDB 테이블을 생성한 경우
        else if (log.eventSource === "dynamodb.amazonaws.com" && eventName == "CreateTable") {
              
            slackTitle = "DynamoDB 테이블 생성";
            slackColor = "good";
              
            detailMessage = `\n Table Name: ` + log.requestParameters.tableName;
              
            slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + `( ${exeregion})` + detailMessage;
          
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
          
        // Elasticache를 생성한 경우
        else if (log.eventSource === "elasticache.amazonaws.com" && eventName == "CreateCacheCluster") {
              
            slackTitle = "Elasticache 생성";
            slackColor = "good";
              
            detailMessage = `\n Elasticache Engine : ` + log.requestParameters.engine;
              
            slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + `( ${exeregion})` + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
          
        // S3 버킷을 생성한 경우
        else if (log.eventSource === "s3.amazonaws.com" && eventName == "CreateBucket") {
              
            slackTitle = "S3 버킷 생성";
            slackColor = "good";
              
            detailMessage = `\n S3 Bucket Name : ` + log.requestParameters.bucketName;
              
            slackBody = `${slackTitle} \n` + headMessage + tailMessage1 + `( ${exeregion})` + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
          
        // 콘솔을 로그인한 경우
        // else if (eventName === "ConsoleLogin" && log.responseElements.ConsoleLogin == "Success") {
        else if (eventName === "ConsoleLogin") {
      
            var loginResult = (log.responseElements.ConsoleLogin == "Success") ? "성공" : "실패";
              
            slackTitle = "AWS Console 로그인 " + loginResult;
            slackColor = (log.responseElements.ConsoleLogin == "Success") ? "good" : "danger";
              
            slackBody = `\n ${slackTitle} \n ${username} \n 접속 시간: ${exetime}`;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
        }
      
        // SecurityGroup의 정책을 수정하거나 생성할 경우 정책이 ALL로 Open 된 경우
        else if (eventName === "AuthorizeSecurityGroupIngress" || eventName === "RevokeSecurityGroupIngress") {
      
            var items = log.requestParameters.ipPermissions.items;
            var sgname = log.requestParameters.groupId;
      
            for (var i = 0; i < items.length; i++) {
                  
                var toport = items[i].toPort;
                var ipV4Array = items[i].ipRanges.items;
                var ipV6Array = items[i].ipv6Ranges.items;
                  
                // 80 또는 443포트가 아닌데, IP 전체 허용을 한 경우에만 SlackMessage 발송되도록 처리
                if (toport != "80" && toport != "443" && (ipOpenPublic(ipV4Array, eventName) || ipOpenPublic(ipV6Array, eventName))) {
          
                    var protocol = items[i].ipProtocol;
                    var fromport = items[i].fromPort;
                     
                    var action = (eventName === "AuthorizeSecurityGroupIngress") ? "추가 / 변경" :"삭제";
                    var ipMessageFormat = `\n SecurityGroup Name: ${sgname} (${exeregion}) \n Inbound / ${protocol} / ${fromport} -> ${toport}`;
                      
                    detailMessage = addMessageFromIpArray(ipV6Array, detailMessage, ipMessageFormat, eventName);    // IP v6
                    detailMessage = addMessageFromIpArray(ipV4Array, detailMessage, ipMessageFormat, eventName);      // IP v4
          
                    slackTitle = `Security Group 정책 ${action}`;
                    slackColor = (eventName === "AuthorizeSecurityGroupIngress") ? "warning" :"good";
                    slackBody = `${slackTitle} \n` + headMessage + detailMessage;
                  
                sendSlackMessage(makeSlackAttachment(slackBody, slackColor), channel);
//                sendSlackMessage(makeSlackAttachment(slackTitle, slackBody, slackColor), channel);
                }
            }
        }
          
        else {
            console.log("EventName 해당사항 없음 !! >>>> " + JSON.stringify(log));
        }
    }
}
  
// 이벤트가 Array형태를 갖는 경우, 반복문을 통해 각각의 이벤트를 파싱하도록 한다.
function loopEvents(logEvents) {
      
    // 로그 이벤트가 여러개이므로, 반복하여 각 이벤트를 뽑아 낸다.
    logEvents.forEach(function(element) {                  
        if (element.eventName != undefined) {
            parsingEvent(element);
        } else if (element.message != undefined) {
            console.log("\n element.message is >>>> " + JSON.stringify(JSON.parse(element.message)));
            parsingEvent(JSON.parse(element.message));
        } else {
            console.log("\n element is >>>> " + JSON.stringify(element));
            console.log("\n element Type Is Un Correct !! [ 예상하지 못한 유형의 element ] !! ");  
        }
    });
}
  
// mainMessage 의 유무에 따라, 메세지를 합친다.
function addMessage(mainMessage, addMessage) {
    // 사실 구분할 필요 없음
    if (mainMessage === "") {
        return addMessage;
    } else {
        return mainMessage = mainMessage + "\n" + addMessage;
    }
}
  
  
//------------------------------------------------------------------------------------------------
// S T A R T !!
//------------------------------------------------------------------------------------------------
  
// Lamda에서 호출하는 핸들러 (시작점)
exports.handler = function(input, context) {
      
    console.log("\n Lamda Trigger Event Catch !! \n input is >>>> " + JSON.stringify(input));
      
    FINAL_CONTEXT = context;
      
    if (input.Records != undefined) {
        console.log("\n Input from [ S3 ] !! ");
        loopEvents(input.Records);
    } else if (input.awslogs != undefined && input.awslogs.data != undefined) {
        console.log("\n Input from [ CloudWatch ] !! ");
        cloudWatchUnzip(input);
    } else if (input.eventName != undefined){
        console.log("\n Input from [ JSON TEST ] !! ");
        parsingEvent(input);
    } else {
        console.log("\n Input Type Is Un Correct !! [ 예상하지 못한 유형의 Input ] !! ");  
    }
      
    // context.succeed();
      
}

 

'기술 노트 > AWS' 카테고리의 다른 글

AWS 콘솔 점검 스크립트  (0) 2023.02.17

mib 파일 등록하기 (ubuntu에 넣는 방법)

저는 다운로드 받은 파일에 확장자가 txt가 붙었네요.

확장자가 붙은 경우 txt 확장자를 제거해주시거나, ubuntu로 옮긴 후 확장자 제거해 주세요.

1. 윈도우즈

C:\Users\test\Downloads>scp .\FORTINET-CORE-MIB.txt .\FORTINET-FORTIGATE-MIB.txt logmgmt@192.168.0.100:~
ID@192.168.0.100's password:
FORTINET-CORE-MIB.txt                                                                 100%   15KB   4.9MB/s   00:00
FORTINET-FORTIGATE-MIB.txt                                                            100%  397KB  24.2MB/s   00:00

C:\Users\test\Downloads>

 

2. ubuntu

logmgmt@syslogserver:~$ ls -al
total 8492
drwxr-x--- 14 logmgmt logmgmt    4096  2월  6 15:55 .
drwxr-xr-x  3 root    root       4096 11월 28 13:53 ..
-rw-------  1 logmgmt logmgmt   43176  2월  6 12:26 .bash_history
-rw-r--r--  1 logmgmt logmgmt     220 11월 28 13:53 .bash_logout
-rw-r--r--  1 logmgmt logmgmt    3771 11월 28 13:53 .bashrc
drwx------ 11 logmgmt logmgmt    4096  1월 12 16:59 .cache
drwx------ 11 logmgmt logmgmt    4096 11월 28 18:07 .config
-rw-------  1 logmgmt logmgmt      20 12월 28 10:44 .lesshst
drwx------  5 logmgmt logmgmt    4096  1월 12 17:15 .local
-rw-r--r--  1 logmgmt logmgmt     807 11월 28 13:53 .profile
-rw-------  1 logmgmt logmgmt       5  1월 12 16:44 .python_history
-rw-r--r--  1 logmgmt logmgmt       0 11월 28 18:04 .sudo_as_admin_successful
-rw-rw-r--  1 logmgmt logmgmt     254 12월 22 17:57 .wget-hsts
-rw-rw-r--  1 logmgmt logmgmt   15309  2월  6 15:55 FORTINET-CORE-MIB.txt
-rw-rw-r--  1 logmgmt logmgmt  406521  2월  6 15:55 FORTINET-FORTIGATE-MIB.txt
-rw-rw-r--  1 logmgmt logmgmt 8134656  1월 15 14:37 elastalert.txt
drwx------  5 logmgmt logmgmt    4096 12월 26 17:51 snap
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 공개
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 다운로드
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 문서
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 바탕화면
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 비디오
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 사진
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 음악
drwxr-xr-x  2 logmgmt logmgmt    4096 11월 28 16:14 템플릿
logmgmt@syslogserver:~$ sudo mv ./FORTINET-CORE-MIB.txt ./FORTINET-FORTIGATE-MIB.txt /usr/share/snmp/mibs/ietf
[sudo] password for logmgmt:
logmgmt@syslogserver:~$ cd /usr/share/snmp/mibs/ietf
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$ ls -al | grep FORTINET
-rw-rw-r-- 1 logmgmt logmgmt  15309  2월  6 15:55 FORTINET-CORE-MIB.txt
-rw-rw-r-- 1 logmgmt logmgmt 406521  2월  6 15:55 FORTINET-FORTIGATE-MIB.txt
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$ sudo mv ./FORTINET-CORE-MIB.txt ./FORTINET-CORE-MIB
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$ sudo mv ./FORTINET-FORTIGATE-MIB.txt ./FORTINET-FORTIGATE-MIB
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$ ls -al | grep FORTINET
-rw-rw-r-- 1 logmgmt logmgmt  15309  2월  6 15:55 FORTINET-CORE-MIB
-rw-rw-r-- 1 logmgmt logmgmt 406521  2월  6 15:55 FORTINET-FORTIGATE-MIB
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$ sudo chown root:root ./FORTINET-*
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$ ls -al | grep FORTINET
-rw-rw-r-- 1 root root  15309  2월  6 15:55 FORTINET-CORE-MIB
-rw-rw-r-- 1 root root 406521  2월  6 15:55 FORTINET-FORTIGATE-MIB
logmgmt@syslogserver:/usr/share/snmp/mibs/ietf$

 

2.1 mib 파일명 체크: 2.1.3의 확장자 없애기를 하셔야 에러가 없습니다.

2.1.1 확장자 txt 일 경우

root@syslogserver:/usr/share/snmp/mibs/ietf# mv ./FORTINET-CORE-MIB ./FORTINET-CORE-MIB.txt
root@syslogserver:/usr/share/snmp/mibs/ietf# mv ./FORTINET-FORTIGATE-MIB ./FORTINET-FORTIGATE-MIB.txt
root@syslogserver:/usr/share/snmp/mibs/ietf# systemctl restart snmp-exporter.service
root@syslogserver:/usr/share/snmp/mibs/ietf# systemctl status snmp-exporter.service | more
● snmp-exporter.service - Prometheus SNMP Exporter Service
     Loaded: loaded (/etc/systemd/system/snmp-exporter.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-02-06 15:29:18 KST; 23s ago
   Main PID: 2631842 (snmp_exporter)
      Tasks: 9 (limit: 19052)
     Memory: 10.7M
        CPU: 136ms
     CGroup: /system.slice/snmp-exporter.service
             └─2631842 /usr/local/bin/snmp_exporter --config.file=/opt/snmp_exporter/snmp.yml

 2월 06 15:29:18 syslogserver systemd[1]: Started Prometheus SNMP Exporter Service.
 2월 06 15:29:18 syslogserver snmp_exporter[2631842]: ts=2024-02-06T06:29:18.664Z caller=main.go:194 level=info msg="Starting snmp_exporter" version="(version=0.25.0, branch=HEAD, revision=9c42d6c87
4d479314e612bca69558c81f8e26287)" concurrency=1
 2월 06 15:29:18 syslogserver snmp_exporter[2631842]: ts=2024-02-06T06:29:18.664Z caller=main.go:195 level=info build_context="(go=go1.21.5, platform=linux/amd64, user=root@880115266f70, date=202312
10-10:05:18, tags=netgo)"
 2월 06 15:29:18 syslogserver snmp_exporter[2631842]: ts=2024-02-06T06:29:18.758Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9116
 2월 06 15:29:18 syslogserver snmp_exporter[2631842]: ts=2024-02-06T06:29:18.758Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9116
 2월 06 15:29:23 syslogserver snmp_exporter[2631842]: ts=2024-02-06T06:29:23.950Z caller=collector.go:393 level=info auth=public_v2 target=192.168.104.1 module=fortinet_fortigate msg="Error scraping
 target" err="error walking target 192.168.104.1: marshal: marshalPDU: unable to marshal varbind list: unable to marshal OID: Invalid object identifier"
 2월 06 15:29:38 syslogserver snmp_exporter[2631842]: ts=2024-02-06T06:29:38.952Z caller=collector.go:393 level=info auth=public_v2 target=192.168.104.1 module=fortinet_fortigate msg="Error scraping
 target" err="error walking target 192.168.104.1: marshal: marshalPDU: unable to marshal varbind list: unable to marshal OID: Invalid object identifier"
 root@syslogserver:/usr/share/snmp/mibs/ietf#

 

2.1.2 확장자 mib 일 경우

root@syslogserver:/usr/share/snmp/mibs/ietf# mv ./FORTINET-CORE-MIB.txt ./FORTINET-CORE-MIB.mib
root@syslogserver:/usr/share/snmp/mibs/ietf# mv ./FORTINET-FORTIGATE-MIB.txt ./FORTINET-FORTIGATE-MIB.mib
root@syslogserver:/usr/share/snmp/mibs/ietf# systemctl restart snmp-exporter.service
root@syslogserver:/usr/share/snmp/mibs/ietf# systemctl status snmp-exporter.service | more
● snmp-exporter.service - Prometheus SNMP Exporter Service
     Loaded: loaded (/etc/systemd/system/snmp-exporter.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-02-06 15:33:20 KST; 3s ago
   Main PID: 2631948 (snmp_exporter)
      Tasks: 8 (limit: 19052)
     Memory: 15.9M
        CPU: 142ms
     CGroup: /system.slice/snmp-exporter.service
             └─2631948 /usr/local/bin/snmp_exporter --config.file=/opt/snmp_exporter/snmp.yml

 2월 06 15:33:20 syslogserver systemd[1]: Started Prometheus SNMP Exporter Service.
 2월 06 15:33:20 syslogserver snmp_exporter[2631948]: ts=2024-02-06T06:33:20.549Z caller=main.go:194 level=info msg="Starting snmp_exporter" version="(version=0.25.0, branch=HEAD, revision=9c42d6c87
4d479314e612bca69558c81f8e26287)" concurrency=1
 2월 06 15:33:20 syslogserver snmp_exporter[2631948]: ts=2024-02-06T06:33:20.549Z caller=main.go:195 level=info build_context="(go=go1.21.5, platform=linux/amd64, user=root@880115266f70, date=202312
10-10:05:18, tags=netgo)"
 2월 06 15:33:20 syslogserver snmp_exporter[2631948]: ts=2024-02-06T06:33:20.667Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9116
 2월 06 15:33:20 syslogserver snmp_exporter[2631948]: ts=2024-02-06T06:33:20.667Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9116
 2월 06 15:33:23 syslogserver snmp_exporter[2631948]: ts=2024-02-06T06:33:23.951Z caller=collector.go:393 level=info auth=public_v2 target=192.168.104.1 module=fortinet_fortigate msg="Error scraping
 target" err="error walking target 192.168.104.1: marshal: marshalPDU: unable to marshal varbind list: unable to marshal OID: Invalid object identifier"
root@syslogserver:/usr/share/snmp/mibs/ietf#

 

2.1.3 확장자가 없을 경우

root@syslogserver:/usr/share/snmp/mibs/ietf# mv ./FORTINET-CORE-MIB.mib ./FORTINET-CORE-MIB
root@syslogserver:/usr/share/snmp/mibs/ietf# mv ./FORTINET-FORTIGATE-MIB.mib ./FORTINET-FORTIGATE-MIB
root@syslogserver:/usr/share/snmp/mibs/ietf# systemctl restart snmp-exporter.service
root@syslogserver:/usr/share/snmp/mibs/ietf# systemctl status snmp-exporter.service | more
● snmp-exporter.service - Prometheus SNMP Exporter Service
     Loaded: loaded (/etc/systemd/system/snmp-exporter.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-02-06 15:36:57 KST; 6s ago
   Main PID: 2631988 (snmp_exporter)
      Tasks: 8 (limit: 19052)
     Memory: 17.4M
        CPU: 125ms
     CGroup: /system.slice/snmp-exporter.service
             └─2631988 /usr/local/bin/snmp_exporter --config.file=/opt/snmp_exporter/snmp.yml

 2월 06 15:36:57 syslogserver systemd[1]: Started Prometheus SNMP Exporter Service.
 2월 06 15:36:57 syslogserver snmp_exporter[2631988]: ts=2024-02-06T06:36:57.412Z caller=main.go:194 level=info msg="Starting snmp_exporter" version="(version=0.25.0, branch=HEAD, revision=9c42d6c87
4d479314e612bca69558c81f8e26287)" concurrency=1
 2월 06 15:36:57 syslogserver snmp_exporter[2631988]: ts=2024-02-06T06:36:57.412Z caller=main.go:195 level=info build_context="(go=go1.21.5, platform=linux/amd64, user=root@880115266f70, date=202312
10-10:05:18, tags=netgo)"
 2월 06 15:36:57 syslogserver snmp_exporter[2631988]: ts=2024-02-06T06:36:57.507Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9116
 2월 06 15:36:57 syslogserver snmp_exporter[2631988]: ts=2024-02-06T06:36:57.507Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9116
root@syslogserver:/usr/share/snmp/mibs/ietf#

 

'기술 노트 > ubuntu' 카테고리의 다른 글

InfluxDB 2.x 설치하기  (1) 2024.03.15
sudo 권한 부여하기  (0) 2024.03.11
elastalert2 rules 설정  (0) 2024.01.15
elastalert2 설치하기  (0) 2024.01.15
grafana 알람 설정  (0) 2024.01.08

아무것도 아닌데, 모르니까 너무 어렵네요.

snmp-exporter에 mib를 등록하려는데, 정확히 어떻게 해야 한다가 없어서 올립니다.

 

fortigate에서 snmp 다운로드 받기

1. snmp 설정 및 MIB file 다운로드

 

2. SNMP의 source-ip 설정

utm # config system snmp community 

utm (community) # show
config system snmp community
    edit 1
        set name "test"
        config hosts
            edit 1
                set source-ip 192.168.0.1
                set ip 192.168.0.2 255.255.255.255
            next
        end
        set query-v1-status disable
        set trap-v1-status disable
    next
end

 

3. 인터페이스의 SNMP 설정 적용

 

ㅇ 방문 일: 24년 1월 21일

ㅇ 먹은메뉴: 우동정식, 매콤우유속바정식, 삼동냉소바, 유부초밥

ㅇ 주소:  경기 성남시 분당구 안양판교로828번길 20 1층

ㅇ 방문 소감

  - 너무 분당 끝에 있어서 가기가 불편해요.

  - 아이의자 없어요.

  - 아이들이 우동을 맛있게 먹었어요.

  - 냉소바도 첫째가 맛있게 먹었어요.

  - 유부초밥도 맛있어요.

'국내여행 및 맛집 > 성남' 카테고리의 다른 글

고짜진심  (0) 2024.05.24
소코아  (0) 2023.11.29
백소정  (0) 2023.11.29

AD 계정 삭제 명령어

dsrm "cn=홍길동, ou=test, dc=ksm, dc=com"

 

ip 주소를 cmd 창에서 입력을 하려고 하는데, 랜카드 이름을 지정할 수 있는 방법이 없을까 찾아보다 스크립트로 확인할 수 있는 방법을 찾아 기록합니다.

 

@echo on

chcp 949

for /f "tokens=5,6 delims= " %%a IN ('netsh interface ipv4 show interface ^| findstr 이더 ^| findstr /v dis') do set result=%%a %%b

if "%result%" =="이더넷 " (
for /f "tokens=5 delims= " %%a IN ('netsh interface ipv4 show interface ^| findstr 이더 ^| findstr /v dis') do set result1=%%a
echo netsh interface ipv4 set address name="%result1%" static 192.168.100.161 255.255.255.0 192.168.100.1
echo netsh interface ipv4 set dns name="%result1%" static 8.8.8.8
echo netsh interface ipv4 add dns name="%result1%" 8.8.4.4 index=2
) else (
echo netsh interface ipv4 set address name="%result%" static 192.168.100.161 255.255.255.0 192.168.100.1
echo netsh interface ipv4 set dns name="%result%" static 8.8.8.8
echo netsh interface ipv4 add dns name="%result%" 8.8.4.4 index=2
)

'기술 노트 > Windows' 카테고리의 다른 글

Windows 로그인 OTP 적용하기  (1) 2024.10.10
계정 비밀번호 암호화하기  (0) 2023.12.12
virtualbox 설치하기  (0) 2023.09.27
Windows PC 시간 예약해서 끄기  (0) 2023.06.23
가상 OS 설치하기  (0) 2023.05.10

+ Recent posts