Collect AWS CloudWatch logs
This document explains how to ingest AWS CloudWatch logs to Google Security Operations using Amazon S3 or Amazon Kinesis Data Firehose. AWS CloudWatch is a monitoring and observability service, which collects operational data in the form of logs, metrics, and events. This integration lets you send these logs to Google SecOps for analysis and monitoring.
Before you begin
Make sure you have the following prerequisites:
- Google SecOps instance
- Privileged access to AWS
Configure CloudWatch logs export using AWS S3
This export process is required to be done regularly, in order to get the latest CloudWatch logs ingested into S3.
Create an Amazon S3 bucket
We recommend to use a bucket that was created specifically for CloudWatch logs.
- Open the Amazon S3 console.
- If required, you can change the Region. 
- On the navigation bar, select the Region where your CloudWatch Logs reside.
 
- Click Create Bucket.
- Bucket Name: enter a meaningful name for the bucket.
- Region: select the region where your CloudWatch Logs data resides.
- Click Create.
 
Create an IAM user with full access to Amazon S3 and CloudWatch Logs
- Open the IAM console.
- Click Users > Create user.
- Enter a name in the User name field (for example, CWExport).
- Select both Programmatic access and AWS Management Console access.
- Select either Autogenerated password or Custom password.
- Click Next: Permissions.
- Choose Attach existing policies directly.
- Search for and select the AmazonS3FullAccess and CloudWatchLogsFullAccess policies to the user.
- Click Next: Tags.
- Click Next: Review.
- Click Create user.
Configure permissions on Amazon S3 bucket
- In the Amazon S3 console, choose the bucket that you previously created.
- Click Permissions > Bucket policy.
- In the Bucket Policy Editor, add the following policy. - { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::cw-exported-logs", "Principal": { "Service": "logs.us-east-1.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-east-1.amazonaws.com" } } ] }
- Change and update the following - jsonvariables:- Change cw-exported-logsto the name of your S3 bucket.
- Change random-stringto a randomly generated string of characters.
- Be sure to specify the correct Region endpoint for Principal.
 
- Change 
- Click Save. 
Configure CloudWatch Export
- Sign in as the IAM user you previously created.
- Open CloudWatch console.
- In the navigation menu, select Log groups.
- Select the name of an existing or create a new log group.
- Choose Actions > Export data to Amazon S3.
- On the Export data to Amazon S3 screen, locate Define data export.
- Set the time range for the data to export using From and To. 
- Choose S3 bucket: Select the account associated with the Amazon S3 bucket. 
- S3 bucket name: Select an Amazon S3 bucket. 
- S3 Bucket prefix: Enter the randomly generated string that you specified in the bucket policy. 
- Choose Export to export your log data to Amazon S3. 
- To view the status of the log data that you exported to Amazon S3, select Actions > View all exports to Amazon S3. 
Configure a feed in Google SecOps to ingest AWS CloudWatch logs
- Go to SIEM Settings > Feeds.
- Click Add New Feed.
- In the Feed name field, enter a name for the feed (for example, AWS CloudWatch Logs).
- Select Amazon S3 V2 as the Source type.
- Select AWS CloudWatch as the Log type.
- Click Next.
- Specify values for the following input parameters: - S3 URI: The bucket URI
- s3://your-log-bucket-name/- Replace your-log-bucket-namewith the actual name of the bucket.
 
- Replace 
- Source deletion options: Select the deletion option according to your preference. 
- Maximum File Age: Default 180 Days. 
- Access Key ID: User access key with access to the S3 bucket. 
- Secret Access Key: User secret key with access to the S3 bucket. 
- Asset namespace: The asset namespace. 
- Ingestion labels: The label to be applied to the events from this feed. 
 
- Click Next. 
- Review your new feed configuration in the Finalize screen, and then click Submit. 
Configure Cloudwatch logs export using AWS Data Firehose
This export process is not required to be done regularly after initial setup.
Configure a feed in Google SecOps to ingest AWS CloudWatch Logs
- Go to SIEM Settings > Feeds.
- Click + Add New Feed.
- In the Feed name field, enter a name for the feed (for example, AWS CloudWatch Logs).
- Select Amazon Data Firehose as the Source type.
- Select AWS CloudWatch as the Log type.
- Click Next.
- Specify values for the following input parameters:
- Split delimiter: Optional \n.
- Asset namespace: The asset namespace.
- Ingestion labels: The label to be applied to the events from this feed.
 
- Split delimiter: Optional 
- Click Next.
- Review the feed configuration and click Submit.
- Click Generate Secret Key to generate a secret key to authenticate this feed.
- Copy and save the secret key as you cannot view this value again.
- Go to the Details tab.
- Copy the feed endpoint URL from the Endpoint Information field.
- Click Done.
Create an API key for the Amazon Data Firehose feed
- Go to the Google Cloud console Credentials page.
- Click Create credentials, and then select API key.
- Restrict the API key access to the Google SecOps API.
Specify the endpoint URL
To specify the HTTPS endpoint and access key in Amazon Data Firehose, follow these steps:
- Append the API key to the feed endpoint URL and specify this URL as the HTTP endpoint URL in the following format: - ENDPOINT_URL?key=API_KEY- Replace the following: - ENDPOINT_URL: the feed endpoint URL.
- API_KEY: the API key to authenticate to Google SecOps.
 
 
For the access key, specify the secret key that you obtained when you created the Amazon Data Firehose feed.
Configure Amazon Kinesis Data Firehose to Google SecOps {:#configure-kinesis-secops}.
- In the AWS Console, go to Kinesis > Data Firehose > Create delivery stream.
- Provide the following configuration details:
- Source: Select Direct PUT or other sources.
- Destination: Choose HTTP endpoint.
- HTTP endpoint URL: Enter the Feed HTTPS endpoint URL from Google SecOps with the API Key.
- HTTP method: Select POST.
 
- Under Access key, enter the following details:
- Secret key header: <HEADER_NAME_FOR_SECRET>with value<YOUR_SECRET_KEY>
- Buffering hints: set Buffer size = 1 MiB, Buffer interval = 60 seconds.
- Compression: select Disabled.
- S3 backup: select Disabled.
- Leave retry and logging settings as default.
 
- Secret key header: 
- Click Create delivery stream.
Configure IAM permissions and subscribe the log group
- In the AWS Console, go to IAM > Policies > Create policy > JSON.
- Paste the following policy JSON, replacing - <region>and- <account-id>with your AWS Region and account ID:- { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops" } ] }- Name the policy CWLtoFirehoseWriteand click Create policy.
- Go to IAM > Roles > Create role.
- Select Custom trust policy and paste:
 - { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<your-region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- Name the policy 
- Attach the policy - CWLtoFirehoseWriteto the role.
- Name the role - CWLtoFirehoseRoleand click Create role.
- Go to CloudWatch > Logs > Log groups. 
- Select the target log group. 
- Open the Subscription filters tab and click Create. 
- Choose Create Amazon Kinesis Data Firehose subscription filter. 
- Provide the following configuration details: - Destination: Select delivery stream cwlogs-to-secops.
- Grant permission: Choose role CWLtoFirehoseRole.
- Filter name: Enter all-events.
- Leave Filter pattern empty to send all events.
 
- Destination: Select delivery stream 
- Click Start streaming. 
UDM Mapping Table
| Log Field | UDM Mapping | Logic | 
|---|---|---|
| account | principal.user.userid | The value of accountfrom the raw log is mapped to theprincipal.user.useridfield. | 
| account_id | principal.user.userid | The value of account_idfrom the raw log is mapped to theprincipal.user.useridfield. | 
| AlertId | metadata.product_log_id | The value of AlertIdfrom the raw log is mapped to themetadata.product_log_idfield. | 
| arrivalTimestamp | metadata.event_timestamp | The value of arrivalTimestampfrom the raw log is converted to a timestamp and mapped to themetadata.event_timestampfield. | 
| attemptsMade | additional.fields | The value of attemptsMadefrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "Attempts Made". | 
| awsAccountId | principal.asset_id | The value of awsAccountIdfrom the raw log is prepended with "AWS Account id: " and mapped to theprincipal.asset_idfield. | 
| billed_duration | additional.fields | The value of billed_durationfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "billed_duration". | 
| BytesIn | network.received_bytes | The value of BytesInfrom the raw log is converted to an unsigned integer and mapped to thenetwork.received_bytesfield. | 
| cipher | network.tls.cipher | The value of cipherfrom the raw log is mapped to thenetwork.tls.cipherfield. | 
| Ciphers | network.tls.client.supported_ciphers | The value of Ciphersfrom the raw log is split by commas and each value is added to thenetwork.tls.client.supported_ciphersarray. | 
| cloudwatchLog | security_result.description | The value of cloudwatchLogfrom the raw log is mapped to thesecurity_result.descriptionfield. | 
| CloudAccountId | metadata.product_deployment_id | The value of CloudAccountIdfrom the raw log is mapped to themetadata.product_deployment_idfield. | 
| CloudType | target.resource.attribute.cloud.environment | The value of CloudTypefrom the raw log determines the value oftarget.resource.attribute.cloud.environment. IfCloudTypeis "gcp", the value is "GOOGLE_CLOUD_PLATFORM". IfCloudTypeis "aws", the value is "AMAZON_WEB_SERVICES". IfCloudTypeis "azure", the value is "MICROSOFT_AZURE". | 
| Context.Execution.Id | target.resource.attribute.labels | The value of Context.Execution.Idfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Context Id". | 
| Context.Execution.Name | target.resource.attribute.labels | The value of Context.Execution.Namefrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Context Name". | 
| Context.Execution.RoleArn | target.resource.product_object_id | The value of Context.Execution.RoleArnfrom the raw log is mapped to thetarget.resource.product_object_idfield. | 
| descr | metadata.description | The value of descrfrom the raw log, after removing extra whitespace, is mapped to themetadata.descriptionfield unless it is "-". Ifdescris empty, the value oflogis used instead. | 
| destination.name | target.location.country_or_region | The value of destination.namefrom the raw log is mapped to thetarget.location.country_or_regionfield. | 
| destination.properties.prefix | target.resource.attribute.labels | The value of destination.properties.prefixfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Destination properties prefix". | 
| detail.additionalEventData.configRuleArn | security_result.rule_id | The value of detail.additionalEventData.configRuleArnfrom the raw log is mapped to thesecurity_result.rule_idfield. | 
| detail.additionalEventData.configRuleName | security_result.rule_name | The value of detail.additionalEventData.configRuleNamefrom the raw log is mapped to thesecurity_result.rule_namefield. | 
| detail.additionalEventData.managedRuleIdentifier | additional.fields | The value of detail.additionalEventData.managedRuleIdentifierfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "managedRuleIdentifier". | 
| detail.additionalEventData.notificationJobType | additional.fields | The value of detail.additionalEventData.notificationJobTypefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "notificationJobType". | 
| detail.awsAccountId | principal.asset_id | The value of detail.awsAccountIdfrom the raw log is prepended with "AWS Account id: " and mapped to theprincipal.asset_idfield. | 
| detail.awsRegion | principal.location.name | The value of detail.awsRegionfrom the raw log is mapped to theprincipal.location.namefield. | 
| detail.configRuleArn | security_result.rule_id | The value of detail.configRuleArnfrom the raw log is mapped to thesecurity_result.rule_idfield. | 
| detail.configRuleName | security_result.rule_name | The value of detail.configRuleNamefrom the raw log is mapped to thesecurity_result.rule_namefield. | 
| detail.configurationItem.awsAccountId | principal.user.userid | The value of detail.configurationItem.awsAccountIdfrom the raw log is mapped to theprincipal.user.useridfield. | 
| detail.configurationItem.awsRegion | target.location.country_or_region | The value of detail.configurationItem.awsRegionfrom the raw log is mapped to thetarget.location.country_or_regionfield. | 
| detail.configurationItem.configuration.complianceType | security_result.summary | The value of detail.configurationItem.configuration.complianceTypefrom the raw log is mapped to thesecurity_result.summaryfield. | 
| detail.configurationItem.configuration.targetResourceId | target.resource.attribute.labels | The value of detail.configurationItem.configuration.targetResourceIdfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "configurationItem configuration targetResourceId". | 
| detail.configurationItem.configuration.targetResourceType | target.resource.attribute.labels | The value of detail.configurationItem.configuration.targetResourceTypefrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "configurationItem configuration targetResourceType". | 
| detail.configurationItem.configurationItemCaptureTime | _target.asset.attribute.creation_time | The value of detail.configurationItem.configurationItemCaptureTimefrom the raw log is converted to a timestamp and mapped to the_target.asset.attribute.creation_timefield. | 
| detail.configurationItem.configurationItemStatus | target.resource.attribute.labels | The value of detail.configurationItem.configurationItemStatusfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "configurationItem configurationItemStatus". | 
| detail.configurationItem.configurationStateId | target.resource.attribute.labels | The value of detail.configurationItem.configurationStateIdfrom the raw log is converted to a string and added as a key-value pair to thetarget.resource.attribute.labelswith the key "configurationItem configurationStateId". | 
| detail.configurationItem.resourceId | target.resource.id | The value of detail.configurationItem.resourceIdfrom the raw log is mapped to thetarget.resource.idfield. | 
| detail.configurationItem.resourceType | target.resource.resource_subtype | The value of detail.configurationItem.resourceTypefrom the raw log is mapped to thetarget.resource.resource_subtypefield. | 
| detail.configurationItemDiff.changedProperties.Configuration.configRuleList.1.updatedValue.configRuleArn | security_result.rule_id | The value of detail.configurationItemDiff.changedProperties.Configuration.configRuleList.1.updatedValue.configRuleArnfrom the raw log is mapped to thesecurity_result.rule_idfield. | 
| detail.eventCategory | security_result.category_details | The value of detail.eventCategoryfrom the raw log is mapped to thesecurity_result.category_detailsfield. | 
| detail.eventID | metadata.product_log_id | The value of detail.eventIDfrom the raw log is mapped to themetadata.product_log_idfield. | 
| detail.eventName | additional.fields | The value of detail.eventNamefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "Event Name". | 
| detail.eventSource | target.application | The value of detail.eventSourcefrom the raw log is mapped to thetarget.applicationfield. | 
| detail.eventType | additional.fields | The value of detail.eventTypefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "Event Type". | 
| detail.eventVersion | metadata.product_version | The value of detail.eventVersionfrom the raw log is mapped to themetadata.product_versionfield. | 
| detail.managementEvent | additional.fields | The value of detail.managementEventfrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "detail managementEvent". | 
| detail.messageType | target.resource.attribute.labels | The value of detail.messageTypefrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Message Type". | 
| detail.newEvaluationResult.complianceType | security_result.summary | The value of detail.newEvaluationResult.complianceTypefrom the raw log is mapped to thesecurity_result.summaryfield. | 
| detail.newEvaluationResult.configRuleInvokedTime | additional.fields | The value of detail.newEvaluationResult.configRuleInvokedTimefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "newEvaluationResult_configRuleInvokedTime". | 
| detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleName | additional.fields | The value of detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleNamefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "newEvaluationResult_configRuleName". | 
| detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceId | additional.fields | The value of detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceIdfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "newEvaluationResult_resourceId". | 
| detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceType | additional.fields | The value of detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceTypefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "newEvaluationResult_resourceType". | 
| detail.newEvaluationResult.resultRecordedTime | additional.fields | The value of detail.newEvaluationResult.resultRecordedTimefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "newEvaluationResult_resultRecordedTime". | 
| detail.oldEvaluationResult.configRuleInvokedTime | additional.fields | The value of detail.oldEvaluationResult.configRuleInvokedTimefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "oldEvaluationResult_configRuleInvokedTime". | 
| detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleName | additional.fields | The value of detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleNamefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "oldEvaluationResult_configRuleName". | 
| detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceId | additional.fields | The value of detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceIdfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "oldEvaluationResult_resourceId". | 
| detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceType | additional.fields | The value of detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceTypefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "oldEvaluationResult_resourceType". | 
| detail.oldEvaluationResult.resultRecordedTime | additional.fields | The value of detail.oldEvaluationResult.resultRecordedTimefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "oldEvaluationResult_resultRecordedTime". | 
| detail.readOnly | additional.fields | The value of detail.readOnlyfrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "detail readOnly". | 
| detail.recipientAccountId | target.resource.attribute.labels | The value of detail.recipientAccountIdfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Recipient Account Id". | 
| detail.recordVersion | metadata.product_version | The value of detail.recordVersionfrom the raw log is mapped to themetadata.product_versionfield. | 
| detail.requestID | target.resource.attribute.labels | The value of detail.requestIDfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Detail Request ID". | 
| detail.resourceType | target.resource.resource_subtype | The value of detail.resourceTypefrom the raw log is mapped to thetarget.resource.resource_subtypefield. | 
| detail.s3Bucket | about.resource.name | The value of detail.s3Bucketfrom the raw log is mapped to theabout.resource.namefield. | 
| detail.s3ObjectKey | target.resource.attribute.labels | The value of detail.s3ObjectKeyfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "s3ObjectKey". | 
| detail.userAgent | network.http.user_agent | The value of detail.userAgentfrom the raw log is mapped to thenetwork.http.user_agentfield. | 
| detail.userIdentity.accessKeyId | target.user.userid | The value of detail.userIdentity.accessKeyIdfrom the raw log is mapped to thetarget.user.useridfield. | 
| detail.userIdentity.accountId | metadata.product_deployment_id | The value of detail.userIdentity.accountIdfrom the raw log is mapped to themetadata.product_deployment_idfield. | 
| detail.userIdentity.arn | target.user.userid | The value of detail.userIdentity.arnfrom the raw log is mapped to thetarget.user.useridfield. | 
| detail.userIdentity.principalId | principal.user.product_object_id | The value of detail.userIdentity.principalIdfrom the raw log is mapped to theprincipal.user.product_object_idfield. | 
| detail.userIdentity.sessionContext.attributes.mfaAuthenticated | principal.user.attribute.labels | The value of detail.userIdentity.sessionContext.attributes.mfaAuthenticatedfrom the raw log is added as a key-value pair to theprincipal.user.attribute.labelswith the key "mfaAuthenticated". | 
| detail.userIdentity.sessionContext.sessionIssuer.userName | target.user.user_display_name | The value of detail.userIdentity.sessionContext.sessionIssuer.userNamefrom the raw log is mapped to thetarget.user.user_display_namefield. | 
| detail.userIdentity.type | principal.resource.type | The value of detail.userIdentity.typefrom the raw log is mapped to theprincipal.resource.typefield. | 
| detail-type | metadata.product_event_type | The value of detail-typefrom the raw log is mapped to themetadata.product_event_typefield. | 
| device | principal.asset.product_object_id | The value of devicefrom the raw log is mapped to theprincipal.asset.product_object_idfield. | 
| digestPublicKeyFingerprint | target.file.sha1 | The value of digestPublicKeyFingerprintfrom the raw log is mapped to thetarget.file.sha1field. | 
| digestS3Bucket | principal.resource.name | The value of digestS3Bucketfrom the raw log is mapped to theprincipal.resource.namefield. | 
| digestS3Object | principal.asset.asset_id | The value of digestS3Objectfrom the raw log is prepended with "S3 Object: " and mapped to theprincipal.asset.asset_idfield. | 
| digestSignatureAlgorithm | network.tls.cipher | The value of digestSignatureAlgorithmfrom the raw log is mapped to thenetwork.tls.cipherfield. | 
| digestStartTime | metadata.event_timestamp | The value of digestStartTimefrom the raw log is converted to a timestamp and mapped to themetadata.event_timestampfield. | 
| dimensions.VolumeId | additional.fields | The value of dimensions.VolumeIdfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "VolumeId". | 
| duration | additional.fields | The value of durationfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "duration". | 
| errorCode | security_result.rule_name | The value of errorCodefrom the raw log is mapped to thesecurity_result.rule_namefield. | 
| errorMessage | security_result.summary | The value of errorMessagefrom the raw log is mapped to thesecurity_result.summaryfield. | 
| executionId | principal.process.pid | The value of executionIdfrom the raw log is mapped to theprincipal.process.pidfield. | 
| host | principal.hostname,principal.ip | The value of hostfrom the raw log, with hyphens replaced by dots, is parsed as an IP address and mapped to theprincipal.ipfield if successful. Otherwise, it is mapped to theprincipal.hostnamefield. | 
| http_verb | network.http.method | The value of http_verbfrom the raw log is converted to uppercase and mapped to thenetwork.http.methodfield. | 
| kubernetes.container_hash | additional.fields | The value of kubernetes.container_hashfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "container_hash". | 
| kubernetes.container_image | additional.fields | The value of kubernetes.container_imagefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "container_image". | 
| kubernetes.container_name | additional.fields | The value of kubernetes.container_namefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "container_name". | 
| kubernetes.docker_id | principal.asset_id | The value of kubernetes.docker_idfrom the raw log is prepended with "id: " and mapped to theprincipal.asset_idfield. | 
| kubernetes.host | principal.hostname,principal.ip | The value of kubernetes.hostfrom the raw log, with hyphens replaced by dots, is parsed as an IP address and mapped to theprincipal.ipfield if successful. Otherwise, it is mapped to theprincipal.hostnamefield. | 
| kubernetes.namespace | principal.namespace | The value of kubernetes.namespacefrom the raw log is mapped to theprincipal.namespacefield. | 
| kubernetes.namespace_name | principal.namespace | The value of kubernetes.namespace_namefrom the raw log is mapped to theprincipal.namespacefield. | 
| kubernetes.pod_id | principal.asset.asset_id | The value of kubernetes.pod_idfrom the raw log is prepended with "pod_id: " and mapped to theprincipal.asset.asset_idfield. | 
| kubernetes.pod_name | additional.fields | The value of kubernetes.pod_namefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "pod name". | 
| lambdaArn | principal.hostname | The value of lambdaArnfrom the raw log is mapped to theprincipal.hostnamefield. | 
| level | security_result.severity | The value of levelfrom the raw log determines the value ofsecurity_result.severity. Iflevelis "Info", the value is "INFORMATIONAL". Iflevelis "Error", the value is "ERROR". Iflevelis "Warning", the value is "MEDIUM". | 
| log | metadata.description | The value of logfrom the raw log is mapped to themetadata.descriptionfield ifdescris empty. | 
| logFiles | about | For each element in the logFilesarray from the raw log, anaboutobject is created withfile.full_pathset tos3Object,asset.hostnameset tos3Bucket, andfile.sha256set tohashValue. | 
| log_processed.cause | security_result.summary | The value of log_processed.causefrom the raw log is mapped to thesecurity_result.summaryfield. | 
| log_processed.ids | intermediary.hostname | For each element in the log_processed.idsarray from the raw log, anintermediaryobject is created withhostnameset to the element's value. | 
| log_processed.level | security_result.severity | The value of log_processed.levelfrom the raw log is mapped to thesecurity_result.severityfield. | 
| log_processed.msg | metadata.description | The value of log_processed.msgfrom the raw log is mapped to themetadata.descriptionfield. | 
| log_processed.ts | metadata.event_timestamp | The value of log_processed.tsfrom the raw log is converted to a timestamp and mapped to themetadata.event_timestampfield. | 
| log_type | metadata.log_type | The value of log_typefrom the raw log is mapped to themetadata.log_typefield.  This is a custom field added for context. | 
| logevent.message | security_result.description | The value of logevent.messagefrom the raw log is mapped to thesecurity_result.descriptionfield. It is also parsed using grok to extract additional fields. | 
| logGroup | security_result.about.resource.name | The value of logGroupfrom the raw log is mapped to thesecurity_result.about.resource.namefield. | 
| logStream | security_result.about.resource.attribute.labels | The value of logStreamfrom the raw log is added as a key-value pair to thesecurity_result.about.resource.attribute.labelswith the key "logStream". | 
| memory_used | additional.fields | The value of memory_usedfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "memory_used". | 
| metric_name | additional.fields | The value of metric_namefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "metric_name". | 
| metric_stream_name | additional.fields | The value of metric_stream_namefrom the raw log is added as a key-value pair to theadditional.fieldswith the key "metric_stream_name". | 
| namespace | principal.namespace | The value of namespacefrom the raw log is mapped to theprincipal.namespacefield. | 
| owner | principal.user.userid | The value of ownerfrom the raw log is mapped to theprincipal.user.useridfield. | 
| parameters | additional.fields | The value of parametersfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "Parameters". | 
| Path | principal.process.file.full_path | The value of Pathfrom the raw log is mapped to theprincipal.process.file.full_pathfield. | 
| pid | principal.process.pid | The value of pidfrom the raw log is mapped to theprincipal.process.pidfield. | 
| PolicyName | security_result.rule_name | The value of PolicyNamefrom the raw log is mapped to thesecurity_result.rule_namefield. | 
| prin_host | principal.hostname | The value of prin_hostfrom the raw log is mapped to theprincipal.hostnamefield. | 
| principal_hostname | principal.hostname | The value of principal_hostnamefrom the raw log is mapped to theprincipal.hostnamefield. | 
| process | principal.application | The value of processfrom the raw log is mapped to theprincipal.applicationfield. | 
| rawData | additional.fields | The value of rawDatafrom the raw log is added as a key-value pair to theadditional.fieldswith the key "Raw Data". | 
| Recommendation | security_result.detection_fields | The value of Recommendationfrom the raw log is added as a key-value pair to thesecurity_result.detection_fieldswith the key "Recommendation". | 
| referral_url | network.http.referral_url | The value of referral_urlfrom the raw log is mapped to thenetwork.http.referral_urlfield. | 
| region | principal.location.name | The value of regionfrom the raw log is mapped to theprincipal.location.namefield. | 
| resp_code | network.http.response_code | The value of resp_codefrom the raw log is converted to an integer and mapped to thenetwork.http.response_codefield. | 
| resource_url | network.http.referral_url | The value of resource_urlfrom the raw log is mapped to thenetwork.http.referral_urlfield. | 
| ResourceType | target.resource.resource_subtype | The value of ResourceTypefrom the raw log is mapped to thetarget.resource.resource_subtypefield. | 
| response_body | additional.fields | The value of response_bodyfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "Response body". | 
| Role | target.resource.product_object_id | The value of Rolefrom the raw log is mapped to thetarget.resource.product_object_idfield. | 
| s3_bucket_path | target.file.full_path | The value of s3_bucket_pathfrom the raw log is mapped to thetarget.file.full_pathfield. | 
| sec_result.category | security_result.category | The value of sec_result.categoryis derived from the parser logic. Ifdescrcontains "authentication is required", the value is "AUTH_VIOLATION". | 
| sec_result.description | security_result.description | The value of sec_result.descriptionis derived from the parser logic. It is set to the value ofcloudwatchLogif present. | 
| sec_result.severity | security_result.severity | The value of sec_result.severityis derived from the parser logic. It is set based on the value ofseverityorlevel. | 
| sec_result.summary | security_result.summary | The value of sec_result.summaryis derived from the parser logic. It is set to the value oflog_processed.causeorerrorMessageif present. | 
| security_result | security_result | The security_resultobject is constructed from various fields and parser logic. | 
| serverId | additional.fields | The value of serverIdfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "server_id". | 
| severity | security_result.severity | The value of severityfrom the raw log, converted to uppercase and normalized, is mapped to thesecurity_result.severityfield. | 
| Source | principal.hostname | The value of Sourcefrom the raw log is mapped to theprincipal.hostnamefield. | 
| source | principal.hostname | The value of sourcefrom the raw log is mapped to theprincipal.hostnamefield. | 
| SourceIP | principal.ip | The value of SourceIPfrom the raw log is mapped to theprincipal.ipfield. | 
| src_port | principal.port | If src_portis "80", it is converted to an integer and mapped to theprincipal.portfield, andnetwork.application_protocolis set to "HTTP". | 
| stream | additional.fields | The value of streamfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "stream". | 
| subscriptionFilters | security_result.about.resource.attribute.labels | For each element in the subscriptionFiltersarray from the raw log, a key-value pair is added to thesecurity_result.about.resource.attribute.labelswith the key "subscriptionFilter" and the value from the array. | 
| support_contact | target.resource.attribute.labels | The value of support_contactfrom the raw log is added as a key-value pair to thetarget.resource.attribute.labelswith the key "Support Contact". | 
| t_ip | target.ip | The value of t_ipfrom the raw log, after removing hyphens, is parsed as an IP address and mapped to thetarget.ipfield if successful. | 
| time | metadata.event_timestamp | The value of timefrom the raw log is converted to a timestamp and mapped to themetadata.event_timestampfield. | 
| timestamp | metadata.event_timestamp | The value of timestampfrom the raw log is converted to a timestamp using various formats and mapped to themetadata.event_timestampfield. | 
| tls | network.tls.version | The value of tlsfrom the raw log is mapped to thenetwork.tls.versionfield. | 
| transferDetails.serverId | additional.fields | The value of transferDetails.serverIdfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "server_id". | 
| transferDetails.sessionId | network.session_id | The value of transferDetails.sessionIdfrom the raw log is mapped to thenetwork.session_idfield. | 
| transferDetails.username | principal.user.user_display_name | The value of transferDetails.usernamefrom the raw log is mapped to theprincipal.user.user_display_namefield. | 
| ts | metadata.event_timestamp | The value of tsfrom the raw log, combined with the timezone if available, is converted to a timestamp and mapped to themetadata.event_timestampfield. | 
| type | metadata.product_event_type | The value of typefrom the raw log is mapped to themetadata.product_event_typefield. | 
| unit | additional.fields | The value of unitfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "unit". | 
| url | target.url | The value of urlfrom the raw log is mapped to thetarget.urlfield. | 
| url_back_to_product | metadata.url_back_to_product | The value of url_back_to_productfrom the raw log is mapped to themetadata.url_back_to_productfield. | 
| User | principal.user.userid | The value of Userfrom the raw log is mapped to theprincipal.user.useridfield. | 
| user | target.user.userid,metadata.event_type,extensions.auth.mechanism | If useris present,metadata.event_typeis set to "USER_LOGIN",extensions.auth.mechanismis set to "NETWORK", and the value ofuseris mapped totarget.user.userid. | 
| value.count | additional.fields | The value of value.countfrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "count". | 
| value.max | additional.fields | The value of value.maxfrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "max". | 
| value.min | additional.fields | The value of value.minfrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "min". | 
| value.sum | additional.fields | The value of value.sumfrom the raw log is converted to a string and added as a key-value pair to theadditional.fieldswith the key "sum". | 
| workflowId | additional.fields | The value of workflowIdfrom the raw log is added as a key-value pair to theadditional.fieldswith the key "workflowId". | 
Need more help? Get answers from Community members and Google SecOps professionals.