ServiceNow 대상(커스텀 웹훅)

Panther의 커스텀 웹훅 옵션을 사용하여 ServiceNow 알러트 설정하기

개요

ServiceNow 콘솔에서 간단한 Scripted Rest API 구성을 통해 Panther에서 발생한 알러트를 새 인시던트로 직접 매핑할 수 있습니다. 알러트의 내용을 다음으로 사용자화할 수 있습니다 Python 디텍션의 alert 함수YAML 디텍션의 동적 알러트 키.

Panther 알러트에서 티켓을 생성하도록 ServiceNow를 구성하는 방법

Panther 알러트에서 티켓을 생성하도록 ServiceNow를 구성하려면 ServiceNow에서 Scripted REST API를 생성한 다음 ServiceNow 전달 URL을 사용하여 Panther에서 사용자 지정 웹훅 알러트 대상(destination)을 생성합니다.

circle-info

이 프로세스에 대한 추가 정보는 ServiceNow 문서에서 확인할 수 있습니다: 웹훅을 ServiceNow에 통합하는 방법arrow-up-right.

사전 요구 사항

  • 완료하려면 이 프로세스의 1단계ServiceNow에서 Scripted REST API를 생성하려면 ServiceNow 사용자에게 다음 권한이 있어야 합니다 web_service_admin 역할을 가져야 합니다.

1단계: ServiceNow에서 Scripted REST API 생성

circle-info

ServiceNow 문서에서 Scripted REST API에 대해 자세히 알아보세요: Scripted REST APIarrow-up-right.

  1. ServiceNow 콘솔에서 왼쪽 상단의 모든 탭을 클릭합니다.

  2. 다음을 확장합니다 System Web ServicesScripted Web Services 네비게이션에서, 그런 다음 Scripted REST APIs를 클릭합니다. In the ServiceNow console, the "All" tab is selected at the top. In the navigation menu, System Web Services is expanded, and Scripted REST APIs is highlighted.

  3. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 새로 만들기 오른쪽 상단.

  4. 이름과 ID를 선택합니다. 예: Panther Incident Creationpanther_incident_creation를 각각 클릭하세요. The image shows the form to create a new Scripted REST Service in ServiceNow. It contains fields for Name, API ID, Protection Policy, Application, and API namespace.

  5. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 제출.

  6. Scripted Rest API 페이지에서 방금 생성한 이름을 검색합니다. 하이퍼링크된 이름을 클릭합니다.

  7. 페이지 하단 근처에서 리소스 탭을 클릭합니다. 을 클릭하세요 새로 만들기 오른쪽 상단의 버튼.

  8. 다음을 작성하세요 Scripted REST 리소스 알러트 페이지:

    • 이름: 설명적인 이름을 입력합니다. 예: Panther_Alert. The image shows the Scripted REST Resource configuration page in Service Now. The "Name" field has a red circle around it, and it is filled in with "Panther_Alert".

    • HTTP 메서드: POST를 선택합니다.

    • 스크립트: 아래 스키마 코드를 붙여넣습니다:

      • (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        
        	// 서로 다른 필드를 준비합니다 
        	var data = request.body.data;
        	var title = data.title;
        	var alert = JSON.stringify(data);
        	var alertContext = JSON.stringify(data.alertContext);
        	var severity = data.severity;
        	var link = data.link;
        	var runbook = data.runbook;
        	var type = data.type;
        	var alertId = data.alertId;
        	
        	var grIncident = new GlideRecord('incident');
        
        	grIncident.initialize();
        	
        	grIncident.setValue('short_description', title);
        	grIncident.setValue('description', alert );
        	grIncident.setValue('category', type);
        	grIncident.setValue('subcategory', alertId);
        	
        	// 긴급도를 Panther 심각도로 매핑
        	if (severity == "CRITICAL" || severity == "HIGH") {
        		grIncident.setValue('urgency','1');
        		grIncident.setValue('impact','1');
        	} else if (severity == "LOW" || severity == "MEDIUM") {
        		grIncident.setValue('urgency','2');
        	} else {
        		grIncident.setValue('urgency','3');
        	}
        	
        	//grIncident.insert();
        	var recResponse = grIncident.insert(handleResponse);
        
        	function handleResponse(recResponse, answer) {
        	// Answer는 생성된 레코드의 sys_id이거나 null입니다
        	alert('새로 생성된 sys_id는 - ' + answer + ' 존재합니다');
        	}
        
        	var url = gs.getProperty('glide.servlet.uri');
        
                // API의 응답을 구성합니다. 이 예제는 위에서 생성된 인시던트 ID를 반환합니다.
        	var body = {};
        	body.sys_id = recResponse;
        	body.link = url + "task.do?sys_id=" + recResponse;
        	response.setBody(body);
        	
        	// 대상 통합을 생성하고 테스트할 때 Panther에서 보내는 예제 테스트 이벤트
        	//{"id":"Test.Alert","createdAt":"2022-04-26T03:17:32.099054303Z","severity":"INFO","type":"RULE","link":"https://domain.runpanther.net","title":"This is a Test Alert","name":"Test Alert","alertId":"Test.Alert","alertContext":{},"description":"This is a Test Alert","runbook":"Stuck? Check out our docs: https://docs.runpanther.io","tags":["test"],"version":"abcdefg"}
        
        })(request, response);
      • 다음 보안 탭에서 다음 옆의 확인란을 선택 해제합니다 인증 필요. The Security tab is displayed in ServiceNow. The "Requires Authentication" box is circled, and the box next to it is not checked.

  9. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 제출.

