Vai al contenuto principale
Estrazione dei dati da Tanium tramite API Gateway e GraphQL
Approfondimenti tecnologici

Estrazione dei dati da Tanium tramite API Gateway e GraphQL

Utilizzi l’API Gateway e GraphQL per potenziare le Sue applicazioni con i ricchi dati di Tanium

Tanium È una piattaforma incredibilmente potente e molti utenti potrebbero aver bisogno di estrarre dati da Tanium utilizzando i propri strumenti. Tanium Connect È sempre possibile esportare i dati e inviarli rispettivamente a un prodotto, a un server o a un file, ma talvolta gli utenti potrebbero aver bisogno di estrarre i dati manualmente anziché riceverli. Il nuovo API Gateway di Tanium può rendere questo processo un gioco da ragazzi. In questo blog vi mostrerò come effettuare l'accesso a Tanium tramite Python ed eseguire query sui dati delle macchine.

Requisiti

  • Un ambiente Tanium in cui è stata importata l'ultima versione della soluzione API Gateway. Questo blog è stato testato sulla versione 1,3,64,0000.
  • Python 3 with “requests” and “JSON” libraries

Autenticazione

Prima di poter iniziare a estrarre dati da Tanium, dovremo assicurarci di poter effettuare l'accesso. Sono disponibili due opzioni per effettuare l'accesso: utilizzando nome utente e password di Tanium oppure utilizzando un token API. L'accesso tramite nome utente e password non è possibile se effettua l'accesso tramite SSO o utilizza Tanium Cloud; pertanto, dovrà utilizzare un token API qualora ciò si verifichi nel Suo ambiente Tanium .

Creazione di un token API

Per creare un token API, Le consigliamo di accedere al Suo Tanium Server come di consueto e di individuare l’opzione “Token API” all’interno del menu “Amministrazione”.

[Nota: la creazione di token API richiede un’autorizzazione specifica; per ulteriori informazioni, si prega di consultare la documentazione di Tanium relativa ai token API disponibile qui.] (si apre in una nuova scheda)

Schermata 1: illustra dove creare i token API all’interno della console di Tanium
Schermata 1: Indicazione della procedura per la creazione dei token API

Dopo aver effettuato l'accesso alla pagina "Token API", potrà fare clic sul pulsante "Nuovo token API" situato sul lato destro dello schermo. Ciò Le consentirà di creare un token, specificarne la durata di validità e indicare quali indirizzi API sono autorizzati a utilizzare tale token API. Dopo aver compilato la finestra modale, apparirà un popup che mostrerà il token per un periodo di tempo limitato. La preghiamo di prendere nota del token, poiché non sarà più possibile visualizzarlo una volta chiuso il popup.

Accesso al sito Tanium tramite nome utente e password

Se il Suo ambiente Tanium non utilizza SSO per l'accesso, potrà utilizzare il Suo nome utente e la Sua password per autenticarsi e utilizzare l'API di Tanium. La funzione riportata di seguito illustra come effettuare l'accesso all' Tanium Server , utilizzando un nome utente e una password, ed estrarre il token di sessione.

[Nota: il token di sessione scadrà dopo un periodo di inattività; pertanto, potrebbe essere necessario effettuare una nuova autenticazione, se del caso.]

Blocco di codice 1: Ottenimento di un token di sessione tramite nome utente/password

def loginUsernamePassword(ts: str, username: str, password: str) -> str:
"""
Funzione di esempio che illustra come effettuare l'accesso a Tanium Server tramite
utilizzando una combinazione di nome utente e password. Questo restituirà il token di sessione di
.
Il parametro ts indica il server Tanium da utilizzare.
Il parametro username indica il nome utente da utilizzare per l'accesso.
Il parametro password indica la password da utilizzare per l'accesso.
"""
payload = {}
payload["username"] = username
payload["password"] = password
r = requests.post(f"{ts}/api/v2/session/login",
json=payload
)

session_token = r.json()['data']['session']
print(f"Codice di stato ricevuto al momento dell'accesso: {r.status_code}")
return session_token

Verifica dell'autenticazione

Una volta creato il token API, possiamo iniziare a testare l'autenticazione. Il token API deve essere aggiunto come intestazione in tutte le richieste HTTPS indirizzate a Tanium Server. Dopo aver ricevuto il token di sessione dalla pagina “API Tokens” nella console di Tanium oppure effettuando l’accesso tramite una combinazione di nome utente e password, verificheremo che il token funzioni correttamente. Ciò può essere effettuato richiamando la route /api/v2/session/validate sull' Tanium Server. Il blocco funzionale riportato di seguito illustra un esempio di come ciò possa essere realizzato.

