Recopila registros de MuleSoft Anypoint

Compatible con:

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

  1. Accede a Anypoint Platform.
  2. Ve a Menú > Administración de acceso.
  3. En la tabla Grupos de empresas, haz clic en el nombre de tu organización.
  4. Copia el ID de la organización (por ejemplo, 0a12b3c4-d5e6-789f-1021-1a2b34cd5e6f).

Configura el bucket de AWS S3 y el IAM para Google SecOps

  1. Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Crea un bucket.
  2. Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo, mulesoft-audit-logs).
  3. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  4. Selecciona el usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  7. Selecciona Servicio de terceros como Caso de uso.
  8. Haz clic en Siguiente.
  9. Opcional: Agrega una etiqueta de descripción.
  10. Haz clic en Crear clave de acceso.
  11. Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. Haz clic en Agregar permisos en la sección Políticas de permisos.
  15. Selecciona Agregar permisos.
  16. Selecciona Adjuntar políticas directamente.
  17. Busca y selecciona la política AmazonS3FullAccess.
  18. Haz clic en Siguiente.
  19. Haz clic en Agregar permisos.

Crea la app conectada de MuleSoft

  1. Accede a Anypoint Platform.
  2. Ve a Administración de acceso > Apps conectadas > Crear app.
  3. 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.
  4. 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

  1. 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/*"
        }
      ]
    }
    
  2. Ve a la consola de AWS > IAM > Políticas > Crear política > pestaña JSON.

  3. Copia y pega la política.

  4. Haz clic en Siguiente > Crear política.

  5. Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.

  6. Adjunta la política recién creada.

  7. 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 >
  1. 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()
    
  2. Ve a Configuración > Variables de entorno > Editar > Agregar nueva variable de entorno.

  3. 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)

  1. Ve a Configuración > Activadores > Agregar activador > EventBridge Scheduler > Crear regla.
  2. 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).
  3. 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

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, MuleSoft Logs).
  4. Selecciona Amazon S3 V2 como el Tipo de fuente.
  5. Selecciona Mulesoft como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. 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.
    • 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.

  8. Haz clic en Siguiente.

  9. 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.