Collect Cisco Umbrella Web Proxy logs
This document explains how to collect Cisco Umbrella Web Proxy logs to a Google Security Operations feed using AWS S3 bucket. The parser extracts fields from a CSV log, renaming columns for clarity and handling potential variations in the input data. It then uses included files (umbrella_proxy_udm.include and umbrella_handle_identities.include) to map the extracted fields to the UDM and process identity information based on the identityType field.
Before you begin
- Ensure that you have a Google SecOps instance.
- Ensure that you privileged access to AWS IAM and S3.
- Ensure that you have privileged access to Cisco Umbrella.
Configure a Cisco-managed Amazon S3 bucket
- Sign in to the Cisco Umbrella dashboard.
- Go to Admin > Log management.
- Select Use a Cisco-managed Amazon S3 bucket option.
- Provide the following configuration details:
- Select a region: select a region closer to your location for lower latency.
- Select a retention duration: select the time period. The retention duration is 7, 14, or 30 days. After the selected time period, data is deleted and cannot be recovered. If your ingestion cycle is regular, use a shorter time period. You can change the retention duration at a later time.
 
- Click Save.
- Click Continue to confirm your selections and to receive activation notification.
 In the Activation complete window that appears, the Access key and Secret key values are displayed.
- Copy the Access key and Secret key values. If you lose these keys, you must regenerate them.
- Click Got it > Continue.
- A summary page displays the configuration and your bucket name. You can turn logging off or on as required by your organization. However, logs are purged based on the retention duration, regardless of new data getting added.
Optional: Configure user access keys for self-managed AWS S3 bucket
- Sign in to the AWS Management Console.
- Create a User following this user guide: Creating an IAM user.
- Select the created User.
- Select the Security credentials tab.
- Click Create Access Key in the Access Keys section.
- Select Third-party service as the Use case.
- Click Next.
- Optional: add a description tag.
- Click Create access key.
- Click Download CSV file to save the Access Key and Secret Access Key for later use.
- Click Done.
- Select the Permissions tab.
- Click Add permissions in the Permissions policies section.
- Select Add permissions.
- Select Attach policies directly.
- Search for and select the AmazonS3FullAccess policy.
- Click Next.
- Click Add permissions.
Optional: Configure a self-managed Amazon S3 bucket
- Sign in to the AWS Management Console. 
- Go to S3. 
- Click Create bucket. 
- Provide the following configuration details: - Bucket name: provide a name for the Amazon S3 bucket.
- Region: select a region.
 