Blocco di codice 2: Verifica della validità di un token API/di sessione


def validateToken(ts: str, token: str):
"""
Funzione di esempio che illustra come verificare che un token API sia in grado
di accedere al server Tanium e ottenere una risposta 200 .

Il parametro `ts` indica il server Tanium da utilizzare.
Esempio: 'https://MyTaniumServer.com'
Il parametro `token` è la stringa del token API generata dall'interfaccia grafica di TS.
"""

r = requests.post(f"{ts}/api/v2/session/validate",
json={'session': token},
headers={'session': token}
)


# Il codice di stato dovrebbe essere 200 in caso di convalida riuscita del token.
print(f"Codice di stato derivante dalla convalida del token: {r.status_code}.")

Utilizzo di API Gateway e GraphQL

Dopo aver effettuato con successo l'accesso all' Tanium Server e e aver convalidato il nostro token, possiamo iniziare a inviare richieste all'API Gateway per estrarre informazioni relative all'ambiente. Se non ha mai utilizzato GraphQL in precedenza, potrebbe essere utile consultare la relativa documentazione per una rapida panoramica su cosa sia GraphQL e su come funzioni il linguaggio di query. Il sito web è disponibile ai seguenti indirizzi: https://graphql.org/learn/ (si apre in una nuova scheda).

Prima di automatizzare le operazioni tramite l’API “ Tanium ”, è possibile accedere all’API Gateway nella console Tanium e iniziare a esplorare i campi di dati che è possibile interrogare. La foto 2 mostra dove è possibile accedere all'area API Gateway dell' Tanium Console.

Screenshot 2: Indicazione della posizione dell’API Gateway nella console di Tanium
Screenshot 2: Indicazione della posizione dell’API Gateway nella console di Tanium

Una volta acceduti a questa pagina, è possibile visualizzare un IDE GraphQL interattivo che consente di esplorare e sperimentare diverse query, ottenendo dati reali. Si veda la Foto 3 , dove è possibile eseguire una query iniziale per visualizzare l'ora corrente segnalata dal server.

Screenshot 3: Esecuzione di una semplice query GraphQL nell’ Tanium Console
Screenshot 3: Esecuzione di una semplice query GraphQL nell’ Tanium Console

Utilizzando la query GraphQL interattiva nella console Tanium , possiamo esplorare e creare le nostre query, che potremo poi integrare nel nostro script Python per automatizzarle. Ad esempio, possiamo creare una funzione Python molto semplice che esegua la stessa query “{now}”, come illustrato di seguito.

Blocco di codice 3: Esecuzione della query “now” tramite Python

def graphQLQueryNow(ts: str, token: str):
"""

graphQLQueryNow eseguirà la query GraphQL "now"
sul server Tanium , il cui indirizzo viene passato a questa funzione.

Il parametro `ts` indica il server Tanium da utilizzare.
Il parametro `token` è la stringa del token API generata dall'interfaccia grafica di TS.
"""

jsonObj = {'query': "{now}"}

r = requests.post(ts + "/plugin/products/gateway/graphql",
json=jsonObj,
headers={'session': token},
)

print(f"Codice di stato ricevuto dalla query 'now': {r.status_code}")
print(f"Risposta JSON della query 'now': {r.json()}")

Si tratta di un ottimo punto di partenza per eseguire la prima query Tanium tramite Python, ma proviamo a recuperare i dati endpoint dall’esploratore GraphQL interattivo disponibile all’indirizzo Tanium Console. La foto qui sotto mostra come è possibile effettuare una ricerca di tutti gli endpoint e del loro sistema operativo.

Screenshot 4: Interrogazione di tutti gli endpoint e dei relativi sistemi operativi
Screenshot 4: Interrogazione di tutti gli endpoint e dei relativi sistemi operativi

Questo ci sta finalmente fornendo dati relativi all' endpoint , ma manca ancora un ultimo tassello. A meno che il Suo ambiente non comprenda 20 macchine o meno, noterà che questi dati non forniscono informazioni relative all’intero ambiente. GraphQL ha l'impaginazione abilitata per impostazione predefinita, il che significa che sarà necessario effettuare più richieste per ricevere un set di dati completo dell'intero ambiente. Ampliamo la nostra query per visualizzare le informazioni relative all'impaginazione, in modo da capire come analizzarle quando si esegue l'automazione tramite uno script Python.

