Collect Sysdig logs
This parser extracts security event data from Sysdig JSON logs, transforming and mapping the raw log fields into the Google Security Operations UDM format. It handles various fields, including metadata, principal or target information, security result details, and Kubernetes-related context, enriching the data for analysis within Google SecOps. The parser also performs data type conversions, error handling, and conditional logic based on field values to ensure accurate and comprehensive UDM representation.
Before you begin
Ensure that you have the following prerequisites:
- Google SecOps instance.
- Privileged access to Sysdig Secure.
Create an API key for the webhook feed
- Go to Google Cloud console > Credentials. 
- Click Create credentials, and then select API key. 
- Restrict the API key access to the Google Security Operations API. 
Option 1
Set up feeds
To configure a feed, follow these steps:
- Go to SIEM Settings > Feeds.
- Click Add New Feed.
- On the next page, click Configure a single feed.
- In the Feed name field, enter a name for the feed; for example, Sysdig Logs.
- Select Webhook as the Source type.
- Select Sysdig as the Log type.
- Click Next.
- Optional: Specify values for the following input parameters: - Split delimiter: the delimiter that is used to separate log lines, such as \n.
 
- Split delimiter: the delimiter that is used to separate log lines, such as 
- Click Next. 
- Review the feed configuration in the Finalize screen, and then click Submit. 
- Click Generate Secret Key to generate a secret key to authenticate this feed. 
- Copy and store the secret key. You cannot view this secret key again. If needed, you can regenerate a new secret key, but this action makes the previous secret key obsolete. 
- From the Details tab, copy the feed endpoint URL from the Endpoint Information field. You need to specify this endpoint URL in your client application. 
- Click Done. 
Specify the endpoint URL
- In your client application, specify the HTTPS endpoint URL provided in the webhook feed.
- Enable authentication by specifying the API key and secret key as part of the custom header in the following format: - X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET- Recommendation: Specify the API key as a header instead of specifying it in the URL. 
- If your webhook client doesn't support custom headers, you can specify the API key and secret key using query parameters in the following format: - ENDPOINT_URL?key=API_KEY&secret=SECRET- Replace the following: - ENDPOINT_URL: the feed endpoint URL.
- API_KEY: the API key to authenticate to Google SecOps.
- SECRET: the secret key that you generated to authenticate the feed.
 
Configure Webhook in Sysdig
- Sign in to Sysdig Secure with Admin privileges.
- Go to Profile > Settings > Event Forwarding.
- Click +Add Integration and select Webhook from the drop-down.
- Specify values for the following input parameters: - Integration Name: Provide a descriptive name for the webhook (for example, Google SecOps Webhook).
- Endpoint: Enter the Webhook <ENDPOINT_URL>, followed by<API_KEYand<SECRET>.
- Data to Send: Select from the drop-down the types of Sysdig data that should be forwarded. 
- Test the integration, then toggle Enabled to activate it. 
- Click Save. 
 
Option 2
Forward data directly to Google SecOps
- Sign in to Sysdig Secure using your administrator credentials.
- Go to Settings > Event Forwarding.
- Click +Add Integration and select Google Chronicle from the drop-down.
- Specify values for the following input parameters:
- Integration Name: Provide a descriptive name for the integration (for example, Google SecOps Integration).
- Customer ID: The Google Customer ID associated with your Google Cloud account. (In Google SecOps, find this in Settings > Profile).
- Namespace: Optional: Use as a tag to identify the appropriate data domain for indexing and enrichment.
- JSON Credentials: Upload your Google SecOps JSON credentials.
- Region: Select your region, such as US, Europe, or Asia.
- Data to Send: Select the types of Sysdig data that should be forwarded from the drop-down.
- Test the integration, then toggle Enabled to activate it.
- Click Save.
 
