Integra Pub/Sub en Google SecOps
En este documento, se explica cómo integrar Pub/Sub en Google Security Operations.
Casos de uso
La integración de Pub/Sub admite los siguientes casos de uso:
Recepción automática de alertas: Recupera continuamente los registros, las alertas y la telemetría de seguridad publicados en los temas de Pub/Sub para recibirlos en Google SecOps como casos.
Organización de seguridad centralizada: Consolida el enrutamiento de eventos de seguridad a través de Pub/Sub desde sistemas de terceros y de la nube para activar guías de respuesta automatizadas.
Antes de comenzar
Antes de configurar la integración de Pub/Sub en Google SecOps, completa los siguientes pasos previos:
Otorga los roles de Identity and Access Management necesarios a tu cuenta de servicio.
Elige y configura uno de los siguientes métodos de autenticación:
Opción 1: Workload Identity (recomendada): Este método usa tokens de corta duración con la identidad temporal como cuenta de servicio.
Opción 2: Clave JSON de cuenta de servicio: Este método se basa en un archivo de claves secretas estático y de larga duración.
Crea una cuenta de servicio
En la consola de Google Cloud , ve a IAM y administración > Cuentas de servicio.
Haz clic en addCrear cuenta de servicio.
Proporciona un nombre y una descripción, y haz clic en Listo. Toma nota de la dirección de correo electrónico de la cuenta de servicio.
Asigna roles de IAM
Si otorgas permisos, la integración podrá ver y extraer mensajes de tus suscripciones. Para asignar el rol estándar, completa los siguientes pasos:
En la consola de Google Cloud , ve a IAM.
Ubica tu cuenta de servicio y haz clic en Editar principal (edit).
Haz clic en Agregar otro rol y selecciona Visualizador de Pub/Sub (
roles/pubsub.viewer).Haz clic en Guardar.
Configura credenciales de Workload Identity
Workload Identity es el enfoque recomendado porque usa tokens de acceso de corta duración a través de la identidad temporal como cuenta de servicio.
Identifica la identidad única de la instancia
Para establecer una conexión, debes otorgar permiso a tu instancia de Google SecOps para suplantar tu cuenta de servicio.
En Google SecOps, ve a Content Hub > Integraciones de respuesta.
Selecciona la integración de Pub/Sub y, luego, ingresa el correo electrónico de tu cuenta de servicio en Correo electrónico de Workload Identity.
Haz clic en Guardar > Prueba. Se espera que la prueba falle.
Haz clic en close_small junto al botón Probar y busca el correo electrónico de identidad que comienza con
gke-init-python@...osoar-python@....Copia esta dirección de correo electrónico única.
Autoriza la identidad de la instancia en Google Cloud
En la consola de Google Cloud , ve a IAM y administración > Cuentas de servicio.
Selecciona la cuenta de servicio de destino y ve a Permisos > Otorgar acceso.
Pega la dirección de correo electrónico única en Principales nuevas y asigna el rol de Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator).
Otorga acceso al proyecto de cuota
La autenticación con una Workload Identity requiere un Quota Project ID para hacer un seguimiento del uso y la facturación de la API.
En la consola de Google Cloud , ve a IAM para el proyecto que se usa como proyecto de cuota.
Busca tu cuenta de servicio y haz clic en Editar principal (edit).
Haz clic en Agregar otro rol y selecciona Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer).Haz clic en Guardar.
Configura una clave JSON
Los archivos de claves secretas estáticas y de larga duración requieren rotación manual. Solo usa este método si la autenticación de Workload Identity no está disponible.
En la consola de Google Cloud , ve a IAM y administración > Cuentas de servicio y selecciona tu cuenta de servicio.
Ve a la pestaña Claves y haz clic en Agregar clave > Crear clave nueva.
Selecciona JSON y haz clic en Crear. El navegador descargará el archivo JSON en tu computadora.
Parámetros de integración
La integración de Pub/Sub requiere los siguientes parámetros:
| Parámetro | Descripción |
|---|---|
Workload Identity Email |
Es opcional. Es la dirección de correo electrónico del cliente de tu cuenta de servicio. Solo configura este parámetro si te autenticas con una identidad para cargas de trabajo. Si se configura, también debes proporcionar un |
Service Account JSON File Content |
Es opcional. Es el contenido completo del archivo JSON de la clave de la cuenta de servicio. Configura este parámetro para la autenticación con clave de cuenta de servicio. |
Quota Project ID |
Es opcional. Es el ID del proyecto que se usa para la facturación y el uso de la API. Este parámetro es obligatorio cuando se usa la autenticación de Workload Identity. Si no se proporciona ningún valor, la integración recupera el ID de las credenciales de la cuenta de servicio. |
Project ID |
Es opcional. Es el ID del proyecto al que se segmenta en Pub/Sub. Si no se proporciona ningún valor, la integración recupera el ID de las credenciales de la cuenta de servicio. |
Verify SSL |
Obligatorio. Valida el certificado SSL para la conexión al servidor. Habilitada de forma predeterminada. |
Si quieres obtener instrucciones para configurar una integración en Google SecOps, consulta Configura integraciones.
Si es necesario, puedes hacer cambios más adelante. Después de configurar una instancia de integración, puedes usarla en los playbooks. Para obtener más información sobre cómo configurar y admitir varias instancias, consulta Compatibilidad con varias instancias.
Acciones
Para obtener más información sobre las acciones, consulta Cómo responder a las acciones pendientes desde Tu escritorio y Cómo realizar una acción manual.
Ping
Usa la acción Ping para probar la conectividad a Pub/Sub.
Esta acción no se ejecuta en las entidades de Google SecOps.
Entradas de acción
Ninguno
Resultados de la acción
La acción Ping proporciona los siguientes resultados:
| Tipo de salida de la acción | Disponibilidad |
|---|---|
| Adjunto del muro de casos | No disponible |
| Vínculo al muro de casos | No disponible |
| Tabla del muro de casos | No disponible |
| Tabla de enriquecimiento | No disponible |
| Resultado de JSON | No disponible |
| Mensajes de salida | Disponible |
| Resultado de secuencia de comandos | Disponible |
Mensajes de salida
La acción Ping puede devolver los siguientes mensajes de salida:
| Mensaje de salida | Descripción del mensaje |
|---|---|
Successfully connected to the Pub/Sub server with the
provided connection parameters! |
La acción se realizó correctamente. |
Failed to connect to the Pub/Sub server! Error is
ERROR_REASON |
No se pudo realizar la acción. Verifica la conexión al servidor, los parámetros de entrada o las credenciales. |
Resultado de secuencia de comandos
En la siguiente tabla, se indica el valor del resultado de la secuencia de comandos cuando se usa la acción Ping:
| Nombre del resultado de la secuencia de comandos | Valor |
|---|---|
is_success |
True o False |
Conectores
Si quieres obtener instrucciones detalladas para configurar un conector en Google SecOps, consulta Ingiere tus datos (conectores).
Pub/Sub: conector de mensajes
En la plataforma de Google SecOps, el conector de Pub/Sub – Messages se llama conector de PubSub – Messages.
Usa el conector de Pub/Sub – Messages para recuperar mensajes de Pub/Sub.
Asignación de gravedad de JSON
Para asignar la gravedad de la alerta, debes especificar qué campo usa el conector de mensajes de Pub/Sub para obtener el valor de gravedad en el parámetro Severity Mapping JSON. La respuesta del conector puede contener tipos de valores, como integer, float y string.
El conector de Pub/Sub – Messages lee los valores de integer y float y los asigna según la configuración de Google SecOps. En la siguiente tabla, se muestra la asignación de los valores de integer a la gravedad en Google SecOps:
| Valor del número entero | Gravedad asignada |
|---|---|
100 |
Critical |
Desde 80 hasta 100 |
High |
Desde 60 hasta 80 |
Medium |
Desde 40 hasta 60 |
Low |
Menos de 40 |
Informational |
Si la respuesta contiene el valor string, el conector de Pub/Sub – Messages requiere configuración adicional.
Inicialmente, el valor predeterminado aparece de la siguiente manera:
{
"Default": 60
}
Si los valores necesarios para la asignación se encuentran en la clave JSON event_severity, los valores pueden ser los siguientes:
"Malicious""Benign""Unknown"
Para analizar los valores de clave JSON de event_severity y garantizar que el objeto JSON tenga el formato correcto, configura el parámetro Severity Mapping JSON de la siguiente manera:
{
"event_severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Se requiere el valor de "Default".
En el caso de que haya varias coincidencias para el mismo objeto JSON, el conector de mensajes de Pub/Sub prioriza la primera clave del objeto JSON.
Para trabajar con campos que contienen valores integer o float, configura la clave y una cadena vacía en el parámetro Severity Mapping JSON:
{
"Default":"60",
"integer_field": "",
"float_field": ""
}
Entradas del conector
El conector de Pub/Sub – Messages requiere los siguientes parámetros:
| Parámetro | Descripción |
|---|---|
Product Field Name |
Obligatorio Es el nombre del campo en el que se almacena el nombre del producto. El valor predeterminado es |
Event Field Name |
Obligatorio Nombre del campo que se usa para determinar el nombre del evento (subtipo). El valor predeterminado es |
Environment Field Name |
Optional
Nombre del campo en el que se almacena el nombre del entorno. Si no se encuentra el campo del entorno, se establece el entorno predeterminado. El valor predeterminado es |
Environment Regex Pattern |
Optional
Es un patrón de expresión regular que se ejecutará en el valor que se encuentra en el campo Usa el valor predeterminado Si el patrón de expresión regular es nulo o está vacío, o si el valor del entorno es nulo, el resultado final del entorno es el entorno predeterminado. |
PythonProcessTimeout |
Obligatorio Es el límite de tiempo de espera en segundos para el proceso de Python que ejecuta la secuencia de comandos actual. El valor predeterminado es |
Service Account JSON File Content |
Optional Es el contenido del archivo JSON de la clave de la cuenta de servicio. Puedes configurar este parámetro o el parámetro Para configurar este parámetro, proporciona el contenido completo del archivo JSON de la clave de la cuenta de servicio que descargaste cuando creaste una cuenta de servicio. Para el conector de Pub/Sub – Messages, la autenticación con el archivo JSON de la clave de la cuenta de servicio tiene prioridad sobre la federación de identidades para cargas de trabajo. |
Workload Identity Email |
Optional Es la dirección de correo electrónico del cliente de tu cuenta de servicio. Puedes configurar este parámetro o el parámetro Para actuar como cuentas de servicio con la federación de identidades para cargas de trabajo, otorga el rol |
Project ID |
Optional Es el ID del proyecto que se usará en el conector. |
Quota Project ID |
Optional El ID del proyecto Google Cloud que usas para las APIs Google Cloud y la facturación. Este parámetro requiere que otorgues el rol La integración adjunta este valor del parámetro a todas las solicitudes de la API. |
Subscription ID |
Obligatorio Es el ID de la suscripción a Pub/Sub. |
Case Name Template |
Optional Es el nombre de un caso personalizado. Cuando configuras este parámetro, el conector agrega una clave nueva llamada Puedes proporcionar marcadores de posición en el siguiente formato:
Ejemplo: En el caso de los marcadores de posición, el conector usa el primer evento de Google SecOps. El conector solo controla las claves que contienen el valor de cadena. Para configurar este parámetro, especifica campos de eventos sin prefijos. |
Alert Name Template |
Obligatorio Nombre de alerta personalizado Puedes proporcionar marcadores de posición en el siguiente formato:
Ejemplo: En el caso de los marcadores de posición, el conector usa el primer evento de Google SecOps. El conector solo controla las claves que contienen el valor de cadena. Si no proporcionas ningún valor o usas una plantilla no válida, el conector usará un valor de resguardo con el siguiente formato: |
Rule Generator Template |
Obligatorio Un generador de reglas personalizadas. Puedes proporcionar marcadores de posición en el siguiente formato:
Ejemplo: En el caso de los marcadores de posición, el conector usa el primer evento de Google SecOps. El conector solo controla las claves que contienen el valor de cadena. Si no proporcionas ningún valor o usas una plantilla no válida, el conector usará un valor de resguardo con el siguiente formato: |
Timestamp Field |
Obligatorio Es el nombre del campo para definir la marca de tiempo de la alerta de Google SecOps. Si la marca de tiempo no usa el formato de hora de época de Unix, define el formato de marca de tiempo en el parámetro El valor predeterminado es |
Timestamp Format |
Optional Es el formato de la marca de tiempo del mensaje. El conector requiere la marca de tiempo para procesar el mensaje correctamente. Si la marca de tiempo no usa el formato de hora de época de Unix y no configuras un formato de marca de tiempo, el conector fallará. El valor predeterminado es |
Severity Mapping JSON |
Obligatorio Es el objeto JSON que define cómo el conector extrae el nivel de gravedad del mensaje. El valor predeterminado es el siguiente: { "Default": "60" } Para obtener más información sobre la asignación de gravedad, consulta Asignación de gravedad de JSON. |
Unique ID Field |
Optional Nombre del campo para confirmar que el mensaje es único. Puedes usar la palabra clave reservada |
Max Messages To Fetch |
Obligatorio Es la cantidad máxima de mensajes que se procesarán en cada iteración del conector. El valor predeterminado es |
Disable Overflow |
Optional Si se selecciona, el conector ignora el mecanismo de desbordamiento de Google SecOps durante la creación de alertas. Esta opción se selecciona de forma predeterminada. |
Verify SSL |
Obligatorio Si se selecciona, la integración verifica que el certificado SSL para conectarse a Pub/Sub sea válido. Esta opción se selecciona de forma predeterminada. |
Proxy Server Address |
Optional Es la dirección del servidor proxy que se usará. |
Proxy Username |
Optional Nombre de usuario del proxy con el que se realizará la autenticación. |
Proxy Password |
Optional Es la contraseña del proxy con la que se realizará la autenticación. |
Reglas del conector
El conector de Pub/Sub – Messages admite proxies.
Eventos del conector
En el siguiente ejemplo, se muestra el resultado JSON de un evento de Google SecOps que genera el conector de Pub/Sub – Messages:
{
"notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
"finding": {
"name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
"parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
"resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
"state": "ACTIVE",
"category": "OPEN_NETBIOS_PORT",
"externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
"sourceProperties": {
"Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
"ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
"Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
"ScannerName": "FIREWALL_SCANNER",
"ResourcePath": [
"projects/PROJECT_ID/",
"folders/FOLDER_ID/",
"folders/FOLDER_ID/",
"organizations/ORGANIZATION_ID/"
],
"ExposedService": "NetBIOS",
"OpenPorts": {
"TCP": [
137.0,
138.0,
139.0
],
"UDP": [
137.0,
138.0,
139.0
]
},
"compliance_standards": {
"iso": [
{
"ids": [
"A.13.1.1"
]
}
],
"pci": [
{
"ids": [
"1.2.1"
]
}
],
"nist": [
{
"ids": [
"SC-7"
]
}
]
},
"ReactivationCount": 4.0
},
"securityMarks": {
"name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
"marks": {
"peter": "e2e1"
}
},
"eventTime": "2024-08-30T14:44:37.973090Z",
"createTime": "2024-06-24T07:08:54.777Z",
"propertyDataTypes": {
"ResourcePath": {
"listValues": {
"propertyDataTypes": [
{
"primitiveDataType": "STRING"
}
]
}
},
"ReactivationCount": {
"primitiveDataType": "NUMBER"
},
"Explanation": {
"primitiveDataType": "STRING"
},
"ExposedService": {
"primitiveDataType": "STRING"
},
"ScannerName": {
"primitiveDataType": "STRING"
}
}
}
}
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.