Introduzione
In questo documento viene descritto come configurare e utilizzare la funzione Event Stream per Advanced Malware Protection (AMP) for Endpoints.
Prerequisiti
Requisiti
Cisco raccomanda la conoscenza dei seguenti argomenti:
- AMP for Endpoints
- Conoscenze base della programmazione Python
Componenti usati
Le informazioni fornite in questo documento si basano su Python 3.7 con le librerie esterne pika (versione 1.1.0) e request (versione 2.2.0).
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Configurazione
Esempio di rete
Questa immagine fornisce un esempio di sequenziamento del flusso di eventi:
Configurazioni
Crea credenziali API
- Accedere al portale AMP for Endpoints
- In Account, scegliere Credenziali API
- Fare clic su Nuove credenziali API
- Immettere un valore nel campo Nome applicazione
- Selezionare Lettura e scrittura per l'ambito
- Fare clic su Crea
- Memorizza queste credenziali in un gestore delle password o in un file crittografato
Crea flusso eventi
- Aprire una shell Python e importare le librerie json, ssl, pika e request.
import json
import pika
import requests
import ssl
- Memorizzare i valori per url, client_id e api_key. L'URL può variare se non si utilizza il cloud nordamericano. Inoltre, client_id e api_key sono univoci per l'ambiente in uso.
url = "https://api.amp.cisco.com/v1/event_streams"
client_id = "d16aff14860af496e848"
api_key = "d01ed435-b00d-4a4d-a299-1806ac117e72"
- Creare l'oggetto dati da passare alla richiesta. Deve includere il nome e può includere event_type e group_guid per limitare gli eventi e i gruppi inclusi nel flusso. Se non viene passato alcun group_guid o event_type, il flusso di eventi includerà tutti i gruppi e i tipi di evento.
data = {
"name": "Event Stream for ACME Inc",
"group_guid": ["5cdf70dd-1b14-46a0-be90-e08da14172d8"],
"event_type": [1090519054]
}
- Eseguire la chiamata alla richiesta POST e memorizzare il valore in una variabile.
r = requests.post(
url = url,
data = data,
auth = (client_id, api_key)
)
- Stampa il codice di stato. Confermare che il codice sia 201.
print(r.status_code)
- Caricare il contenuto della risposta in un oggetto JSON e archiviare tale oggetto in una variabile.
j = json.loads(r.content)
- Esaminare il contenuto dei dati di risposta.
for k, v in j.items():
print(f"{k}: {v}")
- I dati Advanced Message Queuing Protocol (AMQP) sono all'interno della risposta. Estrarre i dati nelle rispettive variabili.
user_name = j["data"]["amqp_credentials"]["user_name"]
queue_name = j["data"]["amqp_credentials"]["queue_name"]
password = j["data"]["amqp_credentials"]["password"]
host = j["data"]["amqp_credentials"]["host"]
port = j["data"]["amqp_credentials"]["port"]
proto = j["data"]["amqp_credentials"]["proto"]
- Definire una funzione di richiamata con questi parametri. In questa configurazione, il corpo dell'evento viene stampato sullo schermo. È tuttavia possibile modificare il contenuto di questa funzione in base agli obiettivi desiderati.
def callback(channel, method, properties, body):
print(body)
- Preparare l'URL AMQP dalle variabili create.
amqp_url = f"amqps://{user_name}:{password}@{host}:{port}"
- Preparare il contesto SSL
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
amqp_ssl = pika.SSLOptions(context)
- Preparare il flusso AMQP con i metodi della libreria pika.
params = pika.URLParameters(amqp_url)
params.ssl_options = amqp_ssl
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.basic_consume(
queue_name,
callback,
auto_ack = False
)
- Avviare lo streaming.
channel.start_consuming()
- Il flusso è ora in diretta e in attesa di eventi.
Verifica
Attivare un evento su un endpoint nell'ambiente. Ad esempio, avviare una scansione flash. I dati dell'evento vengono stampati sullo schermo.
Premete Ctrl+C (Windows) o Comando-C (Mac) per interrompere il flusso.
Risoluzione dei problemi
Codici di stato
- Il codice di stato 401 indica che si è verificato un problema con l'autorizzazione. Controllare client_id e api_key o generare nuove chiavi.
- Il codice di stato 400 indica che si è verificato un problema di richiesta non valida. Verificare che non sia stato creato un flusso di eventi con tale nome o che non siano stati creati più di 5 flussi di eventi.
- Un altro possibile rimedio per il codice di stato 400 consiste nell'aggiungere la seguente variabile:
headers = {
'content-type': 'application/json'
}
e aggiornare la richiesta post per riflettere la dichiarazione di intestazione:
r = requests.post(
url = url,
headers = headers,
data = data,
auth = (client_id, api_key)
)