Inleiding
In dit document wordt beschreven hoe de functie Event Stream voor Advanced Malware Protection (AMP) voor Eindpunten kan worden geconfigureerd en gebruikt.
Voorwaarden
Vereisten
Cisco raadt u aan kennis te hebben van de volgende onderwerpen:
- AMP voor eindpunten
- Basiskennis van Python programmeren
Gebruikte componenten
De informatie in dit document is gebaseerd op Python 3.7 met de pika (versie 1.1.0) en requests (versie 2.22.0) externe bibliotheken.
De informatie in dit document is gebaseerd op de apparaten in een specifieke laboratoriumomgeving. Alle apparaten die in dit document worden beschreven, hadden een opgeschoonde (standaard)configuratie. Als uw netwerk live is, moet u zorgen dat u de potentiële impact van elke opdracht begrijpt.
Configureren
Netwerkdiagram
Deze afbeelding geeft een voorbeeld van de volgorde van de gebeurtenisstroom:

Configuraties
API-referenties maken
- Navigeer naar uw AMP voor Endpoints portal en login
- Kies onder Accounts de optie API-referenties
- Klik op Nieuwe API-referenties
- Voer een waarde in het veld Naam toepassing in
- Selecteer Lezen en schrijven voor bereik
- Klik op Maken
- Sla deze referenties op in een wachtwoordbeheerder of gecodeerd bestand
Gebeurtenisstroom maken
- Open een Python shell en importeer de json, ssl, pika en requests bibliotheken.
import json
import pika
import requests
import ssl
- Sla de waarden voor de URL, client_id en api_key op. Je URL kan variëren als je geen gebruik maakt van de Noord-Amerikaanse cloud. Ook is uw client_id en api_key uniek voor uw omgeving.
url = "https://api.amp.cisco.com/v1/event_streams"
client_id = "d16aff14860af496e848"
api_key = "d01ed435-b00d-4a4d-a299-1806ac117e72"
- Maak het gegevensobject dat u wilt doorgeven aan het verzoek. Dit moet een naam bevatten en kan event_type en group_guid bevatten om de gebeurtenissen en groepen die in de stream zijn opgenomen te beperken. Als geen group_guid of event_type is doorgegeven, zal de gebeurtenisstroom alle groepen en gebeurtenistypen bevatten.
data = {
"name": "Event Stream for ACME Inc",
"group_guid": ["5cdf70dd-1b14-46a0-be90-e08da14172d8"],
"event_type": [1090519054]
}
- Doe de POST-oproep en sla de waarde op in een variabele.
r = requests.post(
url = url,
data = data,
auth = (client_id, api_key)
)
- Druk de statuscode af. Bevestig dat de code 201 is.
print(r.status_code)
- Laad de inhoud van het antwoord in een json-object en sla dat object op in een variabele.
j = json.loads(r.content)
- Controleer de inhoud van de responsgegevens.
for k, v in j.items():
print(f"{k}: {v}")
- De AMQP-gegevens (Advanced Message Queuing Protocol) bevinden zich in het antwoord. Extract de gegevens in de respectievelijke variabelen.
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"]
- Definieer een callback-functie met deze parameters. In deze setup print je de body van het evenement naar het scherm. U kunt deze inhoud van deze functie echter wijzigen om aan uw doelstellingen te voldoen.
def callback(channel, method, properties, body):
print(body)
- Bereid de AMQP-URL voor op basis van de variabelen die u hebt gemaakt.
amqp_url = f"amqps://{user_name}:{password}@{host}:{port}"
- Maak de SSL-context klaar
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
amqp_ssl = pika.SSLOptions(context)
- Bereid de AMQP-stroom voor met de Pika-bibliotheekmethoden.
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
)
- Start de stream.
channel.start_consuming()
- De stream is nu live en in afwachting van de gebeurtenissen.
Verifiëren
Een gebeurtenis op een eindpunt in uw omgeving activeren. Start bijvoorbeeld een flash scan. Merk op dat de stream de gebeurtenisgegevens naar het scherm afdrukt.
Druk op Ctrl+C (Windows) of Command-C (Mac) om de stream te onderbreken.
Problemen oplossen
Statuscodes
- Een statuscode van 401 geeft aan dat er een probleem is met autorisatie. Controleer uw client_id en api_key, of genereer nieuwe sleutels.
- Een statuscode van 400 geeft aan dat er een probleem is met een slecht verzoek. Controleer of er geen gebeurtenisstroom is gemaakt met die naam of dat er niet meer dan 5 gebeurtenisstromen zijn gemaakt.
- Een andere mogelijke remedie voor statuscode 400 zou zijn om de volgende variabele toe te voegen:
headers = {
'content-type': 'application/json'
}
en werk uw postaanvraag bij om de verklaring voor de koptekst weer te geven:
r = requests.post(
url = url,
headers = headers,
data = data,
auth = (client_id, api_key)
)