Crea un'integrazione personalizzata
Questo documento spiega come creare integrazioni personalizzate all'interno dell'ambiente di sviluppo integrato (IDE) utilizzando la stessa struttura delle integrazioni commerciali. Puoi trovare e configurare integrazioni personalizzate nell'hub dei contenuti per vari ambienti. Puoi quindi utilizzarli in playbook, azioni manuali e agenti remoti. Sono supportate anche le funzionalità di importazione ed esportazione, in modo simile ad altri elementi dell'IDE.
Crea un'integrazione personalizzata nell'IDE
Puoi creare un'integrazione personalizzata per il prodotto Armis e creare un gestore insieme a un'azione Ping. Per questa procedura si presuppone la conoscenza di Python e della programmazione orientata agli oggetti.
Caso d'uso: creare un'integrazione Armis personalizzata
Per creare l'integrazione personalizzata nell'IDE:
- Nel menu principale, vai a Risposta > IDE.
- Fai clic su Crea nuovo elemento e seleziona Integrazione.
- Inserisci un nome e fai clic su Crea.
L'integrazione è ora elencata con l'opzione Impostazioni Impostazioni, a indicare che si tratta di un'integrazione personalizzata.
Fai clic su Impostazioni Impostazioni per visualizzare le impostazioni di integrazione in cui puoi definire l'icona, la descrizione, le dipendenze Python e i parametri di integrazione.
Se un pacchetto di dipendenze non ha un file wheel precompilato (.WHL)
disponibile per l'architettura manylinux_2_17_x86_64 o se
hai bisogno di una versione specifica del codice sorgente, puoi fornire un URL diretto al
codice sorgente (ad esempio, un file .tar.gz). Il resolver delle dipendenze della piattaforma, uv, supporta la definizione di questi URL di origine nella tabella [tool.uv.sources] all'interno del file pyproject.toml. Ad esempio:
[project] # ... other project fields ... [tool.uv.sources] compressed-rtf = { url = "https://files.pythonhosted.org/packages/.../compressed_rtf-1.0.6.tar.gz" } dkimpy = { url = "https://files.pythonhosted.org/packages/.../dkimpy-1.1.8.tar.gz" }
Per maggiori dettagli sulla definizione di diversi tipi di dipendenze utilizzando
uv, consulta la documentazione di uv sulla gestione delle dipendenze.
Flusso di lavoro consigliato: gestione avanzata delle dipendenze utilizzando mp CLI
Per le integrazioni che richiedono librerie esterne complesse o multilivello come TIPCommon, Google consiglia di ignorare completamente i caricamenti manuali dell'IDE e di svilupparle localmente utilizzando lo strumento Marketplace CLI (mp). Questo strumento monitora e pacchettizza automaticamente le dipendenze nidificate utilizzando il gestore di pacchetti uv.
Prerequisiti
- Python 3.11 o versioni successive installato sulla tua macchina di sviluppo locale.
- Il gestore dei pacchetti Python
uvinstallato (consulta la guida all'installazione di uv).
Configurazione iniziale
- Crea un fork e clona il repository ufficiale dell'hub dei contenuti nel tuo ambiente locale.
-
Installa lo strumento
mputilizzandouv:uv tool install mp --from git+https://github.com/chronicle/content-hub.git#subdirectory=packages/mp
-
Accedi al tuo ambiente Google SecOps utilizzando l'URL radice dell'istanza e la chiave API precedente:
mp login --api-root https://{YOUR_INSTANCE}.siemplify-soar.com --api-key {YOUR_LEGACY_API_KEY}
-
Configura il percorso del repository principale locale:
mp config --root-path /path/to/cloned/content-hub
-
Crea una sottodirectory personalizzata per le tue integrazioni proprietarie all'interno del layout del repository all'indirizzo:
content-hub/content/response_integrations/custom/
Aggiungere dipendenze comuni o complesse a un'integrazione
Se hai un'integrazione creata nell'IDE che richiede
TIPCommon o altre librerie multilivello, utilizza il seguente flusso di lavoro locale
per gestire le sue dipendenze in modo sicuro:
-
Vai alla directory di integrazione personalizzata all'interno del repository clonato:
cd content-hub/content/response_integrations/custom/
-
Estrai la struttura di integrazione esistente dall'istanza Google SecOps:
mp pull --type integration --name "{INTEGRATION_NAME}"
-
Passa alla cartella dell'integrazione appena estratta:
cd {INTEGRATION_NAME}
-
Utilizza
uvper inserire il pacchetto di file wheelTIPCommonrichiesto. In questo modo vengono monitorati e scaricati automaticamente i wheel delle sottodipendenze nidificate nella configurazione del pacchetto dell'ambiente locale:uv pip install /path/to/wheels/TIPCommon-your-version-py3-none-any.whl
-
Esegui il push dell'integrazione completamente compilata insieme al relativo albero delle dipendenze appena monitorato
nella tua istanza Google SecOps:
mp push --type integration --name "{INTEGRATION_NAME}"
Verifica dell'installazione
Per verificare che le dipendenze siano state pacchettizzate correttamente senza riscontrare un ciclo errorCode: 2000:
- Apri l'integrazione personalizzata all'interno dell'IDE.
- Aggiungi una riga di test per importare un modulo dal pacchetto, ad esempio:
from TIPCommon.extraction import extract_action_param - Fai clic sul pulsante Test/Riproduci per eseguire il debug dell'esecuzione. Se lo script
viene compilato senza errori e senza generare un
ModuleNotFoundError, le dipendenze nidificate vengono risolte correttamente.
Creare un gestore personalizzato
I gestori sono wrapper per le API di strumenti di terze parti. Sebbene non siano obbligatori, li consigliamo per le integrazioni che interagiscono con strumenti esterni. I gestori non devono importare dall'SDK. Dopo la creazione, importali in connettori, azioni e job.
Per creare un gestore personalizzato:
- Nell'IDE, fai clic su Crea nuovo elemento e seleziona Manager.
- Seleziona l'integrazione Armis e inserisci il nome di un manager.
- Modifica ed esegui lo script seguente:
import requests
class ArmisManager:
def init(self, api_root, api_token):
self.api_root = api_root
self.api_token = api_token
self.session = requests.session()
self.session.headers = {"Accept": "application/json"}
def auth(self):
endpoint = "{}/api/vi/access_token/*"
params = {"secret_key" : self.api_token}
response = self.session.post(endpoint.format(self.api_root), params=params)
self.validate_response(response)
access_token = response.json()["data"]["access_token"]
self.session.headers.update({"Authorization": access_token})
return True
def get_device_by_ip(self, device_ip):
endpoint = "{}/api/vi/devices/"
params = {"ip": device_ip}
response = self.session.get(endpoint.format(self.api_root), params=params)
self.validate_response(response)
return response.json()["data"]["data"]
@staticmethod
def validate_response(res, error_msg="An error occurred"):
"""Validate a response
:param res: (requests. Response) The response to validate
:param error_msg: (str) The error message to display
"""
try:
res.raise_for_status()
except requests.HTTPError as error:
raise Exception("(error_msg): (error) (text)".format(
error_msg=error_msg,
error=error,
text=error.response.content
))
Parametri, configurazione di Google SecOps Content Hub e azione Ping
I parametri definiti nelle impostazioni di integrazione vengono visualizzati nella configurazione di Google SecOps Content Hub. I parametri includono:
- Radice API: l'URL di base del servizio a cui ti stai connettendo.
- API Secret: una chiave riservata utilizzata per autenticare l'applicazione con il servizio.
- Casella di controllo Verifica SSL: se selezionata, verifica che il certificato SSL per la connessione al server Armis sia valido.
- Casella di controllo Esegui da remoto: un'impostazione che determina se il codice o l'attività verrà eseguito su un server remoto anziché localmente. Quando questa opzione è attiva, il sistema invia le istruzioni e i dati necessari a un server dedicato per l'elaborazione.
Per aggiornare i parametri:
- Inserisci le credenziali corrette.
- Fai clic su Salva > Test.
Se l'azione Ping non è presente, il pulsante Test non funziona e viene visualizzata una X rossa.
Implementare un'azione Ping
La logica dell'azione Ping funziona come un'autenticazione riuscita.
Per implementare un'azione Ping:
- Nell'IDE, crea una nuova Azione nell'integrazione Armis denominata
Ping. - Utilizza il metodo
ArmisManagerauthper verificare l'autenticazione.
Attivare l'integrazione
Per abilitare l'integrazione:
- In Response > IDE, fai clic sul pulsante di attivazione/disattivazione Attiva/Disattiva in modo che sia impostato su ON.
- Fai clic su Salva. Un pulsante verde conferma l'operazione riuscita. Le credenziali dell'hub dei contenuti vengono trasmesse ad ArmisManager. Se
authviene completato senza errori, il pulsante Test mostra un segno di spunta verde.
Utilizza il metodo extract_configuration_param per importare i parametri dalla configurazione dell'integrazione. In alternativa, utilizza extract_action_param per definire i parametri all'interno dell'azione stessa. Tuttavia, l'azione Ping deve sempre utilizzare i parametri di configurazione, in quanto vengono testati dall'hub dei contenuti.
Visualizzare le integrazioni personalizzate
Vai all'hub dei contenuti e cerca l'integrazione personalizzata che hai creato. Se non hai creato un'immagine durante la configurazione iniziale, verrà assegnata l'immagine personalizzata predefinita. Tieni presente che gli aggiornamenti dell'hub dei contenuti non sostituiscono né eliminano le integrazioni personalizzate.
Esportazione e importazione nell'IDE
Esegui una delle seguenti operazioni:
- Per importare le integrazioni:
- Carica un file ZIP con la struttura di cartelle corretta. L'integrazione viene visualizzata nell'IDE e nell'hub dei contenuti.
- Fai clic su Importa. L'integrazione viene visualizzata sia nell'IDE che nell'Hub dei contenuti.
- Il sistema genera un file ZIP contenente la definizione, gli script e la configurazione. La cartella Gestori non è inclusa automaticamente.
- Per esportare le integrazioni:
- Fai clic su Esporta per scaricare il pacchetto.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.