실시간 탐지 시나리오 생성

새 실시간 탐지 시나리오를 생성합니다. 기존 시나리오의 설정은 실시간 탐지 시나리오 수정 API로 변경할 수 있습니다.

필요 권한

관리자 이상의 계정으로 이용할 수 있습니다.

HTTP 요청

POST /api/sonar/stream-rules
cURL 예시
curl -H "Authorization: Bearer <API_KEY>" \
     -d priority="HIGH" \
     -d name="알려진 봇넷 대역 접속" \
     -d msg="알려진 봇넷 대역 접속: $dst_ip" \
     -d schema_code="session" \
     -d logger_guids="a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
     -d commands="[{'template_id': 3, 'field_name': 'dst_ip', 'args': {'subnet': '697393b6-aecf-4e9d-a32c-8724cd8f067e'}, 'query': 'matchnet field=dst_ip guid=697393b6-aecf-4e9d-a32c-8724cd8f067e verify=f'}]" \
     -X POST \
     https://HOSTNAME/api/sonar/stream-rules
요청 매개변수
필수타입설명비고
priorityO문자열중요도LOW, MEDIUM, HIGH 중 하나
nameO문자열실시간 탐지 시나리오 이름최소 1자, 최대 255자
msgO문자열메시지 템플릿최소 1자, 최대 2,000자. $field 형식의 매크로 사용 가능
schema_codeO문자열정규화 스키마 식별자최소 1자, 최대 50자
commandsO객체 배열탐지 명령어 목록1개 이상 필요. 하단 설명 참조
guidX문자열실시간 탐지 시나리오 GUID36자. 미지정 시 무작위 생성
descriptionX문자열실시간 탐지 시나리오 설명최대 2,000자
enabledX불리언탐지 활성화 여부미지정 시 기본값 true
category_guidX문자열시나리오 분류 GUID36자
source_typeX문자열탐지 대상LOGGER 또는 LOGGER_MODEL. 미지정 시 LOGGER
logger_guidsX문자열 목록수집기 GUID 목록source_typeLOGGER인 경우 필수. 쉼표(,)로 구분
logger_model_guidsX문자열 목록수집기 모델 GUID 목록source_typeLOGGER_MODEL인 경우 필수. 쉼표(,)로 구분
address_group_guidX문자열주소 그룹 GUID36자
address_fieldX문자열주소 필드주소 그룹에 등록할 필드 이름. 최대 50자
ticket_repo_guidX문자열티켓 분류 GUID미설정 시 티켓이 발행되지 않음. 36자
ticket_suppress_intervalX32비트 정수중복 티켓 축약 기간초 단위. 0 또는 미설정 시 동일 티켓을 병합하지 않음
event_suppress_intervalX32비트 정수중복 이벤트 제거 기간초 단위. 0 또는 미설정 시 중복 이벤트를 제거하지 않음
suppress_keyX문자열중복 기준 필드$field 형식의 매크로 사용 가능. 최대 2,000자
keep_aliveX불리언축약 타이머 유지 여부축약 타이머 유지 시 true, 초기화 시 false
audit_category_guidX문자열소명 분류 GUID36자
reviewer_guidX문자열소명 1차 검토자 계정 GUID36자
auditor_guidX문자열소명 2차 검토자 계정 GUID미설정 시 부서장 전결. 36자
audit_daysX32비트 정수소명 제출 마감 시한일 단위
employee_key_fieldX문자열사번 필드 이름최대 50자
alarm_group_guidX문자열알람 그룹 GUID36자
field_orderX문자열근거 자료 필드 출력 순서쉼표로 구분된 필드 이름 목록. 최대 2,000자. \| 문자 사용 불가
user_noteX문자열시나리오 요약 정보

commands의 각 배열 요소는 아래와 같이 정의합니다:

commands 객체 속성

  • template_id (32비트 정수, 필수): 실시간 탐지 명령어 템플릿 ID
  • query (문자열, 필수): 인자가 반영된 부분 쿼리 문자열
  • field_name (문자열): 대상 필드 이름
  • args (맵): 인자 키/값 쌍
  • invert (불리언): true인 경우 NOT 조건

정상 응답

{
  "guid": "3b05608f-8dd0-4218-9d6d-391515b6280d"
}
  • guid (문자열): 생성된 실시간 탐지 시나리오 GUID

오류 응답

필수 매개변수가 누락된 경우

HTTP 상태 코드 400 응답

{
  "error_code": "null-argument",
  "error_msg": "name should be not null"
}
매개변수 값의 길이가 잘못된 경우

HTTP 상태 코드 400 응답

{
  "error_code": "invalid-argument",
  "error_msg": "'name' must be shorter than or equal to 255 characters."
}
잘못된 중요도 값을 사용한 경우

HTTP 상태 코드 400 응답

{
  "error_code": "invalid-argument",
  "error_msg": "priority should be one of 'LOW', 'MEDIUM', 'HIGH'."
}
식별자가 GUID 형식이 아닌 경우

HTTP 상태 코드 400 응답

{
  "error_code": "invalid-param-type",
  "error_msg": "category_guid should be guid type."
}
탐지 대상이 LOGGER인데 수집기 목록이 누락된 경우

HTTP 상태 코드 400 응답

{
  "error_code": "null-argument",
  "error_msg": "logger_guids should be not null"
}
탐지 명령어 목록이 유효한 JSON 형식이 아닌 경우

HTTP 상태 코드 400 응답

{
  "error_code": "invalid-argument",
  "error_msg": "'commands' parameter should follow valid JSON syntax"
}
field_order에 파이프 문자가 포함된 경우

HTTP 상태 코드 400 응답

{
  "error_code": "invalid-argument",
  "error_msg": "field_order doesn't allow pipe characters."
}
탐지 명령어가 하나도 없는 경우

HTTP 상태 코드 500 응답

{
  "error_code": "illegal-state",
  "error_msg": "cannot create rule with empty command: 알려진 봇넷 대역 접속"
}
정규화 스키마가 존재하지 않는 경우

HTTP 상태 코드 500 응답

{
  "error_code": "illegal-state",
  "error_msg": "schema not found: session"
}
시나리오 이름이 중복된 경우

HTTP 상태 코드 500 응답

{
  "error_code": "illegal-state",
  "error_msg": "duplicated stream rule name: 알려진 봇넷 대역 접속"
}
권한이 없는 경우

HTTP 상태 코드 500 응답

{
  "error_code": "illegal-state",
  "error_msg": "no-permission"
}