맞춤 작업 만들기
첫 번째 맞춤 통합에서 매개변수를 정의하고 연결을 테스트하는 Ping 작업을 만들었습니다. 이 문서에서는 맞춤 통합을 위해 다음 두 가지 작업을 새로 만드는 방법을 안내합니다.
- 도메인 세부정보 가져오기: 도메인 정보를 가져와 결과를 JSON 형식으로 표시합니다.
- 항목 보강: 도메인 세부정보로 항목을 보강합니다.
커스텀 작업 만들기
맞춤 작업을 만들려면 다음 단계를 따르세요.
- 통합 개발 환경 (IDE)으로 이동하여 추가를 클릭하여 새 IDE 항목을 추가합니다.
- 작업 라디오 버튼을 선택합니다.
- 작업 이름을
Get Domain Details
로 지정하고 통합을 선택합니다. - 만들기를 클릭합니다. IDE에서 내장 코드 주석과 설명이 포함된 새 템플릿을 생성합니다.
작업 매개변수 구성
WHOIS XML API 문서에 따르면 도메인 세부정보 가져오기 작업에는 Check Availability
및 Domain Name
의 두 매개변수가 필요합니다. 이러한 매개변수를 구성하려면 다음 단계를 따르세요.
- IDE 모듈에서 추가를 클릭합니다.
- 첫 번째 매개변수 만들기: 사용 가능 여부 확인 필드를 작성하고 저장을 클릭합니다. 이 매개변수는 도메인의 사용 가능 여부를 나타내며, 이 결과는 나중에 만드는 자동화에서 사용됩니다.
- 두 번째 매개변수 만들기: 도메인 이름 필드를 입력하고 저장을 클릭합니다. 이 필드를 사용하여 작업에서 확인할 도메인을 입력합니다.
도메인 세부정보 가져오기 작업 수정
도메인 세부정보 가져오기 작업을 수정하려면 다음 단계를 따르세요.
-
제공된 Get Domain Details 코드를 복사하여 IDE에 붙여넣습니다. 코드를 검토합니다. 객체는 클래스의
end
메서드를 사용하여 출력 메시지와 결과 값을 반환해야 합니다. 예를 들면 다음과 같습니다.
siemplify.end(msg, None)
-
통합 및 작업 매개변수 추출:
siemplify.extract_configuration_param
함수를 사용하여 API 키와 같은 통합 매개변수를 추출합니다. 마찬가지로Domain Name
및Check availability
을 비롯하여 구성한 작업 매개변수는siemplify.extract_action_param
함수를 사용하여 추출됩니다.api_key = siemplify.extract_configuration_param(provider_name=INTEGRATION_NAME, param_name="API Key") url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={api_key}&outputFormat=json" domain = siemplify.extract_action_param(param_name="Domain Name", print_value=True) availability_check = siemplify.extract_action_param(param_name="Check availability", is_mandatory=False, print_value=True)
- 요청을 빌드하고 결과를 처리합니다.
- 통합 및 작업 매개변수를 추출한 후 요청 URL을 빌드할 수 있습니다. URL은
availability_check
매개변수의 불리언 값을 기반으로 구성됩니다. - URL이 준비되면 WHOIS 사이트에 요청을 보냅니다.
- 사이트의 응답을 파싱하고 관련 데이터를 작업의 결과에 추가합니다.
- 사용자에게 표시될 출력 메시지를 정의하고 JSON 결과를 포함합니다.
# Add domain to scan url = f"{url}&domainName={domain}" # Determine availability check if availability_check.lower() == 'true': availability_check_qs = 1 else: availability_check_qs = 0 url = f"{url}&da={availability_check_qs}" response = requests.get(url) response.raise_for_status() # Add a Json result that can be used in the next steps of the playbook. siemplify.result.add_result_json(response.json()) # Add the Json to the action result presented in the context details. siemplify.result.add_json("WhoisDetails", response.json()) msg = f"Fetched data for {domain}" siemplify.end(msg, None) if __name__ == "__main__": main()
작업에 JSON 결과 추가
도메인 세부정보 가져오기 작업의 일부로 도메인 세부정보 가져오기를 클릭하여 JSON 예시를 추가합니다. 첫 번째 자동화 만들기 절차의 플레이북 디자이너에 있는 JSON 예시를 사용하여 JSON에서 특정 필드를 추출합니다.
- JSON 가져오기: WHOIS 사이트의 JSON 예에서 JSON을 복사합니다.
- JSON 아이콘 사용 설정: IDE의 세부정보 탭에서 JSON 결과 포함 전환 버튼을 사용 설정하여 IDE 상단에 JSON 아이콘이 표시되도록 합니다.
- JSON 가져오기: file_json JSON 샘플 관리 > login JSON 예시 가져오기를 클릭합니다.
작업 테스트
만든 작업을 테스트하려면 다음 단계를 따르세요.
- 테스트 탭으로 이동합니다.
- 범위에서 테스트 사례와 통합 인스턴스를 선택합니다.
- IDE에서 슬라이드쇼 재생을 클릭합니다.
- 테스트 탭에서 작업의 결과를 확인합니다. 테스트가 완료된 후 디버그 출력 탭을 확인하여 로그와 출력을 검토할 수도 있습니다.
테스트 사례 만들기
환경에 테스트 사례가 없는 경우 케이스 > 알림을 테스트 사례로 수집으로 이동하여 테스트 사례를 만듭니다. 이 작업은 케이스 대기열에 테스트 라벨과 함께 표시되는 테스트 케이스를 만듭니다. 테스트 사례를 만든 후 IDE로 돌아가 목록에서 테스트 사례를 선택합니다.
테스트 사례를 만들려면 다음 단계를 따르세요.
- 케이스 페이지로 이동하여 케이스를 선택합니다.
- 알림을 테스트 사례로 수집합니다. 그러면 케이스 대기열에 Test 라벨이 있는 새 케이스가 생성됩니다.
테스트 사례를 만든 후 IDE로 돌아가 목록에서 선택합니다.
보강 작업 만들기
이 절차에서는 엔티티에 새 데이터를 추가하기 위한 보강 작업을 만드는 데 중점을 둡니다. 그런 다음 엔티티 탐색기에서 풍부해진 데이터를 볼 수 있습니다. 강화 작업을 만들려면 다음 단계를 따르세요.
-
IDE에서 새 작업을 만들고 이름을
Enrich Entities
로 지정합니다. - 다음 코드를 복사하여 작업에 붙여넣습니다.
from SiemplifyAction import SiemplifyAction from SiemplifyUtils import output_handler from SiemplifyDataModel import EntityTypes import requests # Example Consts: INTEGRATION_NAME = "My first Integration - Whois XML API" SCRIPT_NAME = "WHOIS XML API EnrichEntities" @output_handler def main(): siemplify = SiemplifyAction() siemplify.script_name = SCRIPT_NAME siemplify.LOGGER.info("================= Main - Param Init =================") api_key = siemplify.extract_configuration_param(provider_name=INTEGRATION_NAME, param_name="API Key") url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={api_key}&outputFormat=json" siemplify.LOGGER.info("----------------- Main - Started -----------------") output_message = "output message :" # human readable message, showed in UI as the action result successful_entities = [] # In case this actions contains entity based logic, collect successful entity.identifiers for entity in siemplify.target_entities: siemplify.LOGGER.info(f"processing entity {entity.identifier}") if (entity.entity_type == EntityTypes.HOSTNAME and not entity.is_internal) or entity.entity_type == EntityTypes.URL: entity_to_scan = entity.identifier scan_url = f"{url}&domainName={entity_to_scan}" response = requests.get(scan_url) response.raise_for_status() register_details = response.json().get("WhoisRecord", {}).get("registrant", {}) if register_details: entity.additional_properties.update(register_details) successful_entities.append(entity) if successful_entities: output_message += "\n Successfully processed entities:\n {}".format("\n ".join([x.identifier for x in successful_entities])) siemplify.update_entities(successful_entities) # This is the actual enrichment (this function sends the data back to the server) else: output_message += "\n No entities where processed." result_value = len(successful_entities) siemplify.LOGGER.info("----------------- Main - Finished -----------------") siemplify.end(output_message, result_value) if __name__ == "__main__": main()
- 매개변수를 추출합니다. 스크립트는 통합의 구성에서 API 키를 추출합니다. 이 키는 WHOIS XML API에 대한 요청을 인증하는 데 필요합니다.
- 타겟 항목을 식별합니다. 스크립트는 처리할 항목을 식별합니다. 모든 항목을 반복하고 다음 두 가지 유형에만 집중합니다.
- 내부가 아닌 호스트 이름
- URL
-
도메인을 스캔하고 작업의 보강 단계와 출력 메시지를 정의합니다. 이 작업은 Entity 범위에서 실행되므로 특정 매개변수를 구성할 필요가 없습니다. 이는 이미 코드에 삽입되어 있습니다.
scan_url = f"{url}&domainName={entity_to_scan}" response = requests.get(scan_url) response.raise_for_status() register_details = response.json().get("WhoisRecord", {}).get("registrant", {}) if register_details: entity.additional_properties.update(register_details) successful_entities.append(entity) if successful_entities: output_message += "\n Successfully processed entities:\n {}".format("\n ".join([x.identifier for x in successful_entities])) siemplify.update_entities(successful_entities) # This is the actual enrichment (this function sends the data back to the server) else: output_message += "\n No entities where processed." result_value = len(successful_entities)
- 작업을 사용 설정하고 저장을 클릭합니다. 이제 다음과 같은 세 가지 맞춤 작업이 포함된 맞춤 통합이 만들어졌습니다.
- WHOIS XML API 제품에 대한 연결을 테스트하는 Ping 작업
- 도메인에 관한 데이터를 추출하고 JSON 결과로 표시하는 도메인 세부정보 가져오기 작업
- 엔티티 탐색기 모듈에서 확인할 수 있는 타겟 엔티티에 추가 데이터를 추가하는 엔티티 보강 작업
for entity in siemplify.target_entities:
siemplify.LOGGER.info(f"processing entity {entity.identifier}") if
(entity.entity_type == EntityTypes.HOSTNAME and not entity.is_internal) or
entity.entity_type == EntityTypes.URL: entity_to_scan = entity.identifier
이제 맞춤설정한 작업을 사용하여 첫 번째 자동화를 만들 준비가 되었습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.