Creare azioni personalizzate
Nella tua prima integrazione personalizzata, hai definito i parametri e creato un'azione Ping per testare la connessione. Questo documento spiega come creare due nuove azioni per l'integrazione personalizzata:
- Ottieni dettagli dominio: recupera le informazioni sul dominio e presenta il risultato in formato JSON.
- Arricchisci entità: arricchisce le entità con i dettagli del dominio.
Creare un'azione personalizzata
Per creare un'azione personalizzata:
- Vai all'ambiente di sviluppo integrato (IDE) e fai clic su Aggiungi per aggiungere un nuovo elemento IDE.
- Seleziona il pulsante di opzione Azione.
- Assegna all'azione il nome
Get Domain Details
e seleziona l'integrazione. - Fai clic su Crea. L'IDE genera un nuovo modello con commenti ed spiegazioni del codice integrati.
Configurare i parametri dell'azione
In base alla documentazione dell'API WHOIS XML, l'azione Recupera dettagli dominio richiede due parametri: Check Availability
e Domain Name
. Per configurare questi parametri:
- Nel modulo IDE, fai clic su Aggiungi.
- Crea il primo parametro: compila i campi per Verifica disponibilità e fai clic su Salva. Questo parametro indica se il dominio è disponibile o meno e il risultato verrà utilizzato nell'automazione che creerai in un secondo momento.
- Crea il secondo parametro: compila i campi per Nome dominio e fai clic su Salva. Utilizza questo campo per inserire il dominio che vuoi che l'azione controlli.
Modifica l'azione Recupera dettagli dominio
Per modificare l'azione Ottieni dettagli dominio:
-
Copia il codice fornito per Get Domain Details e incollalo nell'IDE. Rivedi il codice. L'oggetto deve utilizzare il metodo
end
della classe per restituire un messaggio di output e un valore di risultato, ad esempio:
siemplify.end(msg, None)
-
Estrai i parametri di integrazione e azione: i parametri di integrazione,
come la chiave API, vengono estratti utilizzando la funzione
siemplify.extract_configuration_param
. Allo stesso modo, i parametri di azione che hai configurato, inclusiDomain Name
eCheck availability
, vengono estratti con la funzionesiemplify.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)
- Crea la richiesta ed elabora il risultato:
- Dopo aver estratto i parametri di integrazione e azione, puoi creare l'URL della richiesta. L'URL viene creato in base al valore booleano del parametro
availability_check
. - Una volta pronto l'URL, invia una richiesta al sito WHOIS.
- Analizza la risposta del sito e aggiungi i dati pertinenti al risultato dell'azione.
- Definisci il messaggio di output che verrà presentato all'utente e includi il risultato 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()
Aggiungi un risultato JSON all'azione
Nell'ambito dell'azione Ottieni dettagli dominio, fai clic su Ottieni dettagli dominio per aggiungere un esempio JSON. Utilizza l'esempio JSON nel designer del playbook nella procedura "Crea la tua prima automazione" per estrarre un campo specifico nel JSON.
- Recupera il JSON: copia il JSON dall'esempio JSON del sito WHOIS.
- Attiva l'icona JSON: nella scheda Dettagli dell'IDE, attiva il pulsante di attivazione/disattivazione Includi risultato JSON per rendere visibile l'icona JSON nella parte superiore dell'IDE.
- Importa il file JSON: fai clic su file_json Gestisci esempio JSON > login Importa esempio JSON.
Testare l'azione
Per testare l'azione che hai creato:
- Vai alla scheda Test.
- In Ambito, seleziona lo Scenario di test e l'Istanza di integrazione.
- Fai clic su presentazione Riproduci nell'IDE.
- Visualizza il risultato dell'azione nella scheda Test. Puoi anche esaminare i log e le stampe selezionando la scheda Output di debug al termine del test.
Creare uno scenario di test
Se non hai casi di test nel tuo ambiente, vai a Casi > Inserisci avviso come caso di test per crearne uno. Questa azione crea uno scenario di test che viene visualizzato con l'etichetta Test nella coda delle richieste. Dopo aver creato lo scenario di test, torna all'IDE e scegli lo scenario di test dall'elenco.
Per creare uno scenario di test:
- Vai alla pagina Richieste e seleziona una richiesta.
- Importa l'avviso come scenario di test. Viene creato un nuovo caso con l'etichetta Test nella coda dei casi.
Dopo aver creato un caso di test, torna all'IDE e selezionalo dall'elenco.
Crea un'azione di arricchimento
Questa parte della procedura si concentra sulla creazione di un'azione di arricchimento per aggiungere nuovi dati alle entità. I dati arricchiti possono poi essere visualizzati in Esplora entità. Per creare un'azione di arricchimento:
-
Nell'IDE, crea una nuova azione e chiamala
Enrich Entities
. - Copia e incolla il seguente codice nell'azione:
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()
- Estrai i parametri. Lo script estrae la chiave API dalla configurazione dell'integrazione. Questa chiave è necessaria per autenticare le richieste all'API WHOIS XML.
- Identifica le entità target. Lo script identifica le entità da elaborare. Esegue l'iterazione su tutte le entità e si concentra solo su due tipi:
- Nomi host non interni
- URL
-
Scansiona il dominio e definisci il passaggio di arricchimento dell'azione e il messaggio di output. Questa azione viene eseguita in un ambito Entità e, pertanto, non richiede la configurazione di parametri specifici, che sono già incorporati nel codice:
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)
- Attiva l'azione e fai clic su Salva. Ora hai creato un'integrazione personalizzata con tre azioni personalizzate:
- Un'azione Ping per testare la connessione al prodotto API WHOIS XML.
- Un'azione Ottieni dettagli dominio per estrarre i dati relativi a un dominio e presentarli come risultato JSON.
- Un'azione Arricchisci entità per aggiungere dati aggiuntivi alle entità di destinazione, che puoi visualizzare nel modulo Esplora entità.
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
Ora puoi creare la tua prima automazione utilizzando le azioni che hai personalizzato.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.