Recoger registros de MuleSoft Anypoint
En este documento se explica cómo ingerir eventos de registro de auditoría de los registros de la plataforma MuleSoft Anypoint en Google Security Operations mediante AWS S3.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a MuleSoft
- Acceso privilegiado a AWS
Obtener el ID de organización de MuleSoft
- Inicia sesión en Anypoint Platform.
- Ve a Menú > Gestión de accesos.
- En la tabla Grupos de empresas, haga clic en el nombre de su organización.
- Copia el ID de organización (por ejemplo,
0a12b3c4-d5e6-789f-1021-1a2b34cd5e6f
).
- También puedes ir a Grupos de empresas de MuleSoft y copiar el ID de la URL.
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
mulesoft-audit-logs
). - Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros en Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para futuras consultas.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Añadir permisos en la sección Políticas de permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Crear la aplicación conectada de MuleSoft
- Inicia sesión en Anypoint Platform.
- Ve a Gestión de acceso > Aplicaciones conectadas > Crear aplicación.
- Proporcione los siguientes detalles de configuración:
- Nombre de la aplicación: introduce un nombre único (por ejemplo,
Google SecOps export
). - Selecciona La aplicación actúa en su propio nombre (credenciales de cliente).
- Haz clic en Añadir ámbitos → Lector de registros de auditoría → Siguiente.
- Selecciona todos los grupos de empresas cuyos registros necesites.
- Haz clic en Siguiente > Añadir ámbitos.
- Nombre de la aplicación: introduce un nombre único (por ejemplo,
- Haz clic en Guardar y copia el ID de cliente y el secreto de cliente.
Configurar la política y el rol de gestión de identidades y accesos para las subidas de S3
JSON de la política (sustituye
mulesoft-audit-logs
por el nombre de tu segmento):{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutAuditObjects", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::mulesoft-audit-logs/*" } ] }
Ve a la consola de AWS > IAM > Políticas > Crear política > pestaña JSON.
Copia y pega la política.
Haz clic en Siguiente > Crear política.
Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.
Adjunte la política que acaba de crear.
Dale el nombre
WriteMulesoftToS3Role
al rol y haz clic en Crear rol.
Crear la función Lambda
Ajuste | Valor |
---|---|
Nombre | mulesoft_audit_to_s3 |
Tiempo de ejecución | Python 3.13 |
Arquitectura | x86_64 |
Rol de ejecución | Usar una > WriteMulesoftToS3Role |
Una vez creada la función, abra la pestaña Código, elimine el stub e introduzca el siguiente código (
mulesoft_audit_to_s3.py
).#!/usr/bin/env python3 import os, json, gzip, io, uuid, datetime as dt, urllib.request, urllib.error, urllib.parse import boto3 ORG_ID = os.environ["MULE_ORG_ID"] CLIENT_ID = os.environ["CLIENT_ID"] CLIENT_SECRET = os.environ["CLIENT_SECRET"] S3_BUCKET = os.environ["S3_BUCKET_NAME"] TOKEN_URL = "https://anypoint.mulesoft.com/accounts/api/v2/oauth2/token" QUERY_URL = f"https://anypoint.mulesoft.com/audit/v2/organizations/{ORG_ID}/query" def http_post(url, data, headers=None): raw = json.dumps(data).encode() if headers else urllib.parse.urlencode(data).encode() req = urllib.request.Request(url, raw, headers or {}) try: with urllib.request.urlopen(req, timeout=30) as r: return json.loads(r.read()) except urllib.error.HTTPError as e: print("MuleSoft error body →", e.read().decode()) raise def get_token(): return http_post(TOKEN_URL, { "grant_type": "client_credentials", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET })["access_token"] def fetch_audit(token, start, end): headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } body = { "startDate": f"{start.isoformat(timespec='milliseconds')}Z", "endDate": f"{end.isoformat(timespec='milliseconds')}Z", "limit": 200, "offset": 0, "ascending": False } while True: data = http_post(QUERY_URL, body, headers) if not data.get("data"): break yield from data["data"] body["offset"] += body["limit"] def upload(events, ts): key = f"{ts:%Y/%m/%d}/mulesoft-audit-{uuid.uuid4()}.json.gz" buf = io.BytesIO() with gzip.GzipFile(fileobj=buf, mode="w") as gz: for ev in events: gz.write((json.dumps(ev) + "\n").encode()) buf.seek(0) boto3.client("s3").upload_fileobj(buf, S3_BUCKET, key) def lambda_handler(event=None, context=None): now = dt.datetime.utcnow().replace(microsecond=0) start = now - dt.timedelta(days=1) token = get_token() events = list(fetch_audit(token, start, now)) if events: upload(events, start) print(f"Uploaded {len(events)} events") else: print("No events in the last 24 h") # For local testing if __name__ == "__main__": lambda_handler()
Ve a Configuración > Variables de entorno > Editar > Añadir nueva variable de entorno.
Introduce las siguientes variables de entorno, sustituyendo los valores por los tuyos.
Clave Valor de ejemplo MULE_ORG_ID
your_org_id
CLIENT_ID
your_client_id
CLIENT_SECRET
your_client_secret
S3_BUCKET_NAME
mulesoft-audit-logs
Programar la función Lambda (EventBridge Scheduler)
- Ve a Configuración > Activadores > Añadir activador > EventBridge Scheduler > Crear regla.
- Proporcione los siguientes detalles de configuración:
- Nombre:
daily-mulesoft-audit export
. - Patrón de programación: expresión cron.
- Expresión:
0 2 * * *
(se ejecuta todos los días a las 02:00 UTC).
- Nombre:
- Deja el resto de los ajustes como están y haz clic en Crear.
Configurar un feed en Google SecOps para ingerir los registros de MuleSoft
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir nuevo.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
MuleSoft Logs
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione Mulesoft como Tipo de registro.
- Haz clic en Siguiente.
Especifique los valores de los siguientes parámetros de entrada:
- URI de S3: el URI del contenedor
s3://mulesoft-audit-logs/
- Sustituye
mulesoft-audit-logs
por el nombre real del segmento.
- Sustituye
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es 180 días.
ID de clave de acceso: clave de acceso de usuario con acceso al segmento de S3.
Clave de acceso secreta: clave secreta del usuario con acceso al segmento de S3.
Espacio de nombres de recursos: el espacio de nombres de recursos.
Etiquetas de ingestión: etiqueta que se aplicará a los eventos de este feed.
- URI de S3: el URI del contenedor
Haz clic en Siguiente.
Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.