Introduction
Ce document décrit comment configurer et utiliser la fonctionnalité Event Stream pour Advanced Malware Protection (AMP) for Endpoints.
Conditions préalables
Exigences
Cisco vous recommande d'avoir des connaissances sur les sujets suivants :
- AMP pour les points terminaux
- Connaissances de base de la programmation Python
Composants utilisés
Les informations dans ce document sont basées sur Python 3.7 avec les bibliothèques externes pika (version 1.1.0) et requests (version 2.2.0).
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
Configurer
Diagramme du réseau
Cette image fournit un exemple de séquençage de flux d'événements :

Configurations
Créer des identifiants API
- Accédez à votre portail AMP for Endpoints et connectez-vous
- Sous Comptes, sélectionnez Informations d'identification API
- Cliquez sur New API Credentials
- Entrez une valeur dans le champ Nom de l'application
- Sélectionner Lecture et écriture pour la portée
- Cliquez sur Créer
- Stocker ces informations d'identification dans un gestionnaire de mots de passe ou un fichier chiffré
Créer un flux d'événements
- Ouvrez un shell Python et importez les bibliothèques json, ssl, pika et request.
import json
import pika
import requests
import ssl
- Stockez les valeurs des paramètres url, client_id et api_key. Votre URL peut varier si vous n'utilisez pas le cloud nord-américain. En outre, votre client_id et votre api_key sont uniques dans votre environnement.
url = "https://api.amp.cisco.com/v1/event_streams"
client_id = "d16aff14860af496e848"
api_key = "d01ed435-b00d-4a4d-a299-1806ac117e72"
- Créez l'objet de données à transmettre à la demande. Il doit inclure name et peut inclure event_type et group_guid pour restreindre les événements et les groupes inclus dans le flux. Si aucun group_guid ou event_type n'est passé, le flux d'événements inclura tous les groupes et types d'événements.
data = {
"name": "Event Stream for ACME Inc",
"group_guid": ["5cdf70dd-1b14-46a0-be90-e08da14172d8"],
"event_type": [1090519054]
}
- Effectuez l'appel de requête POST et stockez la valeur dans une variable.
r = requests.post(
url = url,
data = data,
auth = (client_id, api_key)
)
- Imprime le code d'état. Confirmez que le code est 201.
print(r.status_code)
- Chargez le contenu de la réponse dans un objet json et stockez cet objet dans une variable.
j = json.loads(r.content)
- Examiner le contenu des données de réponse.
for k, v in j.items():
print(f"{k}: {v}")
- Les données AMQP (Advanced Message Queuing Protocol) se trouvent dans la réponse. Extrayez les données en variables respectives.
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"]
- Définissez une fonction de rappel avec ces paramètres. Dans cette configuration, vous imprimez le corps de l'événement à l'écran. Cependant, vous pouvez modifier ce contenu de cette fonction pour l'adapter à vos objectifs.
def callback(channel, method, properties, body):
print(body)
- Préparez l'URL AMQP à partir des variables que vous avez créées.
amqp_url = f"amqps://{user_name}:{password}@{host}:{port}"
- Préparation du contexte SSL
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
amqp_ssl = pika.SSLOptions(context)
- Préparez le flux AMQP avec les méthodes de la bibliothèque 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
)
- Lancez le flux.
channel.start_consuming()
- Le flux est maintenant en direct et attend des événements.
Vérifier
Déclenchez un événement sur un terminal de votre environnement. Par exemple, lancez une analyse Flash. Notez que le flux imprime les données d'événement à l'écran.
Appuyez sur Ctrl+C (Windows) ou Command-C (Mac) pour interrompre le flux.
Dépannage
Codes de statut
- Un code d'état de 401 indique un problème d'autorisation. Vérifiez votre client_id et votre api_key, ou générez de nouvelles clés.
- Un code d'état de 400 indique un problème de demande incorrecte. Vérifiez qu'aucun flux d'événements portant ce nom n'a été créé ou que vous n'avez pas créé plus de 5 flux d'événements.
- Une autre solution possible pour le code d'état 400 serait d'ajouter la variable suivante :
headers = {
'content-type': 'application/json'
}
et mettez à jour votre demande de publication pour refléter la déclaration d'en-tête :
r = requests.post(
url = url,
headers = headers,
data = data,
auth = (client_id, api_key)
)