Screenshot 5: Attivazione delle informazioni “pageInfo” in una query GraphQL
Screenshot 5: Attivazione delle informazioni “pageInfo” in una query GraphQL

Quando questi dati “pageInfo” sono abilitati, è possibile verificare se sul server sono presenti ulteriori dati da analizzare tramite il campo “hasNextPage”. Inoltre, è possibile verificare la propria posizione all’interno del set di dati controllando i campi “startCursor” e “endCursor”. Se volessimo ottenere la serie successiva di dati, potremmo semplicemente aggiungere un (dopo: “lastcursor”) nella nostra query degli endpoint, come illustrato di seguito.

Screenshot 6: Passaggio al set di dati successivo tramite il cursore in GraphQL
Screenshot 6: Passaggio al set di dati successivo tramite il cursore in GraphQL

Si può notare che, quando si aggiunge questo argomento “after” alla query degli endpoint, i dati risultanti corrispondono al successivo insieme di 20 macchine. Ora che sappiamo come visualizzare i dati per pagine, possiamo finalmente mettere insieme il tutto in uno script Python che eseguirà per noi una query automatizzata.

Blocco di codice 4: Mettere insieme tutti gli elementi per eseguire query su set di dati completi


def graphQL_pagination(ts: str, token: str):
"""

graphQL_pagination fornirà il nome e il sistema operativo di ogni endpoint'utilizzando il GraphQL e la paginazione di
.

Il parametro `ts` indica il server Tanium da utilizzare.
Il parametro `token` è la stringa del token API generata dall'interfaccia grafica di TS.
"""

init_query = '''
{
endpoints {
pageInfo {
startCursor
endCursor
hasNextPage
}
edges {
node {
name
os {
name
}
}
}
}
}
'''

def do_request(ts: str, token: str, queryString: str) -> requests.Response:
r = requests.post(ts + "/plugin/products/gateway/graphql",
json={'query': queryString},
headers={'session': token},
)
return r

endpoint_data = []
next_query = init_query
while True:

# Effettuare la richiesta e convertire la risposta in formato JSON
r = do_request(ts, token, next_query)
resp_obj = r.json()

# estrazione delle informazioni sulla pagina dall'oggetto JSON
has_next_page = resp_obj["data"]["endpoints"]["pageInfo"]["hasNextPage"]
end_cursor = resp_obj["data"]["endpoints"]["pageInfo"]["endCursor"]
start_cursor = resp_obj["data"]["endpoints"]["pageInfo"]["startCursor"]

# Indicare all'utente in quale punto del cursore ci si trova.
print(
f"Dati ricevuti per gli endpoint compresi tra l'inizio: {start_cursor} e la fine: {end_cursor}.")

# Aggiungere i dati endpoint al nostro oggetto lista
endpoint_data.extend(resp_obj["data"]["endpoints"]["edges"])

# se la pagina successiva è "False", significa che siamo giunti alla fine del set di dati!
se non has_next_page:
break

# inserire l'argomento "after" nella query originale
next_query = init_query[:25] + \
f"(after: \"{end_cursor}\") " + init_query[25:]

Ci auguriamo che queste informazioni Le siano d’aiuto per iniziare a utilizzare l’API Gateway al di fuori di Tanium. Non dimentichi che molti casi d’uso possono essere realizzati semplicemente utilizzando i connettori nativi forniti da Tanium Connect. Quando è necessario realizzare un’integrazione personalizzata, l’API Gateway rappresenta una risorsa estremamente utile e ogni settimana vengono aggiunte nuove funzionalità, tra cui il supporto ai moduli. Si rivolga al Suo referente Tanium per ulteriori informazioni su qualsiasi punto della road map o per ricevere ulteriore assistenza in merito a qualsiasi iniziativa relativa ad API Gateway.

Scoprite come sfruttare appieno il potenziale della piattaforma Tanium grazie a Tanium Integrations Gallery (si apre in una nuova scheda), una console centralizzata che offre visibilità in tempo reale su tutte le nostre integrazioni e consente ai clienti di individuare, configurare e implementare le integrazioni con estrema facilità. Semplificando e accelerando l’integrazione della piattaforma Tanium con i principali partner tecnologici quali Microsoft, ServiceNow e altri, la Galleria delle integrazioni di Tanium massimizza il valore degli investimenti tecnologici, riducendo al contempo i rischi e le inefficienze operative.