Documentation

Chronicle (Google SecOps)

Configure SURF to send security events to Google Security Operations (formerly Chronicle) using the Malachite Ingestion API.

Requirements

  • A Google Cloud project connected to Google Security Operations
  • Permissions to create service accounts and manage IAM roles
  • Your Chronicle Customer ID
  • Administrator access to the SURF Admin console

Step 1: Create a service account in Google Cloud

  1. Open https://console.cloud.google.com/iam-admin/serviceaccounts
  2. Click Create Service Account.
  3. Use the following values:
FieldValue
NameSurf Security Chronicle Ingestion
DescriptionAllows Surf Security to send UDM events to Chronicle.
  1. Click Create and Continue.

Step 2: Assign the required role

SURF needs a service account with permission to ingest UDM events into Chronicle.

Preferred method

Assign the predefined Google role Chronicle Ingestion Service Account, or Malachite Ingestion Service Account, depending on your region and tenant. This is the official Google role designed for API ingestion into Chronicle.

If the role is not visible in your IAM console

Some organisations do not expose this role by default. In that case, create a custom IAM role with the permissions below and assign it to the service account.

PermissionPurpose
malachite.events.batchCreateCreating UDM events via the ingestion API
malachite.events.createSubmitting individual UDM events
malachite.ingestion.uploadIngestion of structured UDM data
malachite.udmevents.writeWriting UDM events to Chronicle
  • Permission prefixes may appear as chronicle., malachite., or secops.* depending on the tenant.
  • If unsure, search IAM permissions for the keywords malachite, udm, or ingestion, and select all related write permissions.
  • Restrict the custom role to ingestion only.

Step 3: Create a JSON key

  1. Open the service account.
  2. Go to Keys β†’ Add Key β†’ Create new key β†’ JSON.
  3. Download the JSON key file.

Step 4: Locate your Chronicle Customer ID

In Google Security Operations, go to Settings β†’ Customer Information β†’ Customer ID.

Step 5: Configure the integration in SURF

  1. Log into the SURF Admin console.
  2. Navigate to Integrations β†’ Chronicle.
  3. Fill in the fields:
FieldValue
Service AccountThe full contents of the JSON key file from Step 3
Customer IDThe Chronicle Customer ID from Step 4
  1. Click Enable / Submit.

Troubleshooting

SymptomCheck
Events rejected with a permissions errorThe service account does not hold an ingestion role. Confirm the predefined role, or that the custom role includes all four permissions.
Ingestion role not listed in IAMThe organisation does not expose it by default. Use the custom role route in Step 2.
Authentication failure in SURFPartial JSON pasted into the Service Account field
Events accepted but not visible in SecOpsWrong Customer ID. Reconfirm under Settings β†’ Customer Information.

For anything not covered here, contact the SURF support team.