Collect CyberArk Privilege Cloud logs
This document explains how to ingest CyberArk Privilege Cloud logs to Google Security Operations using Bindplane. The parser code transforms the logs from their raw SYSLOG + KV format into the Google SecOps Unified Data Model (UDM) format. It first extracts fields from CEF formatted messages using grok patterns and key-value parsing, then maps those fields and others to their corresponding UDM fields, enriching the data with standardized values for vendor, product, and severity.
Before you begin
Make sure you have the following prerequisites:
- Google SecOps instance
- Windows 2016 or later, or a Linux host with systemd
- If running behind a proxy, firewall ports are open
- Privileged access to CyberArk Privilege Cloud
Get Google SecOps ingestion authentication file
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Collection Agents.
- Download the Ingestion Authentication File. Save the file securely on the system where Bindplane will be installed.
Get Google SecOps customer ID
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Profile.
- Copy and save the Customer IDfrom the Organization Detailssection.
Install the Bindplane agent
Install the Bindplane agent on your Windows or Linux operating system according to the following instructions.
Windows installation
- Open the Command Promptor PowerShellas an administrator.
-  Run the following command: msiexec / i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" / quiet
Linux installation
- Open a terminal with root or sudo privileges.
-  Run the following command: sudo sh -c " $( curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh ) " install_unix.sh
Additional installation resources
For additional installation options, consult the installation guide .
Configure the Bindplane agent to ingest Syslog and send to Google SecOps
- Access the configuration file: - Locate the config.yamlfile. Typically, it's in the/etc/bindplane-agent/directory on Linux or in the installation directory on Windows.
- Open the file using a text editor (for example, nano,vi, or Notepad).
 
- Locate the 
-  Edit the config.yamlfile as follows:receivers : tcplog : # Replace the port and IP address as required listen_address : "0.0.0.0:6514" exporters : chronicle/chronicle_w_labels : compression : gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path : '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id : < customer_id > endpoint : malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type : 'CYBERARK_PRIVILEGE_CLOUD' raw_log_field : body ingestion_labels : service : pipelines : logs/source0__chronicle_w_labels-0 : receivers : - tcplog exporters : - chronicle/chronicle_w_labels- Replace the port and IP address as required in your infrastructure.
- Replace <customer_id>with the actual customer ID.
- Update /path/to/ingestion-authentication-file.jsonto the path where the authentication file was saved in the Get Google SecOps ingestion authentication file section.
 
Restart the Bindplane agent to apply the changes
-  To restart the Bindplane agent in Linux, run the following command: sudo systemctl restart bindplane-agent
-  To restart the Bindplane agent in Windows, you can either use the Servicesconsole or enter the following command: net stop BindPlaneAgent && net start BindPlaneAgent
Install Secure Tunnel
- Make sure that your Machine IDis unique, even when the machines are deployed in multiple domains.
- Download the Privilege Cloud software packagefrom Deploy the Privilege Cloud Connector (Standard) , copy the Secure TunnelZIP file, and unzipit.
- Run the installation from the unzipped folder.
- On the Select Installation Folderpage, enter the location of the installation folder, and click Next.
- On the Ready to Installpage, click Install.
- When the installation is complete, click Finish; the configuration tool is launched.
Configure Secure Tunnel
- On the Authenticate to Privilege Cloudpage, enter the following details
and then click Next: -  Subdomain or Customer ID: The subdomain is your system identifier in
the system address, as displayed in the Privilege Cloud Portal FQDN: https://<subdomain>.Privilegecloud.cyberark.com. Enter only the<subdomain>identifier, not the whole URL. Alternatively, use the Customer ID provided to you by CyberArk.
- User name & Password: Enter the credentials provided by CyberArk Support.
 
-  Subdomain or Customer ID: The subdomain is your system identifier in
the system address, as displayed in the Privilege Cloud Portal FQDN: 
- On the Configure on-premise componentspage, add the components that you want to connect through the Secure Tunnel, and click Configure Components.
- Provide the following configuration details: - Component Type: Select SIEM.
- Host Address: Enter the Bindplane agent host address (SIEM component must include a hostname).
- Destination Port: Enter the Bindplane agent port number.
-  Remote Port: The port used by the CyberArk to interface with your Secure Tunnel (The Remote Port is provided to you by CyberArk support, typically the port is 1468).
- Click Advancedto display this column.
- Access through Secure Tunnels: You can configure which Secure Tunnels your servers will access through, even if these Secure Tunnels are running on a different machine.
 