circle-exclamation

2단계: Panther에서 사용자 지정 웹훅 통합 생성

  1. Panther 콘솔의 왼쪽 탐색 창에서 구성 > 알러트 대상.

  2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. +첫 번째 대상 추가.

    • 이미 대상(Destinations)을 생성한 경우, 새로 만들기 페이지 오른쪽 상단에서 새 대상을 추가하려면 클릭하세요.

  3. 을 클릭하세요 커스텀 웹후크 타일을 클릭합니다.

  4. 페이지에서 웹훅 대상 구성 페이지에서 양식을 작성하세요:

    • 표시 이름: 설명적인 이름을 입력하십시오.

    • 커스텀 웹훅 URL: 커스텀 웹훅 전달 URL을 입력하세요.

      • 웹훅 URL 형식은 다음과 같습니다: https://<your_domain>.service-now.com/<base_api_path>

      • 이 값은 ServiceNow 콘솔의 다음 값을 결합하여 생성할 수 있습니다:

        • 브라우저 주소 표시줄의 도메인

        • 다음의 값 기본 API 경로 필드

          The servicenow console is shown, with various fields visible, like Name and API ID. Two areas are highlighted: the domain in the URL address bar, and the Base API path field.
    • 심각도 수준: 이 대상으로 전송할 알러트의 심각도 수준을 선택하세요.

    • 기본 알러트 유형(Default Alert Types): 이 대상으로 전송할 알러트 유형을 선택하세요.

    • 로그 유형: 기본적으로 모든 로그 유형으로부터의 알러트를 전송합니다. 특정 로그 유형에서만 알러트를 전송하려면 여기서 로그 유형을 지정하세요.

    • 수동 발송 허용: 이 토글을 ON으로 설정하면 이 대상에 대해 알러트를 수동으로 전송arrow-up-right 할 수 있습니다. In the Panther Console, the "Configure your Custom Webhook Destination" page is displayed. It contains fields for Display Name, Custom Webhook URL, Severity, Alert Types, and Log Types.

  5. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 대상 추가(Add Destination).

  6. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 테스트 알러트 전송(Send Test Alert) 모든 것이 올바르게 작동하는지 확인하십시오.

    • 테스트 이벤트가 이제 ServiceNow 인시던트 테이블에 존재해야 합니다. The image shows the Incidents Table in ServiceNow. There is a test event highlighted in the list.

  7. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 설정 완료.

예시

을 클릭하세요 테스트 알러트 버튼을 눌러 알러트를 생성하고 ServiceNow로 전송합니다; 알러트 페이로드는 아래에 표시됩니다:

알러트가 ServiceNow에 수신되면 ServiceNow 인시던트 테이블에 인시던트가 생성됩니다:

The Incident Table in ServiceNow contains a test alert.

마지막 업데이트

도움이 되었나요?