Collect Google Cloud Run functions context logs

This document describes how fields of Google Cloud Run functions context logs map to Google Security Operations Unified Data Model (UDM) fields.

An ingestion label identifies the parser which normalizes raw log data to structured UDM format. The information in this document applies to the parser with the GCP_CLOUD_FUNCTIONS_CONTEXT ingestion label.

For information about other context parsers that Google SecOps supports, see Google SecOps context parsers .

Supported Google Cloud Run functions context logs log formats

The Google Cloud Run functions context logs parser supports logs in JSON format.

Supported Google Cloud Run functions context logs sample logs

  • JSON:

     {
      "name": "//cloudfunctions.googleapis.com/projects/cspm-32817/locations/asia-south1/functions/GetNSPAAlertsFunction-asia-south1",
      "assetType": "cloudfunctions.googleapis.com/CloudFunction",
      "resource": {
        "version": "v1",
        "discoveryDocumentUri": "https://cloudfunctions.googleapis.com/$discovery/rest",
        "discoveryName": "CloudFunction",
        "parent": "//cloudresourcemanager.googleapis.com/projects/1063885730524",
        "data": {
          "availableMemoryMb": 256,
          "buildId": "843ffd9a-eab1-4022-8d0f-256e55d110d3",
          "buildName": "projects/1063885730524/locations/asia-south1/builds/843ffd9a-eab1-4022-8d0f-256e55d110d3",
          "dockerRegistry": "CONTAINER_REGISTRY",
          "entryPoint": "google_cloud_function_handler",
          "eventTrigger": {
            "eventType": "google.pubsub.topic.publish",
            "failurePolicy": {},
            "resource": "projects/cspm-32817/topics/GetNSPAAlerts-asia-south1",
            "service": "pubsub.googleapis.com"
          },
          "ingressSettings": "ALLOW_ALL",
          "labels": {
            "deployment-tool": "console-cloud"
          },
          "maxInstances": 3000,
          "name": "projects/cspm-32817/locations/asia-south1/functions/GetNSPAAlertsFunction-asia-south1",
          "runtime": "python37",
          "serviceAccountEmail": "dummy@user.com",
          "sourceArchiveUrl": "gs://cloudfunctionscrest/GetNetskopeSecurityPostureAssessmentFunction (2).zip",
          "status": "ACTIVE",
          "timeout": "300s",
          "updateTime": "2023-04-21T13:33:30.711Z",
          "versionId": "1"
        }
      },
      "ancestors": [
        "projects/1063885730524",
        "organizations/595779152576"
      ]
    } 
    

Field mapping reference

This section explains how the Google SecOps parser maps Google Cloud Run functions context logs fields to Google SecOps UDM fields.

Log field UDM mapping Logic
entity.relations.resource.resource_type The entity.relations.resource.resource_type UDM field is set to CLOUD_PROJECT .
entity.relations.resource.resource_subtype The entity.relations.resource.resource_subtype UDM field is set to project .
entity.relations.resource_ancestors.resource_type If the ancestor log field value matches the regular expression pattern organizations , then the entity.relations.resource_ancestors.resource_type UDM field is set to CLOUD_ORGANIZATION .

Else, if the ancestor log field value matches the regular expression pattern folders , then the entity.relations.resource_ancestors.resource_type UDM field is set to STORAGE_OBJECT .
entity.relations.resource_ancestors.resource_subtype If the ancestor log field value matches the regular expression pattern organizations , then the entity.relations.resource_ancestors.resource_subtype UDM field is set to organizations .