UDM Mapping Table
| Log Field | UDM Mapping | Logic | 
|---|---|---|
| agentId | read_only_udm.metadata.product_deployment_id | The value of agentIdfrom the raw log is directly mapped to this UDM field. | 
| category | read_only_udm.security_result.category_details | The value of categoryfrom the raw log is directly mapped to this UDM field. | 
| content.fields.container.id | read_only_udm.target.asset.asset_id | The value of content.fields.container.idfrom the raw log is prepended with "container_id:" and mapped to this UDM field. Used ifcontainerIdis empty. | 
| content.fields.container.image.repository | read_only_udm.target.file.full_path | The value of content.fields.container.image.repositoryfrom the raw log is directly mapped to this UDM field. | 
| content.fields.container.image.tag | read_only_udm.metadata.ingestion_labels.valuewhere key istag | The value of content.fields.container.image.tagfrom the raw log is directly mapped to this UDM field. | 
| content.fields.evt.res | read_only_udm.metadata.ingestion_labels.valuewhere key isevt_res | The value of content.fields.evt.resfrom the raw log is directly mapped to this UDM field. | 
| content.fields.evt.type | read_only_udm.metadata.event_type | The value of content.fields.evt.typefrom the raw log is directly mapped to this UDM field. | 
| content.fields.falco.rule | read_only_udm.security_result.rule_name | The value of content.fields.falco.rulefrom the raw log is directly mapped to this UDM field. Used ifcontent.ruleNameis empty. | 
| content.fields.group.gid | read_only_udm.target.group.product_object_id | The value of content.fields.group.gidfrom the raw log is directly mapped to this UDM field. | 
| content.fields.group.name | read_only_udm.target.group.group_display_name | The value of content.fields.group.namefrom the raw log is directly mapped to this UDM field. | 
| content.fields.proc.cmdline | read_only_udm.target.process.command_line | The value of content.fields.proc.cmdlinefrom the raw log is directly mapped to this UDM field. | 
| content.fields.proc.pcmdline | read_only_udm.target.process.parent_process.command_line | The value of content.fields.proc.pcmdlinefrom the raw log is directly mapped to this UDM field. | 
| content.fields.proc.pid | read_only_udm.target.process.pid | The value of content.fields.proc.pidfrom the raw log is directly mapped to this UDM field. | 
| content.fields.proc.ppid | read_only_udm.target.process.parent_process.pid | The value of content.fields.proc.ppidfrom the raw log is directly mapped to this UDM field. | 
| content.fields.proc.sid | read_only_udm.metadata.ingestion_labels.valuewhere key issid | The value of content.fields.proc.sidfrom the raw log is directly mapped to this UDM field. | 
| content.fields.user.loginname | read_only_udm.principal.user.user_display_name | The value of content.fields.user.loginnamefrom the raw log is directly mapped to this UDM field. | 
| content.fields.user.uid | read_only_udm.principal.user.userid | The value of content.fields.user.uidfrom the raw log is directly mapped to this UDM field. | 
| content.output | read_only_udm.additional.fields.value.string_valuewhere key iscontent_output | The value of content.outputfrom the raw log is directly mapped to this UDM field. | 
| content.policyId | read_only_udm.security_result.rule_id | The value of content.policyIdfrom the raw log is directly mapped to this UDM field. | 
| content.policyOrigin | read_only_udm.additional.fields.value.string_valuewhere key iscontent_policyOrigin | The value of content.policyOriginfrom the raw log is directly mapped to this UDM field. | 
| content.policyVersion | read_only_udm.additional.fields.value.string_valuewhere key iscontent_policyVersion | The value of content.policyVersionfrom the raw log is directly mapped to this UDM field. | 
| content.ruleName | read_only_udm.security_result.rule_name | The value of content.ruleNamefrom the raw log is directly mapped to this UDM field. | 
| content.ruleTags | read_only_udm.security_result.rule_labels | The values in the content.ruleTagsarray from the raw log are mapped to this UDM field, with keys generated dynamically as "ruletag_index". | 
| content.ruleType | read_only_udm.additional.fields.value.string_valuewhere key iscontent_ruleType | The value of content.ruleTypefrom the raw log is directly mapped to this UDM field. | 
| containerId | read_only_udm.target.asset.asset_id | The value of containerIdfrom the raw log is prepended with "container_id:" and mapped to this UDM field. | 
| description | read_only_udm.metadata.description | The value of descriptionfrom the raw log is directly mapped to this UDM field. | 
| id | read_only_udm.metadata.product_log_id | The value of idfrom the raw log is directly mapped to this UDM field. | 
| labels.container.label.io.kubernetes.container.name | read_only_udm.additional.fields.value.string_valuewhere key iscontainer_name | The value of labels.container.label.io.kubernetes.container.namefrom the raw log is directly mapped to this UDM field. | 
| labels.container.label.io.kubernetes.pod.name | read_only_udm.additional.fields.value.string_valuewhere key ispod_name | The value of labels.container.label.io.kubernetes.pod.namefrom the raw log is directly mapped to this UDM field. Used iflabels.kubernetes.pod.nameis empty. | 
| labels.container.label.io.kubernetes.pod.namespace | read_only_udm.principal.namespace | The value of labels.container.label.io.kubernetes.pod.namespacefrom the raw log is directly mapped to this UDM field. Used iflabels.kubernetes.namespace.nameis empty. | 
| labels.aws.instanceId | read_only_udm.target.resource.product_object_id | The value of labels.aws.instanceIdfrom the raw log is directly mapped to this UDM field. | 
| labels.aws.region | read_only_udm.target.resource.attribute.cloud.availability_zone | The value of labels.aws.regionfrom the raw log is directly mapped to this UDM field. | 
| labels.host.hostName | read_only_udm.principal.ipORread_only_udm.principal.hostname | If the value contains "ip", it's parsed as an IP address and mapped to principal.ip. Otherwise, it's mapped toprincipal.hostname. | 
| labels.host.mac | read_only_udm.principal.mac | The value of labels.host.macfrom the raw log is directly mapped to this UDM field. Used ifmachineIdis empty. | 
| labels.kubernetes.cluster.name | read_only_udm.additional.fields.value.string_valuewhere key iskubernetes_cluster_name | The value of labels.kubernetes.cluster.namefrom the raw log is directly mapped to this UDM field. | 
| labels.kubernetes.deployment.name | read_only_udm.additional.fields.value.string_valuewhere key iskubernetes_deployment_name | The value of labels.kubernetes.deployment.namefrom the raw log is directly mapped to this UDM field. | 
| labels.kubernetes.namespace.name | read_only_udm.principal.namespace | The value of labels.kubernetes.namespace.namefrom the raw log is directly mapped to this UDM field. | 
| labels.kubernetes.node.name | read_only_udm.additional.fields.value.string_valuewhere key iskubernetes_node_name | The value of labels.kubernetes.node.namefrom the raw log is directly mapped to this UDM field. | 
| labels.kubernetes.pod.name | read_only_udm.additional.fields.value.string_valuewhere key ispod_name | The value of labels.kubernetes.pod.namefrom the raw log is directly mapped to this UDM field. | 
| labels.kubernetes.service.name | read_only_udm.additional.fields.value.string_valuewhere key iskubernetes_service_name | The value of labels.kubernetes.service.namefrom the raw log is directly mapped to this UDM field. | 
| machineId | read_only_udm.principal.mac | The value of machineIdfrom the raw log is directly mapped to this UDM field. | 
| name | read_only_udm.security_result.summary | The value of namefrom the raw log is directly mapped to this UDM field. | 
| severity | read_only_udm.security_result.severity | The value of severityfrom the raw log is mapped to a string value based on these ranges: <4 = HIGH, >3 and <6 = MEDIUM, 6 = LOW, 7 = INFORMATIONAL. | 
| source | read_only_udm.security_result.description | The value of sourcefrom the raw log is directly mapped to this UDM field. | 
| timestampRFC3339Nano | read_only_udm.metadata.event_timestamp | The value of timestampRFC3339Nanofrom the raw log is parsed as a timestamp and mapped to this UDM field. | 
| type | read_only_udm.metadata.product_event_type | The value of typefrom the raw log is directly mapped to this UDM field. | 
| (Parser Logic) | read_only_udm.metadata.product_name | Hardcoded to "SYSDIG". | 
| (Parser Logic) | read_only_udm.metadata.vendor_name | Hardcoded to "SYSDIG". | 
| (Parser Logic) | read_only_udm.metadata.event_type | Set to "PROCESS_UNCATEGORIZED" by default, or "GENERIC_EVENT" if labels.host.hostNameis empty. | 
| (Parser Logic) | read_only_udm.metadata.log_type | Hardcoded to "SYSDIG". | 
| (Parser Logic) | read_only_udm.target.resource.resource_type | Set to "CLOUD_PROJECT" if labels.aws.instanceIdexists. | 
Need more help? Get answers from Community members and Google SecOps professionals.