Recopila registros de Cloud Run
En esta guía, se explica cómo exportar registros de Cloud Run a Google Security Operations con Cloud Storage. El analizador extrae campos de los registros JSON y los transforma en el modelo de datos unificado (UDM). Controla varios formatos de registro, incluidos los datos de solicitudes HTTP y los registros de auditoría del sistema, asignando campos relevantes a la UDM y, al mismo tiempo, enriqueciendo los datos con etiquetas y metadatos específicos de Cloud Run.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de que Cloud Run esté configurado y activo en tu Google Cloud entorno.
- Asegúrate de tener acceso con privilegios a Google Cloud.
Crea un bucket de Google Cloud Storage.
- Accede a la consola de Google Cloud.
Ve a la página Buckets de Cloud Storage.
Haz clic en Crear.
En la página Crear un bucket, ingresa la información de tu bucket. Después de cada uno de los siguientes pasos, haz clic en Continuar para avanzar al siguiente:
En la sección Primeros pasos, haz lo siguiente:
- Ingresa un nombre único que cumpla con los requisitos de nombres de bucket, por ejemplo, cloudrun-logs.
Para habilitar el espacio de nombres jerárquico, haz clic en la flecha de expansión para expandir la sección Optimizar las cargas de trabajo orientadas a archivos y con uso intensivo de datos y, luego, selecciona Habilitar el espacio de nombres jerárquico en este bucket.
Para agregar una etiqueta de bucket, haz clic en la flecha de expansión para expandir la sección Etiquetas.
Haz clic en Agregar etiqueta y especifica una clave y un valor para tu etiqueta.
En la sección Eligir dónde almacenar tus datos, haz lo siguiente:
- Selecciona un tipo de ubicación
Usa el menú de tipo de ubicación para seleccionar una Ubicación en la que se almacenarán de forma permanente los datos de objetos de tu bucket.
Para configurar la replicación entre buckets, expande la sección Configurar la replicación entre buckets.
En la sección Elige una clase de almacenamiento para tus datos, selecciona una clase de almacenamiento predeterminada para el bucket o selecciona Autoclass para la administración automática de clases de almacenamiento de los datos de tu bucket.
En la sección Elige cómo controlar el acceso a los objetos, selecciona no para aplicar la prevención del acceso público y elige un modelo de control de acceso para los objetos de tu bucket.
En la sección Elige cómo proteger los datos de objetos, haz lo siguiente:
- Selecciona cualquiera de las opciones de Protección de datos que desees configurar para tu bucket.
- Para elegir cómo se encriptarán los datos de tus objetos, haz clic en la flecha desplegable etiquetada como Encriptación de datos y selecciona un método de encriptación de datos.
Haz clic en Crear.
Configura la exportación de registros en Cloud Run
- En la página Google Cloud Welcome, haz clic en el ícono de Cloud Run.
- Busca Registro en la barra de búsqueda de la parte superior y haz clic en Intro.
- En el Explorador de registros, filtra los registros eligiendo Cloud Run en Nombre del registro y haz clic en Aplicar.
- Haz clic en Más acciones > Crear un receptor en el menú.
- Proporciona la siguiente configuración:
- Detalles del receptor: Ingresa un nombre y una descripción.
- Haz clic en Siguiente.
- Destino del receptor: Selecciona Bucket de Cloud Storage.
- Bucket de Cloud Storage: Selecciona el bucket que creaste antes o crea uno nuevo.
- Haz clic en Siguiente.
- Elige los registros que deseas incluir en el receptor: Se propaga un registro predeterminado cuando seleccionas una opción en el bucket de Cloud Storage.
- Haz clic en Siguiente.
- Opcional: Elige registros para filtrar fuera del receptor: Selecciona los registros que no deseas enviar al receptor.
- Haz clic en Crear receptor.
Configura un feed en Google SecOps para transferir registros de Cloud Run
- 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, Registros de Cloud Run.
- Selecciona Google Cloud Storage como el Tipo de fuente.
- Selecciona GCP Cloud Run como el Tipo de registro.
- Haz clic en Obtener cuenta de servicio como la cuenta de servicio de Chronicle.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- URI del bucket de almacenamiento: Google Cloud URL del bucket de almacenamiento en formato
gs://my-bucket/<value>
. - URI Is A: Selecciona Directorio que incluye subdirectorios.
Opciones de eliminación de fuentes: Selecciona la opción de eliminación según tus preferencias.
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.
- URI del bucket de almacenamiento: Google Cloud URL del bucket de almacenamiento en formato
Haz clic en Siguiente.
Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
httpRequest.latency |
target.resource.attribute.labels.[] |
El valor de httpRequest.latency del registro sin procesar se usa como el valor de una etiqueta con la clave http_request_latency dentro de target.resource.attribute.labels . |
httpRequest.protocol |
network.application_protocol |
Si httpRequest.protocol contiene HTTP , el campo UDM se establece en HTTP . |
httpRequest.remoteIp |
principal.asset.ip |
Se usa el valor de httpRequest.remoteIp del registro sin procesar. |
httpRequest.remoteIp |
principal.ip |
Se usa el valor de httpRequest.remoteIp del registro sin procesar. |
httpRequest.requestMethod |
network.http.method |
Se usa el valor de httpRequest.requestMethod del registro sin procesar. |
httpRequest.requestSize |
network.sent_bytes |
El valor de httpRequest.requestSize del registro sin procesar se convierte en un número entero sin firma y se usa. |
httpRequest.requestUrl |
target.url |
Se usa el valor de httpRequest.requestUrl del registro sin procesar. |
httpRequest.responseSize |
network.received_bytes |
El valor de httpRequest.responseSize del registro sin procesar se convierte en un número entero sin firma y se usa. |
httpRequest.serverIp |
target.asset.ip |
Se usa el valor de httpRequest.serverIp del registro sin procesar. |
httpRequest.serverIp |
target.ip |
Se usa el valor de httpRequest.serverIp del registro sin procesar. |
httpRequest.status |
network.http.response_code |
El valor de httpRequest.status del registro sin procesar se convierte en un número entero y se usa. |
httpRequest.userAgent |
network.http.parsed_user_agent |
El valor de httpRequest.userAgent del registro sin procesar se analiza como una cadena de usuario-agente. |
httpRequest.userAgent |
network.http.user_agent |
Se usa el valor de httpRequest.userAgent del registro sin procesar. |
insertId |
metadata.product_log_id |
Se usa el valor de insertId del registro sin procesar. |
labels.instanceId |
additional.fields.[] |
El valor de labels.instanceId se usa como el valor de una etiqueta con la clave instanceId dentro de additional.fields . |
labels.run.googleapis.com_execution_name |
additional.fields.[] |
El valor de labels.run.googleapis.com_execution_name se usa como el valor de una etiqueta con la clave execution_name dentro de additional.fields . |
labels.run.googleapis.com_task_attempt |
additional.fields.[] |
El valor de labels.run.googleapis.com_task_attempt se usa como el valor de una etiqueta con la clave task_attempt dentro de additional.fields . |
labels.run.googleapis.com_task_index |
additional.fields.[] |
El valor de labels.run.googleapis.com_task_index se usa como el valor de una etiqueta con la clave task_index dentro de additional.fields . |
logName |
metadata.product_event_type |
Se usa el valor de logName del registro sin procesar. |
resource.labels.configuration_name |
target.resource.attribute.labels.[] |
El valor de resource.labels.configuration_name se usa como el valor de una etiqueta con la clave configuration_name dentro de target.resource.attribute.labels . |
resource.labels.job_name |
additional.fields.[] |
El valor de resource.labels.job_name se usa como el valor de una etiqueta con la clave job_name dentro de additional.fields . |
resource.labels.location |
target.location.name |
Se usa el valor de resource.labels.location del registro sin procesar. |
resource.labels.project_id |
target.resource.attribute.labels.[] |
El valor de resource.labels.project_id se usa como el valor de una etiqueta con la clave project_id dentro de target.resource.attribute.labels . |
resource.labels.revision_name |
target.resource.attribute.labels.[] |
El valor de resource.labels.revision_name se usa como el valor de una etiqueta con la clave revision_name dentro de target.resource.attribute.labels . |
resource.labels.service_name |
target.resource.attribute.labels.[] |
El valor de resource.labels.service_name se usa como el valor de una etiqueta con la clave service_name dentro de target.resource.attribute.labels . |
resource.type |
target.resource.resource_subtype |
Se usa el valor de resource.type del registro sin procesar. |
severity |
security_result.severity |
Si el valor de severity coincide con Info (sin distinción entre mayúsculas y minúsculas), el campo de la UDM se establece en INFORMATIONAL . |
textPayload |
additional.fields.[] |
El valor de textPayload se usa como el valor de una etiqueta con la clave Textpayload dentro de additional.fields . |
timestamp |
metadata.event_timestamp |
El valor de timestamp del registro sin procesar se analiza como una marca de tiempo. |
timestamp |
timestamp |
El valor de timestamp del registro sin procesar se analiza como una marca de tiempo. Se determina según la lógica del analizador en función de la presencia de ciertos campos. La configuración predeterminada es GENERIC_EVENT . Si has_principal_ip , has_target_ip y httpRequest.protocol coinciden con HTTP , se establece en NETWORK_HTTP . Se codifica en GCP_RUN . Se codifica en GCP_RUN . Se codifica en Google Cloud Platform . Se codifica en GOOGLE_CLOUD_PLATFORM . |
Cambios
2024-01-22
Mejora:
- Se agregó la asignación para los registros en los que logName es
projects/1234/logs/run.googleapis.com%2Fstderr
,projects/1234/logs/run.googleapis.com%2Fstdout
,projects/1234/logs/run.googleapis.com%2Frequests
yprojects/1234/logs/run.googleapis.com%2Fvarlog%2Fsystem
. - Se asignó
httpRequest.latency
atarget.resource.attribute.labels
. - Se asignó
resource.labels.configuration_name
atarget.resource.attribute.labels
. - Se asignó
resource.labels.revision_name
atarget.resource.attribute.labels
. - Se asignó
resource.labels.service_name
atarget.resource.attribute.labels
. - Se asignó
httpRequest.protocol
anetwork.application_protocol
. - Se asignó
httpRequest.requestMethod
anetwork.http.method
. - Se asignó
httpRequest.requestSize
anetwork.sent_bytes
. - Se asignó
httpRequest.requestUrl
atarget.url
. - Se asignó
httpRequest.responseSize
anetwork.received_bytes
. - Se asignó
httpRequest.remoteIp
aprincipal.ip
yprincipal.asset.ip
. - Se asignó
httpRequest.serverIp
a target.ipand
target.asset.ip`. - Se asignó
httpRequest.status
anetwork.http.response_code
. - Se asignó
httpRequest.userAgent
anetwork.http.user_agent
. - Se asignó
logName
ametadata.product_event_type
. - Se asignó
textPayload
aadditional.fields
. - Se asignó
labels.run.googleapis.com_execution_name
aadditional.fields
. - Se asignó
labels.run.googleapis.com_task_attempt
aadditional.fields
. - Se asignó
labels.run.googleapis.com_task_index
aadditional.fields
. - Se asignó
labels.instanceId
aadditional.fields
. - Se asignó
resource.labels.job_name
aadditional.fields
.
2023-04-13
Mejora:
- Establece
target.resource.attribute.cloud.environment
enGOOGLE_CLOUD_PLATFORM
. - Establece
target.resource.name
en el valor del nombre completo del recurso.
2022-07-13
- Analizador creado recientemente.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.