Else, if the ancestor log field value matches the regular expression pattern folders , then the entity.relations.resource_ancestors.resource_subtype UDM field is set to folders .
entity.relations.relationship The entity.relations.relationship UDM field is set to MEMBER .
resource.parent, ancestors[]
entity.relations.entity.resource.name If the resource.parent log field value is empty, then the ancestors.0 log field is mapped to the relations.entity.resource.name UDM field.
ancestors[]
entity.relations.entity.resource_ancestors.name If the ancestor log field value is not a substring of resource.parent log field value, then the ancestors log field is mapped to the relations.entity.resource_ancestors.name UDM field.
entity.relations.entity_type The entity.relations.entity_type UDM field is set to RESOURCE .
entity.relations.direction The entity.relations.direction UDM field is set to UNIDIRECTIONAL .
entity.metadata.vendor_name The entity.metadata.vendor_name UDM field is set to Google Cloud Platform .
resource.version
entity.metadata.product_version
entity.metadata.product_name The entity.metadata.product_name UDM field is set to GCP Cloud Functions .
entity.metadata.entity_type The entity.metadata.entity_type UDM field is set to RESOURCE .
resource.data.description
entity.metadata.description
resource.data.serviceAccountEmail, resource.data.serviceConfig.serviceAccountEmail
entity.entity.user.email_addresses
resource.data.httpsTrigger.url, resource.data.serviceConfig.uri
entity.entity.url
resource.data.stateMessages.type
entity.entity.threat.summary
resource.data.stateMessages.severity
entity.entity.threat.product_severity
resource.data.stateMessages.message
entity.entity.threat.description
entity.entity.resource.resource_type The entity.entity.resource.resource_type UDM field is set to BACKEND_SERVICE .
assetType
entity.entity.resource.resource_subtype
resource.data.name
entity.entity.resource.product_object_id
name
entity.entity.resource.name
resource.data.updateTime
entity.entity.resource.attribute.last_update_time
resource.data.network
entity.entity.resource.attribute.labels[vpc_network]
resource.data.vpcConnector, resource.data.serviceConfig.vpcConnector
entity.entity.resource.attribute.labels[vpc_connector]
resource.data.vpcConnectorEgressSettings, resource.data.serviceConfig.vpcConnectorEgressSettings
entity.entity.resource.attribute.labels[vpc_connector_egress_settings]
resource.data.versionId
entity.entity.resource.attribute.labels[version_id]
resource.data.timeout, resource.data.serviceConfig.timeoutSeconds
entity.entity.resource.attribute.labels[timeout]
resource.data.buildConfig.source.storageSource.object
entity.entity.resource.attribute.labels[storage_source_object]
resource.data.buildConfig.source.storageSource.generation
entity.entity.resource.attribute.labels[storage_source_generation]
resource.data.buildConfig.source.storageSource.bucket
entity.entity.resource.attribute.labels[storage_source_bucket]
resource.data.sourceUploadUrl
entity.entity.resource.attribute.labels[source_upload_url]
resource.data.sourceToken
entity.entity.resource.attribute.labels[source_token]
resource.data.sourceRepository.url
entity.entity.resource.attribute.labels[source_repo_url]
resource.data.sourceRepository.deployedUrl
entity.entity.resource.attribute.labels[source_repo_deployed_url]
resource.data.sourceArchiveUrl
entity.entity.resource.attribute.labels[source_archive_url]
resource.data.serviceConfig.service
entity.entity.resource.attribute.labels[service_config_service]
resource.data.serviceConfig.revision
entity.entity.resource.attribute.labels[service_config_revision]
resource.data.serviceConfig.maxInstanceRequestConcurrency
entity.entity.resource.attribute.labels[service_config_max_instance_request_concurrency]
resource.data.serviceConfig.availableCpu
entity.entity.resource.attribute.labels[service_config_available_cpu]
resource.data.serviceConfig.allTrafficOnLatestRevision
entity.entity.resource.attribute.labels[service_config_all_traffic_on_latest_revision]
resource.data.httpsTrigger.securityLevel, resource.data.serviceConfig.securityLevel
entity.entity.resource.attribute.labels[security_level]
resource.data.secretVolumes.versions.version, resource.data.serviceConfig.secretVolumes.versions.version
entity.entity.resource.attribute.labels[secret_vol_ver_version]
resource.data.secretVolumes.versions.path, resource.data.serviceConfig.secretVolumes.versions.path
entity.entity.resource.attribute.labels[secret_vol_ver_path]
resource.data.secretVolumes.secret, resource.data.serviceConfig.secretVolumes.secret
entity.entity.resource.attribute.labels[secret_vol_secret]
resource.data.secretVolumes.projectId, resource.data.serviceConfig.secretVolumes.projectId
entity.entity.resource.attribute.labels[secret_vol_project_id]
resource.data.secretVolumes.mountPath, resource.data.serviceConfig.secretVolumes.mountPath
entity.entity.resource.attribute.labels[secret_vol_mount_path]
resource.data.secretEnvironmentVariables.version, resource.data.serviceConfig.secretEnvironmentVariables.version
entity.entity.resource.attribute.labels[secret_env_var_version]
resource.data.secretEnvironmentVariables.secret, resource.data.serviceConfig.secretEnvironmentVariables.secret
entity.entity.resource.attribute.labels[secret_env_var_secret]
resource.data.secretEnvironmentVariables.projectId, resource.data.serviceConfig.secretEnvironmentVariables.projectId
entity.entity.resource.attribute.labels[secret_env_var_project_id]
resource.data.secretEnvironmentVariables.key, resource.data.serviceConfig.secretEnvironmentVariables.key
entity.entity.resource.attribute.labels[secret_env_var_key]
resource.data.runtime, resource.data.buildConfig.runtime
entity.entity.resource.attribute.labels[runtime]
resource.data.buildConfig.sourceProvenance.resolvedStorageSource.object
entity.entity.resource.attribute.labels[resolved_storage_source_object]
resource.data.buildConfig.sourceProvenance.resolvedStorageSource.generation
entity.entity.resource.attribute.labels[resolved_storage_source_generation]
resource.data.buildConfig.sourceProvenance.resolvedStorageSource.bucket
entity.entity.resource.attribute.labels[resolved_storage_source_bucket]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.tagName
entity.entity.resource.attribute.labels[resolved_repo_source_tag_name]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.repoName
entity.entity.resource.attribute.labels[resolved_repo_source_repo_name]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.projectId
entity.entity.resource.attribute.labels[resolved_repo_source_project_id]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.invertRegex
entity.entity.resource.attribute.labels[resolved_repo_source_invert_regex]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.dir
entity.entity.resource.attribute.labels[resolved_repo_source_dir]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.commitSha
entity.entity.resource.attribute.labels[resolved_repo_source_commit_sha]
resource.data.buildConfig.sourceProvenance.resolvedRepoSource.branchName
entity.entity.resource.attribute.labels[resolved_repo_source_branch_name]
resource.data.buildConfig.source.repoSource.tagName
entity.entity.resource.attribute.labels[repo_source_tag_name]
resource.data.buildConfig.source.repoSource.repoName
entity.entity.resource.attribute.labels[repo_source_repo_name]
resource.data.buildConfig.source.repoSource.projectId
entity.entity.resource.attribute.labels[repo_source_project_id]
resource.data.buildConfig.source.repoSource.invertRegex
entity.entity.resource.attribute.labels[repo_source_invert_regex]
resource.data.buildConfig.source.repoSource.dir
entity.entity.resource.attribute.labels[repo_source_dir]
resource.data.buildConfig.source.repoSource.commitSha
entity.entity.resource.attribute.labels[repo_source_commit_sha]
resource.data.buildConfig.source.repoSource.branchName
entity.entity.resource.attribute.labels[repo_source_branch_name]
resource.data.minInstances, resource.data.serviceConfig.minInstanceCount
entity.entity.resource.attribute.labels[min_instance]
resource.data.maxInstances, resource.data.serviceConfig.maxInstanceCount
entity.entity.resource.attribute.labels[max_instance]
resource.data.kmsKeyName
entity.entity.resource.attribute.labels[kms_key_name]
resource.data.ingressSettings, resource.data.serviceConfig.ingressSettings
entity.entity.resource.attribute.labels[ingress_settings]
resource.data.buildConfig.environmentVariables.GOOGLE_FUNCTION_SOURCE
entity.entity.resource.attribute.labels[GOOGLE_FUNCTION_SOURCE]
resource.data.labels.goog-managed-by
entity.entity.resource.attribute.labels[goog-managed-by]
resource.data.status, resource.data.state
entity.entity.resource.attribute.labels[function_status]
resource.data.eventTrigger.trigger
entity.entity.resource.attribute.labels[event_trigger_trigger]
resource.data.eventTrigger.triggerRegion
entity.entity.resource.attribute.labels[event_trigger_trigger_reason]
resource.data.eventTrigger.service
entity.entity.resource.attribute.labels[event_trigger_service]
resource.data.eventTrigger.serviceAccountEmail
entity.entity.resource.attribute.labels[event_trigger_service_account_email]
resource.data.eventTrigger.retryPolicy
entity.entity.resource.attribute.labels[event_trigger_retry_policy]
resource.data.eventTrigger.resource
entity.entity.resource.attribute.labels[event_trigger_resource]
resource.data.eventTrigger.pubsubTopic
entity.entity.resource.attribute.labels[event_trigger_pubsub_topic]
resource.data.eventTrigger.eventFilters.value
entity.entity.resource.attribute.labels[event_trigger_evt_filter_value]
resource.data.eventTrigger.eventFilters.operator
entity.entity.resource.attribute.labels[event_trigger_evt_filter_operator]
resource.data.eventTrigger.eventFilters.attribute
entity.entity.resource.attribute.labels[event_trigger_evt_filter_attribute]
resource.data.eventTrigger.eventType
entity.entity.resource.attribute.labels[event_trigger_event_type]
resource.data.eventTrigger.channel
entity.entity.resource.attribute.labels[event_trigger_channel]
resource.data.environment
entity.entity.resource.attribute.labels[environment]
resource.data.entryPoint, resource.data.buildConfig.entryPoint
entity.entity.resource.attribute.labels[entry_point]
resource.data.dockerRepository, resource.data.buildConfig.dockerRepository
entity.entity.resource.attribute.labels[docker_repository]
resource.data.dockerRegistry, resource.data.buildConfig.dockerRegistry
entity.entity.resource.attribute.labels[docker_registry]
resource.discoveryName
entity.entity.resource.attribute.labels[discovery_name]
resource.discoveryDocumentUri
entity.entity.resource.attribute.labels[discovery_document_uri]
resource.data.labels.deployment-tool
entity.entity.resource.attribute.labels[deployment_tool]
resource.data.buildWorkerPool, resource.data.buildConfig.workerPool
entity.entity.resource.attribute.labels[build_worker_pool]
resource.data.buildName, resource.data.buildConfig.build
entity.entity.resource.attribute.labels[build_name]
resource.data.buildId
entity.entity.resource.attribute.labels[build_id]
resource.data.availableMemoryMb, resource.data.serviceConfig.availableMemory
entity.entity.resource.attribute.labels[available_memory]
entity.entity.resource.attribute.cloud.environment The entity.entity.resource.attribute.cloud.environment UDM field is set to GOOGLE_CLOUD_PLATFORM .
resource.data.environmentVariables.TAXII_VERSION, resource.data.serviceConfig.environmentVariables.TAXII_VERSION
entity.enity.resource.attribute.labels[TAXII_VERSION]
resource.data.environmentVariables.TAXII_USERNAME, resource.data.serviceConfig.environmentVariables.TAXII_USERNAME
entity.enity.resource.attribute.labels[TAXII_USERNAME]
resource.data.environmentVariables.TAXII_PASSWORD_SECRET_PATH, resource.data.serviceConfig.environmentVariables.TAXII_PASSWORD_SECRET_PATH
entity.enity.resource.attribute.labels[TAXII_PASSWORD_SECRET_PATH]
resource.data.environmentVariables.TAXII_DISCOVERY_URL, resource.data.serviceConfig.environmentVariables.TAXII_DISCOVERY_URL
entity.enity.resource.attribute.labels[TAXII_DISCOVERY_URL]
resource.data.environmentVariables.CHRONICLE_SERVICE_ACCOUNT, resource.data.serviceConfig.environmentVariables.CHRONICLE_SERVICE_ACCOUNT
entity.enity.resource.attribute.labels[CHRONICLE_SERVICE_ACCOUNT]
resource.data.environmentVariables.CHRONICLE_CUSTOMER_ID, resource.data.serviceConfig.environmentVariables.CHRONICLE_CUSTOMER_ID
entity.enity.resource.attribute.labels[CHRONICLE_CUSTOMER_ID]
Create a Mobile Website
View Site in Mobile | Classic
Share by: