Recopila registros de CyberArk EPM

Compatible con:

En este documento, se explica cómo transferir registros de CyberArk EPM a Google Security Operations con AWS S3. El analizador transforma los datos de registro de CyberArk EPM en un modelo de datos unificado (UDM). Itera cada evento del registro, asigna los campos pertinentes a sus campos correspondientes del UDM, controla estructuras de datos específicas como exposedUsers y enriquece el resultado con información estática del proveedor y del producto.

Antes de comenzar

  • Asegúrate de tener una instancia de Google Security Operations.
  • Asegúrate de tener acceso con privilegios a AWS.
  • Asegúrate de tener acceso con privilegios a la consola de administración del servidor de EPM.

Configura AWS IAM para la transferencia de datos de Google SecOps

  1. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  2. Selecciona el usuario creado.
  3. Selecciona la pestaña Credenciales de seguridad.
  4. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  5. Selecciona Servicio de terceros como el Caso de uso.
  6. Haz clic en Siguiente.
  7. Opcional: Agrega una etiqueta de descripción.
  8. Haz clic en Crear clave de acceso.
  9. Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
  10. Haz clic en Listo.
  11. Selecciona la pestaña Permisos.
  12. Haz clic en Agregar permisos en la sección Políticas de permisos .
  13. Selecciona Agregar permisos.
  14. Selecciona Adjuntar políticas directamente.
  15. Busca y selecciona la política AmazonS3FullAccess.
  16. Haz clic en Siguiente.
  17. Haz clic en Agregar permisos.

Configura CyberArk EPM para el acceso a la API

  1. Accede a la consola web de CyberArk EPM como administrador.
  2. Ve a Administración > Administración de cuentas.
  3. Haz clic en + Agregar usuario.
  4. Proporciona los siguientes detalles:
    • Nombre de usuario: epm_api_user
    • Contraseña: Secreto seguro
    • Correo electrónico/Nombre completo: Opcional
  5. En Permissions, otorga ViewOnlySetAdmin en cada Set de registros extraídos.
  6. Haz clic en Guardar.
  7. Opcional: Extiende el tiempo de espera de la sesión:
    • Ve a Administración > Configuración de la cuenta.
    • Establece Tiempo de espera para sesión inactiva en 60 minutos.
    • Haz clic en Guardar.
  8. Ve a Política y conjuntos > selecciona tu conjunto > Propiedades.
  9. Copia y guarda el ID del conjunto (un GUID). Lo usarás en la secuencia de comandos como EPM_SET_ID.

Crea un bucket de AWS S3

  1. Accede a la consola de administración de AWS.
  2. Ve a Consola de AWS > Servicios > S3 > Crear bucket.
  3. Proporciona los siguientes detalles de configuración:
    • Nombre del bucket: my-cyberark-epm-logs
    • Región: Tu elección > Crear

Crea un rol de IAM para EC2

  1. Accede a la consola de administración de AWS.
  2. Ve a Servicios.
  3. En la barra de búsqueda, escribe IAM y selecciónalo.
  4. En el panel de IAM, haz clic en Roles.
  5. Haz clic en Crear rol.
  6. Proporciona los siguientes detalles de configuración:
    • Entidad de confianza: Servicio de AWS > EC2 > Siguiente.
    • Attach permission: AmazonS3FullAccess (o una política con alcance para tu bucket) > Next
    • Nombre del rol: EC2-S3-EPM-Writer > Crear rol

