
Monitorice sus Applications con la API Nexmo Audit Events y Python
Tiempo de lectura: 3 minutos
En esta entrada del blog verás cómo crear una aplicación web en Python que te permita ver los eventos de auditoría de Nexmo. Dentro de Nexmo este monitoreo de Account se logra a través de la API de Audit.
Algunas razones para utilizar la API de Audit de Nexmo incluyen:
Control de posibles accesos fraudulentos a las Account.
Cumplimiento de normativas, incluidas SOX, SSAE16/SOC, ISO27001 y otras.
Supervisión para ayudar a cumplir los acuerdos de nivel de servicio.
API de eventos de Audit de Nexmo
Nexmo proporciona la API Audit para analizar los eventos que se producen dentro de una Account de Nexmo. La API le permite fácilmente:
Recupera una lista de todos los tipos de eventos soportados.
Obtenga listas filtradas de eventos (puede filtrar por uno o varios tipos de evento y utilizar la búsqueda por texto).
Recuperar detalles de un evento de Audit específico.
En esta entrada del blog verás cómo:
Recuperar los tipos de eventos admitidos.
Obtener una lista filtrada en un tipo de evento.
Obtener una lista de todos los eventos.
Puede consultar la documentación de la API de Audit de Nexmo para funcionalidad adicional, por ejemplo puedes
Recuperar eventos de Audit entre un intervalo de fechas.
Recuperar eventos de Audit a partir de una búsqueda de texto.
Combine varios filtros para obtener una lista de eventos muy específica.
Esta entrada de blog sólo proporciona una introducción al uso de la API de Nexmo Audit con Python.
La API de Eventos de Audit de Nexmo es actualmente Beta. Actualmente, no hay soporte disponible en librerías cliente.
Puntos finales de la API REST
El principal punto final de la API REST es:
https://api.nexmo.com/beta/audit/eventsPuede obtener una lista de todos los eventos de Audit utilizando un archivo GET. También puede obtener una lista de los tipos de eventos admitidos utilizando OPTIONS en el endpoint.
Las solicitudes de eventos de Audit pueden filtrarse utilizando parámetros de consulta. Por ejemplo:
curl "https://api.nexmo.com/beta/audit/events?event_type=$EVENT_TYPE&search_text=$SEARCH_TEXT&date_from=$DATE_FROM&date_to=$DATE_TO" \
-u "$NEXMO_API_KEY:$NEXMO_API_SECRET"EVENT_TYPE puede ser una lista delimitada por comas de tipos de eventos, por ejemplo:
curl "https://api.nexmo.com/beta/audit/events?event_type=APP_CREATE,APP_DELETE&search_text=some_string&date_from=2018-09-01&date_to=2018-09-30" \
-u "$NEXMO_API_KEY:$NEXMO_API_SECRET" Aplicación web sencilla
La aplicación web en esta entrada de blog se ha mantenido deliberadamente muy simple, para que pueda centrarse en las llamadas clave a la API de Nexmo Audit que necesita hacer para obtener una lista de eventos de auditoría.
Hay un sencillo formulario que contiene una lista desplegable con los tipos de eventos admitidos. Puede elegir un tipo de evento específico de la lista o seleccionar ALL para todos los tipos de eventos. A continuación, haga clic en el botón del formulario para seleccionar su opción. Aparecerá una tabla con la lista de eventos registrados.
La aplicación web Python tiene dos requisitos previos:
Solicitudes - proporciona una forma sencilla de realizar llamadas a la API REST.
Flask - proporciona un marco de trabajo para aplicaciones web.
Las instrucciones de instalación de estas dos bibliotecas se pueden encontrar en sus sitios web, pero se pueden instalar fácilmente con pip.
La aplicación aquí presentada sólo se ha probado con Python 3.
El código fuente de la aplicación web en Python:
import requests
from requests.auth import HTTPBasicAuth
from flask import Flask, request, jsonify
NEXMO_API_KEY = 'YOUR_NEXMO_API_KEY'
NEXMO_API_SECRET = 'YOUR_NEXMO_API_SECRET'
app = Flask(__name__)
template1 = '''
<html>
<head>
<title>Audit Event Types</title>
</head>
<body>
<form action='/events' method='get'>
<select name='event_type'>
<option value='ALL'>ALL -- All the event types</option>
{SELECT_OPTIONS}
</select>
<input type='submit'>
</form>
</body>
</html>
'''
template2 = '''
<html>
<head>
<title>Audit Events Listing</title>
</head>
<body>
<table border='1'>
<tr><th>Audit Event Type</th><th>Date/time of event</th><th>Event source</th><th>Context</th></tr>
{TABLE_ROWS}
</table>
</body>
</html>
'''
@app.route("/")
def root():
# Retrieve all supported event types
# This is then used to populate a drop-down list of event types.
r = requests.options('https://api.nexmo.com/beta/audit/events', auth=HTTPBasicAuth(NEXMO_API_KEY, NEXMO_API_SECRET))
j = r.json()
event_types = j['eventTypes']
# Build options list based on event types
select_options = ""
for evt_t in event_types:
select_options = select_options + "<option value='" + evt_t['type'] + "'>" + evt_t['type'] + " -- " + evt_t['description'] + "</option>"
html = template1.format(SELECT_OPTIONS=select_options)
return (html)
@app.route("/events")
def events():
params = request.args
EVT_TYPE = params['event_type']
if EVT_TYPE == 'ALL':
r = requests.get('https://api.nexmo.com/beta/audit/events', auth=HTTPBasicAuth(NEXMO_API_KEY, NEXMO_API_SECRET))
else:
r = requests.get('https://api.nexmo.com/beta/audit/events?event_type='+EVT_TYPE, auth=HTTPBasicAuth(NEXMO_API_KEY, NEXMO_API_SECRET))
j = r.json()
if '_embedded' in j:
events = j['_embedded']['events']
else:
return ("No Events Found")
table_rows = ""
for evt in events:
if 'context' in evt:
event_context = str(evt['context'])
else:
event_context = 'None'
table_rows = table_rows + "<tr><td>" + (evt['event_type'] + "</td><td>" + evt['created_at'] + "</td><td>" + evt['source'] + "</td><td>" + event_context + "</td></tr>")
html = template2.format(TABLE_ROWS=table_rows)
return(html)
if __name__ == '__main__':
app.run(port=3000)Para realizar pruebas, puede ejecutar la aplicación web localmente.
Para probar la aplicación web:
Navegue por su navegador hasta
http://localhost:3000.Puede seleccionar un tipo de evento específico de la lista desplegable, o seleccionar
ALLen la lista desplegable para ver todos los eventos.Haga clic en
Submitpara recibir una lista de eventos.
Código fuente
El código fuente más reciente de la aplicación web de ejemplo se encuentra en Comunidad Nexmo en GitHub.
Resumen
En esta entrada del blog has visto cómo crear una sencilla aplicación web Python que te permite recuperar una lista de eventos de auditoría de tu cuenta Nexmo. Usando esta aplicación web puedes monitorizar tu Account para detectar comportamientos sospechosos o problemas potenciales.
Lecturas complementarias
Puede obtener más información sobre la API de eventos de Audit Nexmo en los siguientes recursos: