Recoger registros de AWS CloudWatch
En este documento se explica cómo ingerir registros de AWS CloudWatch en Google Security Operations mediante Amazon S3 o Amazon Kinesis Data Firehose. AWS CloudWatch es un servicio de monitorización y observabilidad que recoge datos operativos en forma de registros, métricas y eventos. Esta integración le permite enviar estos registros a Google SecOps para analizarlos y monitorizarlos.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a AWS
Configurar la exportación de registros de CloudWatch mediante AWS S3
Este proceso de exportación debe realizarse periódicamente para que los registros de CloudWatch más recientes se ingieran en S3.
Crear un segmento de Amazon S3
Te recomendamos que uses un contenedor creado específicamente para los registros de CloudWatch.
- Abre la consola de Amazon S3.
- Si es necesario, puede cambiar la región.
- En la barra de navegación, seleccione la región en la que se encuentran sus registros de CloudWatch.
- Haz clic en Crear segmento.
- Nombre del contenedor: introduce un nombre descriptivo para el contenedor.
- Región: selecciona la región en la que se encuentran tus datos de CloudWatch Logs.
- Haz clic en Crear.
Crear un usuario de IAM con acceso completo a Amazon S3 y CloudWatch Logs
- Abre la consola de IAM.
- Haz clic en Usuarios > Crear usuario.
- Escribe un nombre en el campo Nombre de usuario (por ejemplo,
CWExport
). - Selecciona Acceso programático y Acceso a la consola de administración de AWS.
- Selecciona Contraseña generada automáticamente o Contraseña personalizada.
- Haz clic en Siguiente: Permisos.
- Elige Adjuntar políticas directamente.
- Busca y selecciona las políticas AmazonS3FullAccess y CloudWatchLogsFullAccess para el usuario.
- Haz clic en Siguiente: Etiquetas.
- Haz clic en Siguiente: Revisar.
- Haz clic en Crear usuario.
Configurar permisos en un segmento de Amazon S3
- En la consola de Amazon S3, elija el segmento que ha creado anteriormente.
- Haz clic en Permisos > Política de contenedor.
En el Bucket Policy Editor (Editor de políticas de cubeta), añade la siguiente política.
{ "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" } } ] }
Cambia y actualiza las siguientes variables de
json
:- Cambia
cw-exported-logs
por el nombre de tu segmento de S3. - Cambia
random-string
por una cadena de caracteres generada aleatoriamente. - Asegúrate de especificar el endpoint de región correcto para Principal.
- Cambia
Haz clic en Guardar.
Configurar la exportación de CloudWatch
- Inicia sesión como el usuario de gestión de identidades y accesos que has creado anteriormente.
- Abre la consola de CloudWatch.
- En el menú de navegación, selecciona Grupos de registros.
- Selecciona el nombre de un grupo de registros que ya tengas o crea uno.
- Elige Acciones > Exportar datos a Amazon S3.
- En la pantalla Exportar datos a Amazon S3, busca Definir exportación de datos.
Indica el periodo de los datos que quieres exportar en los campos Desde y Hasta.
Elegir contenedor de S3: selecciona la cuenta asociada al contenedor de Amazon S3.
Nombre del segmento de S3: selecciona un segmento de Amazon S3.
Prefijo del segmento de S3: introduce la cadena generada aleatoriamente que has especificado en la política del segmento.
Elige Exportar para exportar los datos de registro a Amazon S3.
Para ver el estado de los datos de registro que ha exportado a Amazon S3, seleccione Acciones > Ver todas las exportaciones a Amazon S3.
Configurar un feed en Google SecOps para ingerir registros de AWS CloudWatch
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
AWS CloudWatch Logs
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione AWS CloudWatch como Tipo de registro.
- Haz clic en Siguiente.
Especifique los valores de los siguientes parámetros de entrada:
- URI de S3: el URI del segmento.
s3://your-log-bucket-name/
- Sustituye
your-log-bucket-name
por el nombre real del segmento.
- Sustituye
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
Antigüedad máxima de los archivos: 180 días de forma predeterminada.
ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
Clave de acceso secreta: clave secreta del usuario con acceso al bucket de S3.
Espacio de nombres de recursos: el espacio de nombres de recursos.
Etiquetas de ingestión: etiqueta que se aplicará a los eventos de este feed.
Haz clic en Siguiente.
Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Configurar la exportación de registros de CloudWatch mediante AWS Data Firehose
No es necesario realizar este proceso de exportación con regularidad después de la configuración inicial.
Configurar un feed en Google SecOps para ingerir registros de AWS CloudWatch
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Añadir nuevo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
AWS CloudWatch Logs
). - Seleccione Amazon Data Firehose como Tipo de fuente.
- Seleccione AWS CloudWatch como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- Delimitador de división:
\n
(opcional). - Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: etiqueta que se aplicará a los eventos de este feed.
- Delimitador de división:
- Haz clic en Siguiente.
- Revisa la configuración del feed y haz clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- Copia y guarda la clave secreta, ya que no podrás volver a ver este valor.
- Ve a la pestaña Detalles.
- Copia la URL del endpoint del feed del campo Endpoint Information (Información del endpoint).
- Haz clic en Listo.
Crear una clave de API para el feed de Amazon Data Firehose
- Ve a la consola de Google Cloud y, a continuación, a la página Credenciales.
- Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.
- Restringe el acceso de la clave de API a la API Google SecOps.
Especificar la URL del endpoint
Para especificar el endpoint HTTPS y la clave de acceso en Amazon Data Firehose, sigue estos pasos:
Añade la clave de API a la URL del endpoint del feed y especifica esta URL como la URL del endpoint HTTP con el siguiente formato:
ENDPOINT_URL?key=API_KEY
Haz los cambios siguientes:
ENDPOINT_URL
: URL del endpoint del feed.API_KEY
: la clave de API para autenticarte en Google SecOps.
En el campo de la clave de acceso, especifique la clave secreta que obtuvo al crear el feed de Amazon Data Firehose.
Configura Amazon Kinesis Data Firehose en Google SecOps {:#configure-kinesis-secops}.
- En la consola de AWS, ve a Kinesis > Data Firehose > Create delivery stream.
- Proporcione los siguientes detalles de configuración:
- Fuente: seleccione PUT directo u otras fuentes.
- Destino: elige Endpoint HTTP.
- URL del endpoint HTTP: introduce la URL del endpoint HTTPS de la feed de Google SecOps con la clave de API.
- Método HTTP: selecciona POST.
- En Clave de acceso, introduce los siguientes datos:
- Encabezado de clave secreta:
<HEADER_NAME_FOR_SECRET>
con el valor<YOUR_SECRET_KEY>
- Sugerencias para el almacenamiento en búfer: define Tamaño del búfer = 1 MiB y Intervalo del búfer = 60 segundos.
- Compresión: selecciona Inhabilitada.
- Copia de seguridad de S3: selecciona Inhabilitada.
- Deja la configuración de reintentos y registros como predeterminada.
- Encabezado de clave secreta:
- Haga clic en Crear flujo de entrega.
Configurar permisos de gestión de identidades y accesos y suscribir el grupo de registros
- En la consola de AWS, vaya a IAM > Policies > Create policy > JSON.
Pega el siguiente JSON de la política y sustituye
<region>
y<account-id>
por tu región de AWS y tu ID de cuenta:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops" } ] }
- Ponle un nombre a la política
CWLtoFirehoseWrite
y haz clic en Crear política. - Ve a IAM > Roles > Crear rol.
- Selecciona Política de confianza personalizada y pega lo siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<your-region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- Ponle un nombre a la política
Asigna la política
CWLtoFirehoseWrite
al rol.Dale el nombre
CWLtoFirehoseRole
al rol y haz clic en Crear rol.Ve a CloudWatch > Registros > Grupos de registros.
Selecciona el grupo de registros de destino.
Abre la pestaña Filtros de suscripción y haz clic en Crear.
Elige Create Amazon Kinesis Data Firehose subscription filter (Crear filtro de suscripción de Amazon Kinesis Data Firehose).
Proporciona los siguientes detalles de configuración:
- Destino: selecciona el flujo de entrega
cwlogs-to-secops
. - Conceder permiso: elige el rol
CWLtoFirehoseRole
. - Nombre del filtro: escribe
all-events
. - Deje Patrón de filtro en blanco para enviar todos los eventos.
- Destino: selecciona el flujo de entrega
Haz clic en Iniciar emisión.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
account |
principal.user.userid |
El valor de account del registro sin procesar se asigna al campo principal.user.userid . |
account_id |
principal.user.userid |
El valor de account_id del registro sin procesar se asigna al campo principal.user.userid . |
AlertId |
metadata.product_log_id |
El valor de AlertId del registro sin procesar se asigna al campo metadata.product_log_id . |
arrivalTimestamp |
metadata.event_timestamp |
El valor de arrivalTimestamp del registro sin procesar se convierte en una marca de tiempo y se asigna al campo metadata.event_timestamp . |
attemptsMade |
additional.fields |
El valor de attemptsMade del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "Attempts Made". |
awsAccountId |
principal.asset_id |
El valor de awsAccountId del registro sin procesar se añade al principio con "ID de cuenta de AWS: " y se asigna al campo principal.asset_id . |
billed_duration |
additional.fields |
El valor de billed_duration del registro sin procesar se añade como par clave-valor a additional.fields con la clave "billed_duration". |
BytesIn |
network.received_bytes |
El valor de BytesIn del registro sin procesar se convierte en un número entero sin signo y se asigna al campo network.received_bytes . |
cipher |
network.tls.cipher |
El valor de cipher del registro sin procesar se asigna al campo network.tls.cipher . |
Ciphers |
network.tls.client.supported_ciphers |
El valor de Ciphers del registro sin procesar se divide por comas y cada valor se añade a la matriz network.tls.client.supported_ciphers . |
cloudwatchLog |
security_result.description |
El valor de cloudwatchLog del registro sin procesar se asigna al campo security_result.description . |
CloudAccountId |
metadata.product_deployment_id |
El valor de CloudAccountId del registro sin procesar se asigna al campo metadata.product_deployment_id . |
CloudType |
target.resource.attribute.cloud.environment |
El valor de CloudType del registro sin procesar determina el valor de target.resource.attribute.cloud.environment . Si CloudType es "gcp", el valor es "GOOGLE_CLOUD_PLATFORM". Si CloudType es "aws", el valor es "AMAZON_WEB_SERVICES". Si CloudType es "azure", el valor es "MICROSOFT_AZURE". |
Context.Execution.Id |
target.resource.attribute.labels |
El valor de Context.Execution.Id del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "Context Id". |
Context.Execution.Name |
target.resource.attribute.labels |
El valor de Context.Execution.Name del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "Context Name". |
Context.Execution.RoleArn |
target.resource.product_object_id |
El valor de Context.Execution.RoleArn del registro sin procesar se asigna al campo target.resource.product_object_id . |
descr |
metadata.description |
El valor de descr del registro sin procesar, después de eliminar los espacios en blanco adicionales, se asigna al campo metadata.description , a menos que sea "-". Si descr está vacío, se usa el valor de log . |
destination.name |
target.location.country_or_region |
El valor de destination.name del registro sin procesar se asigna al campo target.location.country_or_region . |
destination.properties.prefix |
target.resource.attribute.labels |
El valor de destination.properties.prefix del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "Prefijo de propiedades de destino". |
detail.additionalEventData.configRuleArn |
security_result.rule_id |
El valor de detail.additionalEventData.configRuleArn del registro sin procesar se asigna al campo security_result.rule_id . |
detail.additionalEventData.configRuleName |
security_result.rule_name |
El valor de detail.additionalEventData.configRuleName del registro sin procesar se asigna al campo security_result.rule_name . |
detail.additionalEventData.managedRuleIdentifier |
additional.fields |
El valor de detail.additionalEventData.managedRuleIdentifier del registro sin procesar se añade como par clave-valor al additional.fields con la clave "managedRuleIdentifier". |
detail.additionalEventData.notificationJobType |
additional.fields |
El valor de detail.additionalEventData.notificationJobType del registro sin procesar se añade como par clave-valor a additional.fields con la clave "notificationJobType". |
detail.awsAccountId |
principal.asset_id |
El valor de detail.awsAccountId del registro sin procesar se añade al principio con "ID de cuenta de AWS: " y se asigna al campo principal.asset_id . |
detail.awsRegion |
principal.location.name |
El valor de detail.awsRegion del registro sin procesar se asigna al campo principal.location.name . |
detail.configRuleArn |
security_result.rule_id |
El valor de detail.configRuleArn del registro sin procesar se asigna al campo security_result.rule_id . |
detail.configRuleName |
security_result.rule_name |
El valor de detail.configRuleName del registro sin procesar se asigna al campo security_result.rule_name . |
detail.configurationItem.awsAccountId |
principal.user.userid |
El valor de detail.configurationItem.awsAccountId del registro sin procesar se asigna al campo principal.user.userid . |
detail.configurationItem.awsRegion |
target.location.country_or_region |
El valor de detail.configurationItem.awsRegion del registro sin procesar se asigna al campo target.location.country_or_region . |
detail.configurationItem.configuration.complianceType |
security_result.summary |
El valor de detail.configurationItem.configuration.complianceType del registro sin procesar se asigna al campo security_result.summary . |
detail.configurationItem.configuration.targetResourceId |
target.resource.attribute.labels |
El valor de detail.configurationItem.configuration.targetResourceId del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "configurationItem configuration targetResourceId". |
detail.configurationItem.configuration.targetResourceType |
target.resource.attribute.labels |
El valor de detail.configurationItem.configuration.targetResourceType del registro sin procesar se añade como un par clave-valor a target.resource.attribute.labels con la clave "configurationItem configuration targetResourceType". |
detail.configurationItem.configurationItemCaptureTime |
_target.asset.attribute.creation_time |
El valor de detail.configurationItem.configurationItemCaptureTime del registro sin procesar se convierte en una marca de tiempo y se asigna al campo _target.asset.attribute.creation_time . |
detail.configurationItem.configurationItemStatus |
target.resource.attribute.labels |
El valor de detail.configurationItem.configurationItemStatus del registro sin procesar se añade como un par clave-valor a target.resource.attribute.labels con la clave "configurationItem configurationItemStatus". |
detail.configurationItem.configurationStateId |
target.resource.attribute.labels |
El valor de detail.configurationItem.configurationStateId del registro sin procesar se convierte en una cadena y se añade como par clave-valor a target.resource.attribute.labels con la clave "configurationItem configurationStateId". |
detail.configurationItem.resourceId |
target.resource.id |
El valor de detail.configurationItem.resourceId del registro sin procesar se asigna al campo target.resource.id . |
detail.configurationItem.resourceType |
target.resource.resource_subtype |
El valor de detail.configurationItem.resourceType del registro sin procesar se asigna al campo target.resource.resource_subtype . |
detail.configurationItemDiff.changedProperties.Configuration.configRuleList.1.updatedValue.configRuleArn |
security_result.rule_id |
El valor de detail.configurationItemDiff.changedProperties.Configuration.configRuleList.1.updatedValue.configRuleArn del registro sin procesar se asigna al campo security_result.rule_id . |
detail.eventCategory |
security_result.category_details |
El valor de detail.eventCategory del registro sin procesar se asigna al campo security_result.category_details . |
detail.eventID |
metadata.product_log_id |
El valor de detail.eventID del registro sin procesar se asigna al campo metadata.product_log_id . |
detail.eventName |
additional.fields |
El valor de detail.eventName del registro sin procesar se añade como un par clave-valor a additional.fields con la clave "Event Name". |
detail.eventSource |
target.application |
El valor de detail.eventSource del registro sin procesar se asigna al campo target.application . |
detail.eventType |
additional.fields |
El valor de detail.eventType del registro sin procesar se añade como un par clave-valor a additional.fields con la clave "Event Type". |
detail.eventVersion |
metadata.product_version |
El valor de detail.eventVersion del registro sin procesar se asigna al campo metadata.product_version . |
detail.managementEvent |
additional.fields |
El valor de detail.managementEvent del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "detail managementEvent". |
detail.messageType |
target.resource.attribute.labels |
El valor de detail.messageType del registro sin procesar se añade como par clave-valor al target.resource.attribute.labels con la clave "Message Type". |
detail.newEvaluationResult.complianceType |
security_result.summary |
El valor de detail.newEvaluationResult.complianceType del registro sin procesar se asigna al campo security_result.summary . |
detail.newEvaluationResult.configRuleInvokedTime |
additional.fields |
El valor de detail.newEvaluationResult.configRuleInvokedTime del registro sin procesar se añade como un par clave-valor a additional.fields con la clave "newEvaluationResult_configRuleInvokedTime". |
detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleName |
additional.fields |
El valor de detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleName del registro sin procesar se añade como par clave-valor a additional.fields con la clave "newEvaluationResult_configRuleName". |
detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceId |
additional.fields |
El valor de detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceId del registro sin procesar se añade como par clave-valor a additional.fields con la clave "newEvaluationResult_resourceId". |
detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceType |
additional.fields |
El valor de detail.newEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceType del registro sin procesar se añade como par clave-valor a additional.fields con la clave "newEvaluationResult_resourceType". |
detail.newEvaluationResult.resultRecordedTime |
additional.fields |
El valor de detail.newEvaluationResult.resultRecordedTime del registro sin procesar se añade como par clave-valor a additional.fields con la clave "newEvaluationResult_resultRecordedTime". |
detail.oldEvaluationResult.configRuleInvokedTime |
additional.fields |
El valor de detail.oldEvaluationResult.configRuleInvokedTime del registro sin procesar se añade como par clave-valor a additional.fields con la clave "oldEvaluationResult_configRuleInvokedTime". |
detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleName |
additional.fields |
El valor de detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.configRuleName del registro sin procesar se añade como par clave-valor a additional.fields con la clave "oldEvaluationResult_configRuleName". |
detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceId |
additional.fields |
El valor de detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceId del registro sin procesar se añade como par clave-valor a additional.fields con la clave "oldEvaluationResult_resourceId". |
detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceType |
additional.fields |
El valor de detail.oldEvaluationResult.evaluationResultIdentifier.evaluationResultQualifier.resourceType del registro sin procesar se añade como par clave-valor a additional.fields con la clave "oldEvaluationResult_resourceType". |
detail.oldEvaluationResult.resultRecordedTime |
additional.fields |
El valor de detail.oldEvaluationResult.resultRecordedTime del registro sin procesar se añade como par clave-valor a additional.fields con la clave "oldEvaluationResult_resultRecordedTime". |
detail.readOnly |
additional.fields |
El valor de detail.readOnly del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "detail readOnly". |
detail.recipientAccountId |
target.resource.attribute.labels |
El valor de detail.recipientAccountId del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "Recipient Account Id". |
detail.recordVersion |
metadata.product_version |
El valor de detail.recordVersion del registro sin procesar se asigna al campo metadata.product_version . |
detail.requestID |
target.resource.attribute.labels |
El valor de detail.requestID del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "Detail Request ID". |
detail.resourceType |
target.resource.resource_subtype |
El valor de detail.resourceType del registro sin procesar se asigna al campo target.resource.resource_subtype . |
detail.s3Bucket |
about.resource.name |
El valor de detail.s3Bucket del registro sin procesar se asigna al campo about.resource.name . |
detail.s3ObjectKey |
target.resource.attribute.labels |
El valor de detail.s3ObjectKey del registro sin procesar se añade como par clave-valor a target.resource.attribute.labels con la clave "s3ObjectKey". |
detail.userAgent |
network.http.user_agent |
El valor de detail.userAgent del registro sin procesar se asigna al campo network.http.user_agent . |
detail.userIdentity.accessKeyId |
target.user.userid |
El valor de detail.userIdentity.accessKeyId del registro sin procesar se asigna al campo target.user.userid . |
detail.userIdentity.accountId |
metadata.product_deployment_id |
El valor de detail.userIdentity.accountId del registro sin procesar se asigna al campo metadata.product_deployment_id . |
detail.userIdentity.arn |
target.user.userid |
El valor de detail.userIdentity.arn del registro sin procesar se asigna al campo target.user.userid . |
detail.userIdentity.principalId |
principal.user.product_object_id |
El valor de detail.userIdentity.principalId del registro sin procesar se asigna al campo principal.user.product_object_id . |
detail.userIdentity.sessionContext.attributes.mfaAuthenticated |
principal.user.attribute.labels |
El valor de detail.userIdentity.sessionContext.attributes.mfaAuthenticated del registro sin procesar se añade como par clave-valor a principal.user.attribute.labels con la clave "mfaAuthenticated". |
detail.userIdentity.sessionContext.sessionIssuer.userName |
target.user.user_display_name |
El valor de detail.userIdentity.sessionContext.sessionIssuer.userName del registro sin procesar se asigna al campo target.user.user_display_name . |
detail.userIdentity.type |
principal.resource.type |
El valor de detail.userIdentity.type del registro sin procesar se asigna al campo principal.resource.type . |
detail-type |
metadata.product_event_type |
El valor de detail-type del registro sin procesar se asigna al campo metadata.product_event_type . |
device |
principal.asset.product_object_id |
El valor de device del registro sin procesar se asigna al campo principal.asset.product_object_id . |
digestPublicKeyFingerprint |
target.file.sha1 |
El valor de digestPublicKeyFingerprint del registro sin procesar se asigna al campo target.file.sha1 . |
digestS3Bucket |
principal.resource.name |
El valor de digestS3Bucket del registro sin procesar se asigna al campo principal.resource.name . |
digestS3Object |
principal.asset.asset_id |
El valor de digestS3Object del registro sin procesar se añade al principio con "S3 Object: " y se asigna al campo principal.asset.asset_id . |
digestSignatureAlgorithm |
network.tls.cipher |
El valor de digestSignatureAlgorithm del registro sin procesar se asigna al campo network.tls.cipher . |
digestStartTime |
metadata.event_timestamp |
El valor de digestStartTime del registro sin procesar se convierte en una marca de tiempo y se asigna al campo metadata.event_timestamp . |
dimensions.VolumeId |
additional.fields |
El valor de dimensions.VolumeId del registro sin procesar se añade como par clave-valor a additional.fields con la clave "VolumeId". |
duration |
additional.fields |
El valor de duration del registro sin procesar se añade como par clave-valor a additional.fields con la clave "duration". |
errorCode |
security_result.rule_name |
El valor de errorCode del registro sin procesar se asigna al campo security_result.rule_name . |
errorMessage |
security_result.summary |
El valor de errorMessage del registro sin procesar se asigna al campo security_result.summary . |
executionId |
principal.process.pid |
El valor de executionId del registro sin procesar se asigna al campo principal.process.pid . |
host |
principal.hostname , principal.ip |
El valor de host del registro sin procesar, con los guiones sustituidos por puntos, se analiza como una dirección IP y se asigna al campo principal.ip si se realiza correctamente. De lo contrario, se asigna al campo principal.hostname . |
http_verb |
network.http.method |
El valor de http_verb del registro sin procesar se convierte a mayúsculas y se asigna al campo network.http.method . |
kubernetes.container_hash |
additional.fields |
El valor de kubernetes.container_hash del registro sin procesar se añade como par clave-valor a additional.fields con la clave "container_hash". |
kubernetes.container_image |
additional.fields |
El valor de kubernetes.container_image del registro sin procesar se añade como par clave-valor a additional.fields con la clave "container_image". |
kubernetes.container_name |
additional.fields |
El valor de kubernetes.container_name del registro sin procesar se añade como par clave-valor a additional.fields con la clave "container_name". |
kubernetes.docker_id |
principal.asset_id |
El valor de kubernetes.docker_id del registro sin procesar se añade al principio con "id: " y se asigna al campo principal.asset_id . |
kubernetes.host |
principal.hostname , principal.ip |
El valor de kubernetes.host del registro sin procesar, con los guiones sustituidos por puntos, se analiza como una dirección IP y se asigna al campo principal.ip si se realiza correctamente. De lo contrario, se asigna al campo principal.hostname . |
kubernetes.namespace |
principal.namespace |
El valor de kubernetes.namespace del registro sin procesar se asigna al campo principal.namespace . |
kubernetes.namespace_name |
principal.namespace |
El valor de kubernetes.namespace_name del registro sin procesar se asigna al campo principal.namespace . |
kubernetes.pod_id |
principal.asset.asset_id |
El valor de kubernetes.pod_id del registro sin procesar se añade al principio con "pod_id: " y se asigna al campo principal.asset.asset_id . |
kubernetes.pod_name |
additional.fields |
El valor de kubernetes.pod_name del registro sin procesar se añade como par clave-valor a additional.fields con la clave "nombre de pod". |
lambdaArn |
principal.hostname |
El valor de lambdaArn del registro sin procesar se asigna al campo principal.hostname . |
level |
security_result.severity |
El valor de level del registro sin procesar determina el valor de security_result.severity . Si level es "Info", el valor es "INFORMATIONAL". Si level es "Error", el valor es "ERROR". Si level es "Warning", el valor es "MEDIUM". |
log |
metadata.description |
El valor de log del registro sin procesar se asigna al campo metadata.description si descr está vacío. |
logFiles |
about |
Por cada elemento de la matriz logFiles del registro sin procesar, se crea un objeto about con file.full_path definido como s3Object , asset.hostname definido como s3Bucket y file.sha256 definido como hashValue . |
log_processed.cause |
security_result.summary |
El valor de log_processed.cause del registro sin procesar se asigna al campo security_result.summary . |
log_processed.ids |
intermediary.hostname |
Por cada elemento de la matriz log_processed.ids del registro sin procesar, se crea un objeto intermediary con hostname definido como el valor del elemento. |
log_processed.level |
security_result.severity |
El valor de log_processed.level del registro sin procesar se asigna al campo security_result.severity . |
log_processed.msg |
metadata.description |
El valor de log_processed.msg del registro sin procesar se asigna al campo metadata.description . |
log_processed.ts |
metadata.event_timestamp |
El valor de log_processed.ts del registro sin procesar se convierte en una marca de tiempo y se asigna al campo metadata.event_timestamp . |
log_type |
metadata.log_type |
El valor de log_type del registro sin procesar se asigna al campo metadata.log_type . Se trata de un campo personalizado que se ha añadido para proporcionar contexto. |
logevent.message |
security_result.description |
El valor de logevent.message del registro sin procesar se asigna al campo security_result.description . También se analiza con grok para extraer campos adicionales. |
logGroup |
security_result.about.resource.name |
El valor de logGroup del registro sin procesar se asigna al campo security_result.about.resource.name . |
logStream |
security_result.about.resource.attribute.labels |
El valor de logStream del registro sin procesar se añade como par clave-valor a security_result.about.resource.attribute.labels con la clave "logStream". |
memory_used |
additional.fields |
El valor de memory_used del registro sin procesar se añade como par clave-valor a additional.fields con la clave "memory_used". |
metric_name |
additional.fields |
El valor de metric_name del registro sin procesar se añade como par clave-valor a additional.fields con la clave "metric_name". |
metric_stream_name |
additional.fields |
El valor de metric_stream_name del registro sin procesar se añade como par clave-valor a additional.fields con la clave "metric_stream_name". |
namespace |
principal.namespace |
El valor de namespace del registro sin procesar se asigna al campo principal.namespace . |
owner |
principal.user.userid |
El valor de owner del registro sin procesar se asigna al campo principal.user.userid . |
parameters |
additional.fields |
El valor de parameters del registro sin procesar se añade como par clave-valor a additional.fields con la clave "Parameters". |
Path |
principal.process.file.full_path |
El valor de Path del registro sin procesar se asigna al campo principal.process.file.full_path . |
pid |
principal.process.pid |
El valor de pid del registro sin procesar se asigna al campo principal.process.pid . |
PolicyName |
security_result.rule_name |
El valor de PolicyName del registro sin procesar se asigna al campo security_result.rule_name . |
prin_host |
principal.hostname |
El valor de prin_host del registro sin procesar se asigna al campo principal.hostname . |
principal_hostname |
principal.hostname |
El valor de principal_hostname del registro sin procesar se asigna al campo principal.hostname . |
process |
principal.application |
El valor de process del registro sin procesar se asigna al campo principal.application . |
rawData |
additional.fields |
El valor de rawData del registro sin procesar se añade como par clave-valor a additional.fields con la clave "Datos sin procesar". |
Recommendation |
security_result.detection_fields |
El valor de Recommendation del registro sin procesar se añade como par clave-valor a security_result.detection_fields con la clave "Recommendation". |
referral_url |
network.http.referral_url |
El valor de referral_url del registro sin procesar se asigna al campo network.http.referral_url . |
region |
principal.location.name |
El valor de region del registro sin procesar se asigna al campo principal.location.name . |
resp_code |
network.http.response_code |
El valor de resp_code del registro sin procesar se convierte en un número entero y se asigna al campo network.http.response_code . |
resource_url |
network.http.referral_url |
El valor de resource_url del registro sin procesar se asigna al campo network.http.referral_url . |
ResourceType |
target.resource.resource_subtype |
El valor de ResourceType del registro sin procesar se asigna al campo target.resource.resource_subtype . |
response_body |
additional.fields |
El valor de response_body del registro sin procesar se añade como par clave-valor a additional.fields con la clave "Cuerpo de la respuesta". |
Role |
target.resource.product_object_id |
El valor de Role del registro sin procesar se asigna al campo target.resource.product_object_id . |
s3_bucket_path |
target.file.full_path |
El valor de s3_bucket_path del registro sin procesar se asigna al campo target.file.full_path . |
sec_result.category |
security_result.category |
El valor de sec_result.category se deriva de la lógica del analizador. Si descr contiene "authentication is required", el valor es "AUTH_VIOLATION". |
sec_result.description |
security_result.description |
El valor de sec_result.description se deriva de la lógica del analizador. Se le asigna el valor de cloudwatchLog si está presente. |
sec_result.severity |
security_result.severity |
El valor de sec_result.severity se deriva de la lógica del analizador. Se define en función del valor de severity o level . |
sec_result.summary |
security_result.summary |
El valor de sec_result.summary se deriva de la lógica del analizador. Se le asigna el valor de log_processed.cause o errorMessage , si está presente. |
security_result |
security_result |
El objeto security_result se crea a partir de varios campos y de la lógica del analizador. |
serverId |
additional.fields |
El valor de serverId del registro sin procesar se añade como par clave-valor a additional.fields con la clave "server_id". |
severity |
security_result.severity |
El valor de severity del registro sin procesar, convertido a mayúsculas y normalizado, se asigna al campo security_result.severity . |
Source |
principal.hostname |
El valor de Source del registro sin procesar se asigna al campo principal.hostname . |
source |
principal.hostname |
El valor de source del registro sin procesar se asigna al campo principal.hostname . |
SourceIP |
principal.ip |
El valor de SourceIP del registro sin procesar se asigna al campo principal.ip . |
src_port |
principal.port |
Si src_port es "80", se convierte en un número entero y se asigna al campo principal.port , y network.application_protocol se define como "HTTP". |
stream |
additional.fields |
El valor de stream del registro sin procesar se añade como par clave-valor a additional.fields con la clave "stream". |
subscriptionFilters |
security_result.about.resource.attribute.labels |
Por cada elemento de la matriz subscriptionFilters del registro sin procesar, se añade un par clave-valor a security_result.about.resource.attribute.labels con la clave "subscriptionFilter" y el valor de la matriz. |
support_contact |
target.resource.attribute.labels |
El valor de support_contact del registro sin procesar se añade como par clave-valor al target.resource.attribute.labels con la clave "Support Contact". |
t_ip |
target.ip |
El valor de t_ip del registro sin procesar, después de eliminar los guiones, se analiza como una dirección IP y se asigna al campo target.ip si se realiza correctamente. |
time |
metadata.event_timestamp |
El valor de time del registro sin procesar se convierte en una marca de tiempo y se asigna al campo metadata.event_timestamp . |
timestamp |
metadata.event_timestamp |
El valor de timestamp del registro sin procesar se convierte en una marca de tiempo con varios formatos y se asigna al campo metadata.event_timestamp . |
tls |
network.tls.version |
El valor de tls del registro sin procesar se asigna al campo network.tls.version . |
transferDetails.serverId |
additional.fields |
El valor de transferDetails.serverId del registro sin procesar se añade como par clave-valor a additional.fields con la clave "server_id". |
transferDetails.sessionId |
network.session_id |
El valor de transferDetails.sessionId del registro sin procesar se asigna al campo network.session_id . |
transferDetails.username |
principal.user.user_display_name |
El valor de transferDetails.username del registro sin procesar se asigna al campo principal.user.user_display_name . |
ts |
metadata.event_timestamp |
El valor de ts del registro sin procesar, combinado con la zona horaria si está disponible, se convierte en una marca de tiempo y se asigna al campo metadata.event_timestamp . |
type |
metadata.product_event_type |
El valor de type del registro sin procesar se asigna al campo metadata.product_event_type . |
unit |
additional.fields |
El valor de unit del registro sin procesar se añade como par clave-valor a additional.fields con la clave "unit". |
url |
target.url |
El valor de url del registro sin procesar se asigna al campo target.url . |
url_back_to_product |
metadata.url_back_to_product |
El valor de url_back_to_product del registro sin procesar se asigna al campo metadata.url_back_to_product . |
User |
principal.user.userid |
El valor de User del registro sin procesar se asigna al campo principal.user.userid . |
user |
target.user.userid , metadata.event_type , extensions.auth.mechanism |
Si user está presente, metadata.event_type se define como "USER_LOGIN", extensions.auth.mechanism se define como "NETWORK" y el valor de user se asigna a target.user.userid . |
value.count |
additional.fields |
El valor de value.count del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "count". |
value.max |
additional.fields |
El valor de value.max del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "max". |
value.min |
additional.fields |
El valor de value.min del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "min". |
value.sum |
additional.fields |
El valor de value.sum del registro sin procesar se convierte en una cadena y se añade como par clave-valor a additional.fields con la clave "sum". |
workflowId |
additional.fields |
El valor de workflowId del registro sin procesar se añade como par clave-valor a additional.fields con la clave "workflowId". |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.