Opcional: Inicia y configura tu VM del recopilador de EC2

  1. Accede a la consola de administración de AWS.
  2. Ve a Servicios.
  3. En la barra de búsqueda, escribe EC2 y selecciónalo.
  4. En el panel de EC2, haz clic en Instances.
  5. Haz clic en Launch instances.
  6. Proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa EPM-Log-Collector.
    • AMI: Selecciona Ubuntu Server 22.04 LTS.
    • Tipo de instancia: Elige t3.micro (o una más grande) y, luego, haz clic en Siguiente.
    • Red: Asegúrate de que el parámetro de configuración de red esté establecido en tu VPC predeterminada.
    • Rol de IAM: Selecciona el rol de IAM EC2-S3-EPM-Writer` en el menú.
    • Asignar automáticamente IP pública: Establece este parámetro en Habilitar. Si te conectarás a través de una VPN, puedes dejar esta opción inhabilitada.
    • Add Storage: Deja la configuración de almacenamiento predeterminada (8 GiB) y, luego, haz clic en Next.
    • Selecciona Crear un grupo de seguridad nuevo.
    • Regla de entrada: Haz clic en Agregar regla.
    • Tipo: Selecciona SSH.
    • Puerto: 22
    • Origen: Tu IP
    • Haz clic en Revisar y lanzar.
    • Selecciona o crea un par de claves.
    • Haz clic en Descargar par de claves.
    • Guarda el archivo PEM descargado. Necesitarás este archivo para conectarte a tu instancia a través de SSH.
  7. Conéctate a tu máquina virtual (VM) con SSH:

    chmod 400 ~/Downloads/your-key.pem
    ssh -i ~/Downloads/your-key.pem ubuntu@<EC2_PUBLIC_IP>
    

Instala los requisitos previos del recopilador

  1. Actualiza el sistema operativo:

    # Update OS
    sudo apt update && sudo apt upgrade -y
    
    # Install Python, Git
    sudo apt install -y python3 python3-venv python3-pip git
    
    # Create & activate virtualenv
    python3 -m venv ~/epm-venv
    source ~/epm-venv/bin/activate
    
    # Install libraries
    pip install requests boto3
    
  2. Crea el directorio y el archivo de estado:

    sudo mkdir -p /var/lib/epm-collector
    sudo touch /var/lib/epm-collector/last_run.txt
    sudo chown ubuntu:ubuntu /var/lib/epm-collector/last_run.txt
    
  3. Inicialízalo (por ejemplo, hace 1 hora):

    echo "$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)" > /var/lib/epm-collector/last_run.txt
    

Implementa la secuencia de comandos del recopilador

  1. Crea la carpeta del proyecto:

    mkdir ~/epm-collector && cd ~/epm-collector
    
  2. Establece las variables de entorno (por ejemplo, en ~/.bashrc):

    export EPM_URL="https://epm.mycompany.com"
    export EPM_USER="epm_api_user"
    export EPM_PASS="YourPasswordHere"
    export EPM_SET_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    export S3_BUCKET="my-cyberark-epm-logs"
    export S3_PREFIX="epm/"
    
  3. Crea collector.py y pega lo siguiente:

    #!/usr/bin/env python3
    import os
    import sys
    import json
    import boto3
    import requests
    from datetime import datetime, timezone, timedelta
    
    # ── LOAD CONFIG FROM ENV ───────────────────────────────────────────────────────
    def must_env(var):
        v = os.getenv(var)
        if not v:
            print(f"ERROR: environment variable {var} is required", file=sys.stderr)
            sys.exit(1)
        return v
    
    EPM_URL    = must_env("EPM_URL")        # for example, https://epm.mycompany.com
    USERNAME   = must_env("EPM_USER")       # API username
    PASSWORD   = must_env("EPM_PASS")       # API password
    SET_ID     = must_env("EPM_SET_ID")     # GUID of the Set to pull
    S3_BUCKET  = must_env("S3_BUCKET")      # for example, my-cyberark-epm-logs
    S3_PREFIX  = os.getenv("S3_PREFIX", "") # optional, for example "epm/"
    STATE_FILE = os.getenv("STATE_FILE", "/var/lib/epm-collector/last_run.txt")
    PAGE_SIZE  = int(os.getenv("PAGE_SIZE", "100"))
    # ── END CONFIG ────────────────────────────────────────────────────────────────
    
    def read_last_run():
        try:
            ts = open(STATE_FILE).read().strip()
            return datetime.fromisoformat(ts.replace("Z","+00:00"))
        except:
            # default to 1 hour ago
            return datetime.now(timezone.utc) - timedelta(hours=1)
    
    def write_last_run(dt):
        with open(STATE_FILE, "w") as f:
            f.write(dt.strftime("%Y-%m-%dT%H:%M:%SZ"))
    
    def logon():
        r = requests.post(
            f"{EPM_URL}/REST/EPMService.svc/Logon",
            json={"username": USERNAME, "password": PASSWORD},
            headers={"Content-Type": "application/json"}
        )
        r.raise_for_status()
        return r.json().get("SessionToken")
    
    def logoff(token):
        requests.post(
            f"{EPM_URL}/REST/EPMService.svc/Logoff",
            headers={"Authorization": f"Bearer {token}"}
        )
    
    def fetch_raw_events(token, start, end):
        headers = {"Authorization": f"Bearer {token}"}
        page = 1
        while True:
            params = {
                "setId":     SET_ID,
                "startDate": start,
                "endDate":   end,
                "pageSize":  PAGE_SIZE,
                "pageNumber": page
            }
            resp = requests.get(
                f"{EPM_URL}/REST/EPMService.svc/GetRawEvents",
                headers=headers, params=params
            )
            resp.raise_for_status()
            events = resp.json().get("RawEvents", [])
            if not events:
                break
            yield from events
            page += 1
    
    def upload_to_s3(obj, key):
        boto3.client("s3").put_object(
            Bucket=S3_BUCKET,
            Key=key,
            Body=json.dumps(obj).encode("utf-8")
        )
    
    def main():
        # determine time window
        start_dt = read_last_run()
        end_dt   = datetime.now(timezone.utc)
        START = start_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
        END   = end_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
    
        token = logon()
        try:
            for idx, raw_evt in enumerate(fetch_raw_events(token, START, END), start=1):
                key = f"{S3_PREFIX}{end_dt.strftime('%Y/%m/%d')}/raw_{int(end_dt.timestamp())}_{idx}.json"
                upload_to_s3(raw_evt, key)
                print(f"Uploaded raw event to {key}")
        finally:
            logoff(token)
    
        # persist for next run
        write_last_run(end_dt)
    
    if __name__ == "__main__":
        main()
    
  4. Haz que la secuencia de comandos sea ejecutable:

    chmod +x collector.py
    

Automatiza con Cron

  1. Abre crontab:

    crontab -e
    
  2. Agrega el trabajo diario:

    0 0 * * * cd ~/epm-collector && source ~/epm-venv/bin/activate && python collector.py >> ~/epm-collector/epm.log 2>&1
    

Configura un feed en Google SecOps para transferir registros de Cyberark EPM

  1. Ve a SIEM Settings > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Cyberark EPM Logs).
  4. Selecciona Amazon S3 como el Tipo de fuente.
  5. Selecciona Cyberark EPM como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:

    • Región: Es la región en la que se encuentra el bucket de Amazon S3.
    • URI de S3: Es el URI del bucket (el formato debe ser s3://your-log-bucket-name/). Reemplaza lo siguiente:
      • your-log-bucket-name: el nombre del bucket.
    • El URI es un: Selecciona Directorio o Directorio que incluye subdirectorios.
    • Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
    • ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
    • Clave de acceso secreta: Es la clave secreta del usuario con acceso al bucket de S3.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transferencia: 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.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
agentId principal.asset.asset_id Concatena "agentId:" con el valor del campo agentId.
computerName principal.hostname Mapea directamente el campo computerName.
displayName metadata.description Asigna directamente el campo displayName.
eventType metadata.product_event_type Mapea directamente el campo eventType.
exposedUsers.[].accountName target.user.attribute.labels Crea una etiqueta con la clave "accountName_[index]" y el valor de exposedUsers.[index].accountName.
exposedUsers.[].domain target.user.attribute.labels Crea una etiqueta con la clave "domain_[index]" y el valor de exposedUsers.[index].domain.
exposedUsers.[].username target.user.attribute.labels Crea una etiqueta con la clave "username_[index]" y el valor de exposedUsers.[index].username.
filePath target.file.full_path Mapea directamente el campo filePath.
hash target.file.sha1 Mapea directamente el campo hash.
operatingSystemType principal.platform Asigna "Windows" a "WINDOWS" si el campo operatingSystemType es "Windows".
policyName security_result.rule_name Asigna directamente el campo policyName.
processCommandLine target.process.command_line Asigna directamente el campo processCommandLine.
publicador additional.fields Crea un campo con la clave "Publisher" y el valor string_value del campo publisher.
sourceProcessCommandLine target.process.parent_process.command_line Mapea directamente el campo sourceProcessCommandLine.
sourceProcessHash target.process.parent_process.file.sha1 Asigna directamente el campo sourceProcessHash.
sourceProcessSigner additional.fields Crea un campo con la clave "sourceProcessSigner" y string_value del campo sourceProcessSigner.
threatProtectionAction security_result.action_details Asigna directamente el campo threatProtectionAction.
metadata.event_timestamp Establece la marca de tiempo del evento en el valor de create_time de la entrada de registro.
metadata.event_type Está codificado como "STATUS_UPDATE".
metadata.log_type Se codifica de forma rígida como "CYBERARK_EPM".
metadata.product_name Se codifica de forma rígida como "EPM".
metadata.vendor_name Está codificado como "CYBERARK".
security_result.alert_state Se codificó como "ALERTING".
userName principal.user.userid Mapea directamente el campo userName.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.