Recopila registros de MuleSoft Anypoint
En este documento, se explica cómo transferir eventos de registros de seguimiento de auditoría desde los registros de la plataforma MuleSoft Anypoint a Google Security Operations con AWS S3.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso con privilegios a MuleSoft
- Acceso privilegiado a AWS
Obtén el ID de la organización de MuleSoft
- Accede a Anypoint Platform.
- Ve a Menú > Administración de acceso.
- En la tabla Grupos de empresas, haz clic en el nombre de tu organización.
- Copia el ID de la organización (por ejemplo,
0a12b3c4-d5e6-789f-1021-1a2b34cd5e6f
).
- También puedes ir a MuleSoft Business Groups y copiar el ID de la URL.
Configura el bucket de AWS S3 y el IAM para Google SecOps
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Crea un bucket.
- Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo,
mulesoft-audit-logs
). - Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega 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 consultarlas en el futuro.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Crea la app conectada de MuleSoft
- Accede a Anypoint Platform.
- Ve a Administración de acceso > Apps conectadas > Crear app.
- Proporciona los siguientes detalles de configuración:
- Nombre de la app: Ingresa un nombre único (por ejemplo,
Google SecOps export
). - Selecciona La app actúa en su propio nombre (credenciales de cliente).
- Haz clic en Add scopes → Audit Log Viewer → Next.
- Selecciona todos los grupos de empresas cuyos registros necesites.
- Haz clic en Siguiente > Agregar permisos.
- Nombre de la app: Ingresa un nombre único (por ejemplo,
- Haz clic en Guardar y copia el ID de cliente y el secreto del cliente.
Configura la política y el rol de IAM para las cargas de S3
JSON de la política (reemplaza
mulesoft-audit-logs
por el nombre de tu bucket):{ "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.
Adjunta la política recién creada.
Asigna el nombre
WriteMulesoftToS3Role
al rol y haz clic en Crear rol.
Crea la función Lambda
Configuración | Valor |
---|---|
Nombre | mulesoft_audit_to_s3 |
Tiempo de ejecución | Python 3.13 |
Arquitectura | x86_64 |
Rol de ejecución | Usar WriteMulesoftToS3Role existente > |
Después de crear la función, abre la pestaña Código, borra el código auxiliar y, luego, ingresa 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 > Agregar nueva variable de entorno.
Ingresa las siguientes variables de entorno proporcionadas y reemplaza el marcador de posición por tu valor.
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
Programa la función de Lambda (EventBridge Scheduler)
- Ve a Configuración > Activadores > Agregar activador > EventBridge Scheduler > Crear regla.
- Proporciona 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 a diario a las 02:00 UTC).
- Nombre:
- Deja el resto con la configuración predeterminada y haz clic en Crear.
Configura un feed en Google SecOps para transferir los registros de MuleSoft
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
MuleSoft Logs
). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Mulesoft como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- URI de S3: Es el URI del bucket.
s3://mulesoft-audit-logs/
- Reemplaza
mulesoft-audit-logs
por el nombre real del bucket.
- Reemplaza
Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3.
Espacio de nombres del recurso: Es el espacio de nombres del recurso.
Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.
- URI de S3: Es el URI del bucket.
Haz clic en Siguiente.
Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.