- Click Create. 
Optional: Configure a bucket policy for self-managed AWS S3 bucket
- Click the newly created bucket to open it.
- Select Properties > Permissions.
- In the Permissions list, click Add bucket policy.
- Enter the preconfigured bucket policy as follows: - { "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Sid": "", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*"}, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::BUCKET_NAME" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::BUCKET_NAME" } ] }- Replace BUCKET_NAMEwith the Amazon S3 bucket name you provided.
 
- Replace 
- Click Save. 
Optional: Required Verification for self-managed Amazon S3 bucket
- In the Cisco Umbrella dashboard, select Admin > Log management > Amazon S3.
- In the Bucket name field, specify your exact Amazon S3 bucket name, and then click Verify.
- As part of the verification process, a file named README_FROM_UMBRELLA.txtis uploaded from Cisco Umbrella to your Amazon S3 bucket. You may need to refresh your browser in order to see the readme file when it is uploaded.
- Download the README_FROM_UMBRELLA.txtfile, and open it using a text editor.
- Copy and save the unique Cisco Umbrella token from the file.
- Go to the Cisco Umbrella dashboard.
- In the Token number field, specify the token and click Save.
- If successful, you get a confirmation message in your dashboard indicating that the bucket was successfully verified. If you receive an error indicating that your bucket can't be verified, re-check the syntax of the bucket name and review the configuration.
Configure a feed in Google SecOps to ingest the Cisco Umbrella Web Proxy logs
- Go to SIEM Settings > Feeds.
- Click Add new.
- In the Feed name field, enter a name for the feed; for example, Cisco Umbrella Web Proxy Logs.
- Select Amazon S3 V2 as the Source type.
- Select Cisco Umbrella Web Proxy as the Log type.
- Click Next.
- Specify values for the following input parameters: - S3 URI: the bucket URI.
- s3:/BUCKET_NAME- Replace BUCKET_NAMEwith the actual name of the bucket.
 
- Replace 
 
- Source deletion options: select deletion option according to your preference.
 
- S3 URI: the bucket URI.
- Click Next. 
- Review your new feed configuration in the Finalize screen, and then click Submit. 
UDM Mapping Table
| Log Field | UDM Mapping | Logic | 
|---|---|---|
| ampDisposition | security_result.detection_fields[].value | The value of ampDispositionfrom the raw log. | 
| ampMalware | security_result.detection_fields[].value | The value of ampMalwarefrom the raw log. | 
| ampScore | security_result.detection_fields[].value | The value of ampScorefrom the raw log. | 
| avDetections | security_result.detection_fields[].value | The value of avDetectionsfrom the raw log. | 
| blockedCategories | security_result.threat_name | The value of blockedCategoriesfrom the raw log. | 
| certificateErrors | security_result.detection_fields[].value | The value of certificateErrorsfrom the raw log. | 
| contentType | security_result.detection_fields[].value | The value of contentTypefrom the raw log. | 
| destinationIp | target.ip | The value of destinationIpfrom the raw log. | 
| destinationListID | security_result.detection_fields[].value | The value of destinationListIDfrom the raw log. | 
| dlpstatus | security_result.detection_fields[].value | The value of dlpstatusfrom the raw log. | 
| externalIp | principal.ip | The value of externalIpfrom the raw log. | 
| fileAction | security_result.detection_fields[].value | The value of fileActionfrom the raw log. | 
| fileName | target.file.names | The value of fileNamefrom the raw log. | 
| identitiesV8 | principal.hostname | The value of identitiesV8from the raw log. | 
| identity | principal.location.name | The value of identityfrom the raw log. | 
| internalIp | principal.ip | The value of internalIpfrom the raw log. | 
| isolateAction | security_result.detection_fields[].value | The value of isolateActionfrom the raw log. | 
| referer | network.http.referral_url | The value of refererfrom the raw log. | 
| requestMethod | network.http.method | The value of requestMethodfrom the raw log. | 
| requestSize | security_result.detection_fields[].value | The value of requestSizefrom the raw log. | 
| responseBodySize | security_result.detection_fields[].value | The value of responseBodySizefrom the raw log. | 
| responseSize | security_result.detection_fields[].value | The value of responseSizefrom the raw log. | 
| ruleID | security_result.rule_id | The value of ruleIDfrom the raw log. | 
| rulesetID | security_result.detection_fields[].value | The value of rulesetIDfrom the raw log. | 
| sha | security_result.about.file.sha256 | The value of shafrom the raw log. | 
| statusCode | network.http.response_code | The value of statusCodefrom the raw log. | 
| ts | timestamp | The value of tsfrom the raw log, parsed into a timestamp. | 
| url | target.url | The value of urlfrom the raw log. | 
| userAgent | network.http.user_agent | The value of userAgentfrom the raw log. | 
| verdict | security_result.detection_fields[].value | The value of verdictfrom the raw log. | 
| warnstatus | security_result.detection_fields[].value | The value of warnstatusfrom the raw log. The value ofcollection_timefrom the raw log.  Hardcoded toNETWORK_HTTP. Hardcoded toCisco. Hardcoded toUmbrella. Hardcoded toUMBRELLA_WEBPROXY. Derived from the scheme of the URL field (httporhttps). Parsed from theuserAgentfield using a user-agent parsing library. The value ofrequestSizefrom the raw log, converted to an integer. The value ofresponseSizefrom the raw log, converted to an integer. Derived from theidentityfield whenidentityType(oridentityTypeV8withidentitiesV8) indicates a user.  Further parsed to extract user details like display name, first name, last name, and email address. Mapped from theverdictfield:allowedorallowed->ALLOW, other values ->BLOCK. Ifcategoriesis not empty, set toNETWORK_CATEGORIZED_CONTENT. The value ofcategoriesfrom the raw log. Based on theverdictand potentially other fields.  UsuallyTraffic allowedorTraffic blocked.  Ifverdictis notallowedorblockedandstatusCodeis present, the summary isTraffic %{statusCode}. | 
Need more help? Get answers from Community members and Google SecOps professionals.