Collect ChromeOS XDR logs
Parser Version: 4.0
This document explains how to ingest ChromeOS XDR logs to Google Security Operations using Google Cloud Pub/Sub.
ChromeOS XDR forwards operating-system-level security telemetry from managed ChromeOS devices to a Google Cloud Pub/Sub topic that you own. This telemetry includes login and logout activity, device boot state, process execution, network flows, and sensitive file modifications. You point the ChromeOS XDR provider configuration in the Google Admin console at your Pub/Sub topic, and a Pub/Sub push subscription delivers the events to your Google SecOps feed endpoint.
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance.
- A Google Cloud project bound to your Google SecOps instance. The Pub/Sub topic and the push subscription must live in this project.
- Privileged access to Identity and Access Management (IAM) and Pub/Sub in that Google Cloud project.
- A Google Workspace Administrator account with Super Admin privileges.
- Managed ChromeOS devices enrolled in your Google Workspace organization.
- Target Organizational Units (OUs) that contain the ChromeOS devices you want to collect telemetry from
- Access to the Google Cloud Pub/Sub XDR provider configuration in the Google Admin console.
Bind the Google Cloud project to your Google SecOps instance
Before you create a Pub/Sub Push feed, bind the Google Cloud project that hosts your topic to your Google SecOps instance. The binding is what lets the push subscription authenticate with a service account.
Check whether the project is already bound
- In your Google SecOps instance, go to SIEM Settings > Projects.
- Check whether your Google Cloud project is listed.
- If it is listed, the project is already bound. Continue to the next section.
Bind the project
- Go to SIEM Settings > Projects.
- Click Add Project.
- In the Project ID field, enter your Google Cloud project ID.
- Click Add.
- Wait for the binding to complete, then refresh the page and verify that the project appears with the status Active.
Verify that the Chronicle API is enabled
- Go to the Google Cloud console APIs & Services library.
- Select the bound project.
- In the search box, type Chronicle.
- Click Chronicle API.
- If the API is not enabled, click Enable.
Create the Pub/Sub topic
Create the topic that receives ChromeOS XDR events. The topic belongs to you and is the value you enter in the Google Admin console later.
Using the Google Cloud console
- Go to Pub/Sub Topics.
- Select the bound project.
- Click Create topic.
- Provide the following configuration details:
- Topic ID: Enter a descriptive name (for example,
chromeos-xdr-secops) - Add a default subscription: Clear this checkbox
- Topic ID: Enter a descriptive name (for example,
- Click Create.
Copy the full topic path. The format is as follows:
projects/<PROJECT_ID>/topics/<TOPIC_ID>
Using the gcloud command-line tool
Use the following command:
gcloud pubsub topics create chromeos-xdr-secops \ --project=<PROJECT_ID>- Replace
<PROJECT_ID>with the ID of the bound Google Cloud project.
- Replace
Grant publish access to the ChromeOS XDR publisher
ChromeOS XDR publishes events using a Google-managed service account. This service account does not have access to your topic until you grant access, and the Google Admin console Test connection check fails until you do.
Using the Google Cloud console
- Go to Pub/Sub Topics.
- Click the topic you created.
- Open the Permissions tab, and then click Add principal.
- Provide the following configuration details:
- New principals: Enter
cloud-pub-sub-publisher@chromeos-xdr.iam.gserviceaccount.com - Role: Select Pub/Sub > Pub/Sub Publisher
- New principals: Enter
- Click Save.
Using the gcloud command-line tool
Use the following command:
gcloud pubsub topics add-iam-policy-binding chromeos-xdr-secops \ --member="serviceAccount:cloud-pub-sub-publisher@chromeos-xdr.iam.gserviceaccount.com" \ --role="roles/pubsub.publisher" \ --project=<PROJECT_ID>
Create the Pub/Sub push feed in Google SecOps
Create the feed
- In your Google SecOps instance, 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,
ChromeOS XDR events). - Select Google Cloud Pub/Sub Push as the Source type.
- Select ChromeOS XDR as the Log type.
- Click Next.
- Specify values for the following input parameters:
- Split delimiter: Leave this field empty. ChromeOS XDR publishes one event per Pub/Sub message.
- Asset namespace: The asset namespace
- Ingestion labels: The labels to be applied to the events from this feed
- Click Next.
- Review the feed configuration in the Finalize screen, and then click Submit.
Get the push endpoint URL
- On the feed details page, verify that the feed status is Active and that the Feed Enabled toggle is on.
In the Endpoint Information field, copy the push endpoint URL. The format is:
https://<REGION>-chronicle.googleapis.com/v1alpha/projects/<PROJECT_NUMBER>/locations/<REGION>/instances/<INSTANCE_ID>/feeds/<FEED_ID>:importPushLogsSave this URL for the push subscription.
Create the service account for Pub/Sub push
Create the service account
- Go to the Google Cloud console Service Accounts page.
- Select the bound project.
- Click + Create service account.
- Provide the following configuration details:
- Service account name: Enter a descriptive name (for example,
chromeos-xdr-push) - Service account description: Enter
Pub/Sub Push to Google SecOps for ChromeOS XDR
- Service account name: Enter a descriptive name (for example,
- Click Create and continue.
- In the Grant this service account access to project section, leave the Role field empty.
- Click Continue > Done.
Copy the service account email. The format is:
chromeos-xdr-push@<PROJECT_ID>.iam.gserviceaccount.com
Using the gcloud command-line tool
Use the following command:
gcloud iam service-accounts create chromeos-xdr-push \ --display-name="ChromeOS XDR Push" \ --description="Pub/Sub Push to Google SecOps for ChromeOS XDR" \ --project=<PROJECT_ID>
Service account permissions
No additional IAM role is required for this service account. The project binding you configured earlier enables service account authentication, and the push subscription authenticates to the Google SecOps feed endpoint using the service account's OIDC token. You select this service account when you enable authentication on the push subscription.
Create the Pub/Sub push subscription
Using the Google Cloud console
- Go to Pub/Sub Subscriptions.
- Click Create subscription.
Provide the following configuration details:
Setting Value Subscription ID Enter a descriptive name (for example, secops-chromeos-xdr)Select a Cloud Pub/Sub topic Select the topic you created Delivery type Push Endpoint URL Paste the push endpoint URL from the feed details page Enable authentication Selected Service account Select the service account you created Audience Leave empty Enable payload unwrapping Cleared Write metadata Cleared Acknowledgement deadline 600 seconds Expiration period Never expire Click Create.
Using the gcloud command-line tool
Use the following command:
gcloud pubsub subscriptions create secops-chromeos-xdr \ --topic=chromeos-xdr-secops \ --push-endpoint=<PUSH_ENDPOINT_URL> \ --push-auth-service-account=chromeos-xdr-push@<PROJECT_ID>.iam.gserviceaccount.com \ --ack-deadline=600 \ --expiration-period=never \ --project=<PROJECT_ID>Replace the following:
<PUSH_ENDPOINT_URL>: The push endpoint URL from the feed details page<PROJECT_ID>: The ID of the bound Google Cloud project
Verify that the subscription is created
Use the following command:
gcloud pubsub subscriptions describe secops-chromeos-xdr \ --project=<PROJECT_ID>Verify that the output shows the following:
pushConfig.pushEndpoint: The feed endpoint URLpushConfig.oidcToken.serviceAccountEmail: Your service account emailackDeadlineSeconds:600
Add the Google Cloud Pub/Sub XDR provider configuration
Point the ChromeOS XDR provider configuration at your Pub/Sub topic so that managed ChromeOS devices publish their telemetry to it.
Sign in with a super administrator account to the Google Admin console.
If you aren't using a super administrator account, you can't complete these steps.
Go to Menu > Devices > Chrome > Connectors.
(Optional) If you're configuring Chrome Enterprise Connectors settings for the first time, follow the prompts to turn on Chrome Enterprise Connectors.
At the top, click + New provider configuration.
Find Google Cloud Pub/Sub XDR and click Set up.
The Google Cloud Pub/Sub XDR configuration dialog opens.
Enter the following configuration details:
- Configuration name: Enter a descriptive name. For example,
ChromeOS XDR to Google SecOps. - Topic full path: Enter the full path of the topic you created, in the format
projects/<PROJECT_ID>/topics/<TOPIC_ID>.
- Configuration name: Enter a descriptive name. For example,
Click Test connection to validate the configuration details.
If the validation fails, verify that:
- The topic full path is correct and the topic exists in the bound Google Cloud project
cloud-pub-sub-publisher@chromeos-xdr.iam.gserviceaccount.comholds the Pub/Sub Publisher role on that topic- The Pub/Sub API is enabled in the project
Under Events this configuration is allowed to receive, expand XDR events and select Enable XDR events.
Click Save configuration.
The configuration is added for your entire organization. To enable it for the ChromeOS devices you want to monitor, select the organizational unit that contains those devices and select the checkbox next to your configuration.
Enable ChromeOS XDR reporting
Enable ChromeOS XDR reporting in Device settings to start collecting operating-system-level security telemetry from your managed ChromeOS devices.
- In the Google Admin console, go to Menu > Devices > Chrome > Settings > Device settings.
- To apply the setting to all ChromeOS devices, leave the top organizational unit selected. Otherwise, select a child organizational unit that contains the devices you want to collect telemetry from.
- Go to User and Device reporting.
- Next to Report extended detection and response (XDR) events, select Report information about extended detection and response (XDR) events.
Click Save.
Click Override for an organizational unit. To later restore the inherited value, click Inherit.
Repeat these steps for any other organizational units that contain ChromeOS devices you want to collect telemetry from.
Verify the data flow
To verify that ChromeOS XDR logs are being ingested into Google SecOps:
- Open your Google SecOps instance.
- Go to Menu > Search.
Run the following search query to look for ChromeOS XDR events:
metadata.log_type = "CHROMEOS_XDR"You should see events appearing within a few minutes of configuration. If no events appear:
- In the Google Cloud console, open the topic and check the Metrics tab for published messages. No published messages means the Admin console side is not delivering.
- In the Google Cloud console, open the subscription and check its metrics for push request counts and errors. Push errors mean the endpoint URL, the service account, or the project binding is wrong.
- Verify that ChromeOS XDR reporting is enabled in the Google Admin console for the correct organizational units
- Verify that the provider configuration is applied to the organizational units that contain your devices
- Verify that the target ChromeOS devices are enrolled and managed in your organization
- Verify that Enable payload unwrapping and Write metadata are cleared on the push subscription
Supported log types
ChromeOS XDR reporting forwards the following ChromeOS device security telemetry to Google SecOps:
| Event Category | Description |
|---|---|
| Login and logout | User login, logout, and authentication factor activity on the ChromeOS device |
| Device boot state | Device boot state, firmware secure boot status, and kernel version reporting |
| Process execution | Process and parent-process execution, including command line and image details |
| Network flow | Network connections, including local and remote endpoints, ports, protocol, and bytes transferred |
| Sensitive file modification | Creation and modification of sensitive files, including path and hash details |
UDM mapping table
The following table shows how ChromeOS XDR log fields are mapped to Google SecOps Unified Data Model (UDM) fields:
| Log Field | UDM Mapping | Logic |
|---|---|---|
application_protocol_label |
additional.fields |
Merged |
attributesBefore_canonicalGid_label |
additional.fields |
Merged |
attributesBefore_canonicalUid_label |
additional.fields |
Merged |
attributesBefore_mode_label |
additional.fields |
Merged |
authFactor_label |
additional.fields |
Merged |
bindAddr_label |
additional.fields |
Merged |
bindPort_label |
additional.fields |
Merged |
communityIdV1_label |
additional.fields |
Merged |
fileAfter_inodeDeviceId_label |
additional.fields |
Merged |
fileAfter_inode_label |
additional.fields |
Merged |
fileAfter_mntNs_label |
additional.fields |
Merged |
fileAfter_mode_label |
additional.fields |
Merged |
firmwareSecureBoot_label |
additional.fields |
Merged |
image_canonicalGid_label |
additional.fields |
Merged |
image_canonicalUid_label |
additional.fields |
Merged |
image_mode_label |
additional.fields |
Merged |
inodeDeviceId_label |
additional.fields |
Merged |
inode_label |
additional.fields |
Merged |
inode_process_label |
additional.fields |
Merged |
linuxKernelVersion_label |
additional.fields |
Merged |
local_timezone_label |
additional.fields |
Merged |
metaFirstAppearance_label |
additional.fields |
Merged |
modifyType_label |
additional.fields |
Merged |
networkFlow_direction_label |
additional.fields |
Merged |
process_image_canonicalGid_label |
additional.fields |
Merged |
process_image_canonicalUid_label |
additional.fields |
Merged |
process_image_mode_label |
additional.fields |
Merged |
process_inodeDeviceId_label |
additional.fields |
Merged |
process_metaFirstAppearance_label |
additional.fields |
Merged |
process_relStartTimeS_label |
additional.fields |
Merged |
rel_start_time_label |
additional.fields |
Merged |
sensitiveFileType_label |
additional.fields |
Merged |
socketType_label |
additional.fields |
Merged |
spawnProcess_canonicalUid_label |
additional.fields |
Merged |
spawnProcess_image_inodeDeviceId_label |
additional.fields |
Merged |
spawnProcess_image_inode_label |
additional.fields |
Merged |
spawnProcess_image_mode_label |
additional.fields |
Merged |
spawnProcess_metaFirstAppearance_label |
additional.fields |
Merged |
spawnProcess_relStartTimeS_label |
additional.fields |
Merged |
has_principal |
metadata.event_type |
Mapped: true → NETWORK_CONNECTION, true → STATUS_UPDATE |
has_user |
metadata.event_type |
Mapped: true → USER_UNCATEGORIZED |
schemaVersion |
metadata.product_version |
Directly mapped |
app_protocol_output |
network.application_protocol |
Directly mapped |
ip_protocol_out |
network.ip_protocol |
Renamed/mapped |
networkFlow.rxBytes |
network.received_bytes |
Renamed/mapped |
networkFlow.txBytes |
network.sent_bytes |
Renamed/mapped |
deviceName |
principal.asset.asset_id |
Directly mapped |
localIp |
principal.asset.ip |
Merged |
sensitiveModify.attributesBefore.pathname |
principal.file.full_path |
Directly mapped |
localIp |
principal.ip |
Merged |
networkFlow.localIp |
principal.ip |
Merged |
osVersion |
principal.platform_version |
Directly mapped |
networkFlow.localPort |
principal.port |
Renamed/mapped |
spawnProcess.commandline |
principal.process.parent_process.command_line |
Directly mapped |
spawnProcess.image.pathname |
principal.process.parent_process.file.full_path |
Directly mapped |
spawnProcess.image.sha256 |
principal.process.parent_process.file.sha256 |
Directly mapped |
spawnProcess.canonicalPid |
principal.process.parent_process.pid |
Directly mapped |
spawnProcess.processUuid |
principal.process.product_specific_process_id |
Directly mapped |
devicePermanentId |
principal.resource.product_object_id |
Directly mapped |
event_log |
security_result.summary |
Directly mapped |
sensitiveModify.fileAfter.pathname |
target.file.full_path |
Directly mapped |
sensitiveModify.fileAfter.sha256 |
target.file.sha256 |
Directly mapped |
networkFlow.remoteHostName |
target.hostname |
Directly mapped |
networkFlow.remoteIp |
target.ip |
Merged |
networkFlow.remotePort |
target.port |
Renamed/mapped |
process.image.pathname |
target.process.file.full_path |
Directly mapped |
process.image.sha256 |
target.process.file.sha256 |
Directly mapped |
parentProcess.commandline |
target.process.parent_process.command_line |
Directly mapped |
process.commandline |
target.process.parent_process.command_line |
Directly mapped |
parentProcess.image.pathname |
target.process.parent_process.file.full_path |
Directly mapped |
parentProcess.image.sha256 |
target.process.parent_process.file.sha256 |
Directly mapped |
parentProcess.canonicalPid |
target.process.parent_process.pid |
Directly mapped |
parentProcess.processUuid |
target.process.parent_process.product_specific_process_id |
Directly mapped |
process.canonicalPid |
target.process.pid |
Directly mapped |
process.processUuid |
target.process.product_specific_process_id |
Directly mapped |
deviceUser |
target.user.email_addresses |
Merged |
| N/A | metadata.event_type |
Constant: NETWORK_CONNECTION |
| N/A | metadata.product_name |
Constant: CHROMEOS XDR |
| N/A | metadata.vendor_name |
Constant: CHROMEOS XDR |
Change Log
View the Change Log for this parser
Need more help? Get answers from Community members and Google SecOps professionals.