Recopila registros de alertas de Palo Alto Prisma Cloud
Descripción general
Este analizador extrae registros de alertas de Palo Alto Prisma Cloud en formato JSON y los transforma en la UDM. El analizador realiza la normalización de datos, las conversiones de tipo y la lógica condicional para propagar los campos de la AUA adecuados. También controla las estructuras y los arrays JSON anidados dentro de los datos de registro para extraer información relevante.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a Palo Alto Prisma Cloud.
Configura un feed en Google SecOps para transferir alertas de Palo Alto Prisma Cloud
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Alertas de PAN Prisma Cloud).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Carga útil de alertas de Palo Alto Prisma Cloud como el Tipo de registro.
- Haz clic en Siguiente.
- Opcional: Especifica valores para los siguientes parámetros de entrada:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
. - Espacio de nombres de recursos: Es el espacio de nombres de recursos.
- Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
- Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
- En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
- Haz clic en Listo.
Crea una clave de API para el feed de webhook
Ve a consola de Google Cloud > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso de la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
Habilita la autenticación especificando la clave de API y la clave secreta como parte del encabezado personalizado en el siguiente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL.
Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de consulta en el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Reemplaza lo siguiente:
ENDPOINT_URL
: Es la URL del extremo del feed.API_KEY
: Es la clave de API para autenticarse en Google Security Operations.SECRET
: Es la clave secreta que generaste para autenticar el feed.
Configura el webhook de Palo Alto Prisma Cloud en Google SecOps
- Accede a Palo Alto Prisma Cloud.
- Selecciona Configuración > Integraciones y notificaciones ((and_then)) Integraciones.
- Haz clic en Agregar integración.
- Selecciona Webhook.
- Especifica valores para los siguientes parámetros de entrada:
- Nombre de la integración: Proporciona un nombre único y descriptivo (por ejemplo, Google SecOps).
- URL de webhook: Ingresa ENDPOINT_URL.
- Opcional: Proporciona una descripción de la integración.
- Opcional: Habilita Carga útil personalizada > haz clic en Siguiente para revisar o modificar la carga útil personalizada.
- Haz clic en Siguiente.
- Probar y Guardar integración.
Configura alertas de Palo Alto Prisma Cloud
- En la consola de Palo Alto Prisma Cloud, ve a Alertas > Ver reglas de alertas.
- Selecciona una regla de alerta existente para editarla.
- Opcional: Crea una alerta nueva para Infraestructura de nube.
- Opcional: Crea una alerta nueva para Cloud Workload.
- Ve a Configurar notificaciones.
- Selecciona Webhook.
- Opcional: Selecciona los canales a los que deseas enviar notificaciones de las alertas activadas por la regla de alertas.
- Haz clic en Siguiente.
- Haz clic en Guardar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
accountId |
target.resource.id |
El valor de accountId del registro sin procesar. |
accountId |
target.resource.product_object_id |
El valor de accountId del registro sin procesar. Esto anula el campo resource.id obsoleto. |
alertId |
security_result.detection_fields[].key |
La clave se establece en "alert id". |
alertId |
security_result.detection_fields[].value |
El valor de alertId del registro sin procesar. |
alertRuleId |
security_result.rule_id |
El valor de alertRuleId del registro sin procesar. |
alertRuleName |
security_result.rule_name |
El valor de alertRuleName del registro sin procesar. |
alertStatus |
security_result.detection_fields[].key |
La clave se establece en "alert status". |
alertStatus |
security_result.detection_fields[].value |
El valor de alertStatus del registro sin procesar. |
alertTs |
security_result.detection_fields[].key |
La clave se establece en "alertTs". |
alertTs |
security_result.detection_fields[].value |
El valor de alertTs del registro sin procesar, convertido en una cadena. |
callbackUrl |
metadata.url_back_to_product |
El valor de callbackUrl del registro sin procesar. |
cloudType |
principal.cloud.environment |
Si cloudType es “gcp” (sin distinción entre mayúsculas y minúsculas), el valor se establece en “GOOGLE_CLOUD_PLATFORM”. |
complianceMetadata[].complianceId |
security_result.detection_fields[].key |
La clave se establece en "complianceId". |
complianceMetadata[].complianceId |
security_result.detection_fields[].value |
El valor de complianceMetadata[].complianceId del registro sin procesar. |
complianceMetadata[].customAssigned |
security_result.detection_fields[].key |
La clave se establece en "customAssigned". |
complianceMetadata[].customAssigned |
security_result.detection_fields[].value |
El valor de complianceMetadata[].customAssigned del registro sin procesar, convertido en una cadena. |
complianceMetadata[].policyId |
security_result.detection_fields[].key |
La clave se establece en "Policy Id". |
complianceMetadata[].policyId |
security_result.detection_fields[].value |
El valor de complianceMetadata[].policyId del registro sin procesar. |
complianceMetadata[].requirementId |
security_result.rule_id |
El valor de complianceMetadata[].requirementId del registro sin procesar. |
complianceMetadata[].requirementName |
security_result.summary |
El valor de complianceMetadata[].requirementName del registro sin procesar. |
complianceMetadata[].requirementViewOrder |
security_result.detection_fields[].key |
La clave se establece en "requirementViewOrder". |
complianceMetadata[].requirementViewOrder |
security_result.detection_fields[].value |
El valor de complianceMetadata[].requirementViewOrder del registro sin procesar, convertido en una cadena. |
complianceMetadata[].sectionDescription |
security_result.detection_fields[].key |
La clave se establece en "sectionDescription". |
complianceMetadata[].sectionDescription |
security_result.detection_fields[].value |
El valor de complianceMetadata[].sectionDescription del registro sin procesar. |
complianceMetadata[].sectionId |
security_result.detection_fields[].key |
La clave se establece en "sectionId". |
complianceMetadata[].sectionId |
security_result.detection_fields[].value |
El valor de complianceMetadata[].sectionId del registro sin procesar. |
complianceMetadata[].sectionLabel |
security_result.detection_fields[].key |
La clave se establece en "sectionLabel". |
complianceMetadata[].sectionLabel |
security_result.detection_fields[].value |
El valor de complianceMetadata[].sectionLabel del registro sin procesar. |
complianceMetadata[].sectionViewOrder |
security_result.detection_fields[].key |
La clave se establece en "sectionViewOrder". |
complianceMetadata[].sectionViewOrder |
security_result.detection_fields[].value |
El valor de complianceMetadata[].sectionViewOrder del registro sin procesar, convertido en una cadena. |
complianceMetadata[].standardDescription |
security_result.detection_fields[].key |
La clave se establece en "standardDescription". |
complianceMetadata[].standardDescription |
security_result.detection_fields[].value |
El valor de complianceMetadata[].standardDescription del registro sin procesar. |
complianceMetadata[].standardName |
security_result.rule_name |
El valor de complianceMetadata[].standardName del registro sin procesar. |
complianceMetadata[].systemDefault |
security_result.detection_fields[].key |
La clave se establece en "systemDefault". |
complianceMetadata[].systemDefault |
security_result.detection_fields[].value |
El valor de complianceMetadata[].systemDefault del registro sin procesar, convertido en una cadena. |
create_time |
metadata.event_timestamp , events[].timestamp |
El valor de create_time del registro sin procesar. |
data.allocationId |
principal.resource.product_object_id |
El valor de data.allocationId del registro sin procesar. |
data.publicIp |
principal.ip |
El valor de data.publicIp del registro sin procesar. |
deleted |
additional.fields[].key |
La clave se establece como "borrada". |
deleted |
additional.fields[].value.string_value |
El valor de deleted del registro sin procesar, convertido en una cadena. |
description |
metadata.description |
El valor de description del registro sin procesar. |
firstSeen |
principal.asset.first_seen_time |
El valor de firstSeen del registro sin procesar, analizado como una marca de tiempo (UNIX_MS o formato UNIX) |
hasFinding |
security_result.detection_fields[].key |
La clave se establece en "hasFinding". |
hasFinding |
security_result.detection_fields[].value |
El valor de hasFinding del registro sin procesar, convertido en una cadena. |
lastSeen |
principal.asset.last_discover_time |
El valor de lastSeen del registro sin procesar, analizado como una marca de tiempo (UNIX_MS o formato UNIX) |
N/A | metadata.event_type |
Se establece en "USER_RESOURCE_ACCESS" si no se anula con un tipo de evento específico del registro. De lo contrario, configúralo como "GENERIC_EVENT". |
N/A | metadata.product_name |
Se codifica de forma fija en "CASB". |
N/A | metadata.vendor_name |
Está codificado de forma fija como “Palo Alto Networks”. |
policyDescription |
security_result.detection_fields[].key |
La clave se establece en "policyDescription". |
policyDescription |
security_result.detection_fields[].value |
El valor de policyDescription del registro sin procesar. |
policyId |
security_result.detection_fields[].key |
La clave se establece en "Policy Id". |
policyId |
security_result.detection_fields[].value |
El valor de policyId del registro sin procesar. |
policyLabels |
additional.fields[].key |
La clave se establece en "policyLabels". |
policyLabels |
additional.fields[].value.string_value |
El valor de policyLabels del registro sin procesar. |
policyName |
security_result.description |
El valor de policyName del registro sin procesar. |
policyRecommendation |
security_result.detection_fields[].key |
La clave está configurada como "recomendación de política". |
policyRecommendation |
security_result.detection_fields[].value |
El valor de policyRecommendation del registro sin procesar. |
policyType |
security_result.detection_fields[].key |
La clave se establece en "Tipo de política". |
policyType |
security_result.detection_fields[].value |
El valor de policyType del registro sin procesar. |
reason |
security_result.summary |
El valor de reason del registro sin procesar. |
recommendation |
security_result.detection_fields[].key |
La clave se establece en "Recommendation". |
recommendation |
security_result.detection_fields[].value |
El valor de recommendation del registro sin procesar. |
resource.additionalInfo |
principal.resource.attribute.labels[].key |
La clave se establece en "resource additionalInfo". |
resource.additionalInfo |
principal.resource.attribute.labels[].value |
El valor de resource.additionalInfo del registro sin procesar. |
resource.cloudAccountGroups |
principal.resource.attribute.labels[].key |
La clave se establece en "resource cloudAccountGroups {index}". |
resource.cloudAccountGroups |
principal.resource.attribute.labels[].value |
El valor de resource.cloudAccountGroups[] del registro sin procesar. |
resource.cloudType |
principal.resource.attribute.labels[].key |
La clave se establece en "resource cloudType". |
resource.cloudType |
principal.resource.attribute.labels[].value |
El valor de resource.cloudType del registro sin procesar. |
resource.data |
principal.resource.attribute.labels[].key |
La clave se establece en "resource data {nested_key}". |
resource.data |
principal.resource.attribute.labels[].value |
El valor de resource.data[] del registro sin procesar. |
resource.id |
principal.resource.product_object_id |
El valor de resource.id del registro sin procesar. |
resource.name |
principal.resource.name |
El valor de resource.name del registro sin procesar. |
resource.region |
principal.location.country_or_region |
El valor de resource.region del registro sin procesar. |
resource.regionId |
principal.cloud.availability_zone |
El valor de resource.regionId del registro sin procesar. |
resource.resourceApiName |
principal.resource.attribute.labels[].key |
La clave se establece en "resource resourceApiName". |
resource.resourceApiName |
principal.resource.attribute.labels[].value |
El valor de resource.resourceApiName del registro sin procesar. |
resource.resourceTags |
principal.resource.attribute.labels[].key |
La clave se establece en "resource resourceTags {nested_key}". |
resource.resourceTags |
principal.resource.attribute.labels[].value |
El valor de resource.resourceTags[] del registro sin procesar. |
resource.resourceTs |
principal.resource.attribute.labels[].key |
La clave se establece en "resource resourceTs". |
resource.resourceTs |
principal.resource.attribute.labels[].value |
El valor de resource.resourceTs del registro sin procesar. |
resource.resourceType |
principal.resource.attribute.labels[].key |
La clave se establece en "resource resourceType". |
resource.resourceType |
principal.resource.attribute.labels[].value |
El valor de resource.resourceType del registro sin procesar. |
resource.rrn |
principal.resource.attribute.labels[].key |
La clave se establece en "resource rrn". |
resource.rrn |
principal.resource.attribute.labels[].value |
El valor de resource.rrn del registro sin procesar. |
resource.url |
principal.url |
El valor de resource.url del registro sin procesar. |
resourceCloudService |
principal.resource.attribute.labels[].key |
La clave se establece en "servicio de nube de recursos". |
resourceCloudService |
principal.resource.attribute.labels[].value |
El valor de resourceCloudService del registro sin procesar. |
resourceName |
principal.resource.name |
El valor de resourceName del registro sin procesar. |
resourceRegion |
principal.location.country_or_region |
El valor de resourceRegion del registro sin procesar. |
resourceRegionId |
principal.cloud.availability_zone |
El valor de resourceRegionId del registro sin procesar. |
resourceType |
target.resource.resource_subtype |
El valor de resourceType del registro sin procesar. |
severity |
security_result.severity |
El valor de severity del registro sin procesar, convertido a mayúsculas Se asignan a los valores de gravedad de la UDM (CRÍTICO, ALTO, MEDIO, BAJO, INFORMATIVO). |
source |
principal.application |
El valor de source del registro sin procesar. |
unifiedAssetId |
principal.asset.asset_id |
El valor de unifiedAssetId del registro sin procesar, con el prefijo "ASSETID:". |
Cambios
2023-12-10
- Se agregó un patrón Grok para extraer la parte JSON.
- Se asignó "resourceId" a "principal.resource.product_object_id".
- Se asignó "accountId" a "target.resource.product_object_id".
- Se asignó "alertRuleName" a "security_result.rule_name".
- Se asignó "accountName" a "target.resource.name".
- Se asignó "hasFinding" a "security_result.detection_fields".
- Se asignó "resourceRegionId" a "principal.cloud.availability_zone".
- Se asignó "source" a "principal.application".
- Se asignó "callbackUrl" a "metadata.url_back_to_product".
- Se asignó "alertRuleId" a "security_result.rule_id".
- Se asignó "alertId" a "security_result.detection_fields".
- Se asignó "policyLabels" a "additional.fields".
- Se asignó "policyName" a "security_result.description".
- Se asignó “resourceName” a “principal.resource.name”.
- Se asignó "resourceRegion" a "principal.location.country_or_region".
- Se asignó "policyDescription" a "security_result.detection_fields".
- Se asignó "policyRecommendation" a "security_result.detection_fields".
- Se asignó "resourceCloudService" a "principal.resource.attribute.labels".
- Se asignó "resource.url" a "principal.url".
- Se asignó "alertTs" a "security_result.detection_fields".
- Se asignó "firstSeen" a "principal.asset.first_seen_time".
- Se asignó "lastSeen" a "principal.asset.last_discover_time".
- Se asignó "reason" a "security_result.summary".
- Se asignó "alertStatus" a "security_result.detection_fields".
- Si el valor de "severity" es "HIGH", establece "security_result.severity" en "HIGH".
- Si el valor de "cloudType" es "gcp", establece "principal.cloud.environment" en "GOOGLE_CLOUD_PLATFORM".
2023-08-17
- Sin embargo, el analizador se creó recientemente.