- Click Configure Components > Close.
UDM mapping table
| Log Field | UDM Mapping | Logic | 
|---|---|---|
|   
act | security_result.action_details | Directly mapped from the actfield in the raw log. | 
|   
app | network.application_protocol | Mapped from the appfield in the raw log and transformed using the logic inparse_app_protocol.include. | 
|   
cn1 | additional.fields.value.string_value | Directly mapped from the cn1field in the raw log. | 
|   
cn1Label | additional.fields.key | Directly mapped from the cn1Labelfield in the raw log. | 
|   
cn2 | additional.fields.value.string_value | Directly mapped from the cn2field in the raw log. | 
|   
cn2Label | additional.fields.key | Directly mapped from the cn2Labelfield in the raw log. | 
|   
cs1 | additional.fields.value.string_value | Directly mapped from the cs1field in the raw log. | 
|   
cs1Label | additional.fields.key | Directly mapped from the cs1Labelfield in the raw log. | 
|   
cs2 | additional.fields.value.string_value | Directly mapped from the cs2field in the raw log. | 
|   
cs2Label | additional.fields.key | Directly mapped from the cs2Labelfield in the raw log. | 
|   
cs3 | additional.fields.value.string_value | Directly mapped from the cs3field in the raw log. | 
|   
cs3Label | additional.fields.key | Directly mapped from the cs3Labelfield in the raw log. | 
|   
cs4 | additional.fields.value.string_value | Directly mapped from the cs4field in the raw log. | 
|   
cs4Label | additional.fields.key | Directly mapped from the cs4Labelfield in the raw log. | 
|   
cs5 | additional.fields.value.string_value | Directly mapped from the cs5field in the raw log. | 
|   
cs5Label | additional.fields.key | Directly mapped from the cs5Labelfield in the raw log. | 
|   
device_event_class_id | metadata.product_event_type | Directly mapped from the device_event_class_idfield in the raw log. | 
|   
device_version | metadata.product_version | Directly mapped from the device_versionfield in the raw log. | 
|   
dhost | target.hostname | Directly mapped from the dhostfield in the raw log. | 
|   
duser | target.user.user_display_name | Directly mapped from the duserfield in the raw log. | 
|   
dvc | about.ip | Directly mapped from the dvcfield in the raw log. | 
|   
event_name | metadata.product_event_type | Directly mapped from the event_namefield in the raw log. | 
|   
externalId | metadata.product_log_id | Directly mapped from the externalIdfield in the raw log. | 
|   
fname | additional.fields.value.string_value | Directly mapped from the fnamefield in the raw log. | 
|   
msg | metadata.description | Directly mapped from the msgfield in the raw log. | 
|   
reason | security_result.summary | Directly mapped from the reasonfield in the raw log. | 
|   
severity | security_result.severity | Mapped from the severityfield in the raw log and transformed to "LOW", "MEDIUM", "HIGH", or "CRITICAL" based on its value. | 
|   
shost | principal.ip | Directly mapped from the shostfield in the raw log. | 
|   
suser | principal.user.user_display_name | Directly mapped from the suserfield in the raw log. | 
|   
time | metadata.event_timestamp.seconds | Directly mapped from the timefield in the raw log after being parsed and converted to a timestamp. | 
|  | metadata.event_type | Set to "USER_UNCATEGORIZED" if suseris present andduseris not. Otherwise, set to "GENERIC_EVENT". | 
|  | metadata.log_type | Set to "CYBERARK_PRIVILEGE_CLOUD". | 
|  | metadata.product_name | Set to "CYBERARK_PRIVILEGE_CLOUD". | 
|  | principal.asset.hostname | Value taken from either shostordvcfields, if they contain a hostname. | 
|  | principal.asset.ip | Value taken from either shostordvcfields, if they contain an IP address. | 
|  | principal.hostname | Value taken from either shostordvcfields, if they contain a hostname. | 
|  | target.asset.hostname | Value taken from dhostfield, if it contains a hostname. | 
|  | additional.fields.key | The key for additional fields is determined by the corresponding label field (e.g., cn1Labelforcn1). | 
Need more help? Get answers from Community members and Google SecOps professionals.

