Recoger registros de acceso al servidor de AWS S3
En este documento se explica cómo recoger registros de acceso al servidor de AWS S3 configurando un feed de Google Security Operations. El analizador extrae campos mediante patrones grok, gestiona la posible entrada JSON y asigna los campos extraídos a UDM. Realiza transformaciones de datos, conversiones de tipos y lógica condicional en función de la presencia y los valores de campos específicos para asegurar una representación precisa de UDM.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a AWS
Cómo configurar el registro de acceso al servidor de AWS S3
Google SecOps admite la recogida de registros mediante Amazon S3 a través de Amazon SQS.
- Inicia sesión en la consola AWS Management.
- Accede a la consola de Amazon S3.
- Ve a Amazon S3 > Buckets (Segmentos).
- Selecciona un contenedor que ya tengas o crea uno.
- Haz clic en Propiedades.
- En la sección Registro de acceso al servidor, haz clic en Editar.
- Selecciona Habilitar.
- En el campo Contenedor de destino, introduzca el nombre del nuevo contenedor al que se enviarán los objetos de registro o seleccione un contenedor que ya exista como destino.
- Haz clic en Guardar cambios.
- Para crear la cola de SQS del segmento de S3, configura una instancia de Amazon SQS con el almacenamiento de S3. Para obtener más información, consulta Configurar un segmento para las notificaciones (tema de SNS o cola de SQS).
En función del servicio y la región, identifique los endpoints de conectividad consultando la siguiente documentación de AWS:
- Para obtener información sobre cualquier fuente de registro, consulta Endpoints y cuotas de AWS Identity and Access Management.
- Para obtener información sobre las fuentes de registro de S3, consulta Endpoints and quotas of Amazon Simple Storage Service (Endpoints y cuotas de Amazon Simple Storage Service).
- Para obtener información sobre las fuentes de registro de SQS, consulta Endpoints y cuotas de Amazon Simple Queue Service.
Configurar feeds
Hay dos puntos de entrada diferentes para configurar feeds en la plataforma Google SecOps:
- Configuración de SIEM > Feeds > Añadir nuevo feed
- Centro de contenido > Paquetes de contenido > Empezar
Cómo configurar el feed de acceso al servicio AWS S3
- Haz clic en el paquete Amazon Cloud Platform.
- Busca el tipo de registro Acceso al servicio AWS S3.
- Google SecOps admite la recogida de registros mediante un ID de clave de acceso y un método secreto. Para crear el ID de clave de acceso y el secreto, consulta Configurar la autenticación de la herramienta con AWS.
Especifique los valores en los campos siguientes.
- Tipo de fuente: Amazon SQS V2
- Nombre de la cola: el nombre de la cola de SQS de la que se va a leer.
- URI de S3: el URI del segmento.
s3://your-log-bucket-name/
- Sustituye
your-log-bucket-name
por el nombre real de tu segmento de S3.
- Sustituye
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras según tus preferencias de ingesta.
Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es 180 días.
ID de clave de acceso a la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 20 caracteres.
Clave de acceso secreta de la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 40 caracteres.
Opciones avanzadas
- Nombre del feed: un valor rellenado automáticamente que identifica el feed.
- Espacio de nombres del recurso: espacio de nombres asociado al feed.
- Etiquetas de ingestión: etiquetas aplicadas a todos los eventos de este feed.
Haga clic en Crear feed.
Para obtener más información sobre cómo configurar varios feeds para diferentes tipos de registros en esta familia de productos, consulta el artículo Configurar feeds por producto.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
aclRequired |
target.resource.attribute.labels.key : "aclRequired"target.resource.attribute.labels.value : valor de aclRequired |
Se asigna directamente desde el campo de registro sin procesar aclRequired . |
authenticationtype |
extensions.auth.auth_details |
Se asigna directamente desde el campo de registro sin procesar authenticationtype . |
bucket |
target.resource.name |
Se asigna directamente desde el campo de registro sin procesar bucket . |
bucket |
target.resource.resource_type : "STORAGE_BUCKET" |
El analizador asigna el valor "STORAGE_BUCKET" al campo resource_type si el campo bucket está presente. |
bucketowner |
target.resource.product_object_id |
Se asigna directamente desde el campo de registro sin procesar bucketowner . |
bytes_sent |
network.sent_bytes |
Se asigna directamente desde el campo de registro sin procesar bytes_sent después de convertirlo en un entero sin signo y sustituir "-" por "0". |
ciphersuite |
network.application_protocol : "HTTPS" |
El analizador asigna el valor "HTTPS" a application_protocol si el campo ciphersuite está presente. |
ciphersuite |
network.tls.cipher |
Se asigna directamente desde el campo de registro sin procesar ciphersuite . |
errorcode |
security_result.action_details |
Se asigna directamente desde el campo de registro sin procesar errorcode . |
errorcode |
security_result.action : "BLOCK" |
El analizador asigna el valor "BLOCK" a action si el campo errorcode contiene "AccessDenied" (no se distingue entre mayúsculas y minúsculas). |
hostheader |
target.hostname |
Se ha extraído del campo de registro sin procesar hostheader , lo que puede haber provocado que se elimine el número de puerto. |
hostheader |
target.port |
Se extrae del campo de registro sin procesar hostheader si hay un número de puerto. |
hostid |
target.resource.attribute.labels.key : "ID de solicitud ampliado de S3"target.resource.attribute.labels.value : valor de hostid |
Se asigna directamente desde el campo de registro sin procesar hostid . |
http_capture |
network.http.method |
El método HTTP se extrae del campo http_capture . |
http_capture |
network.http.version |
La versión HTTP se extrae del campo http_capture . |
http_capture |
target.url |
La URL de destino se crea con hostheader y http_request_uri (extraídos de http_capture ) y se le añade el prefijo "http://" o "https://" en función de si está presente ciphersuite . |
httpstatus |
network.http.response_code |
Se asigna directamente desde el campo de registro sin procesar httpstatus después de convertirlo en un número entero. |
object_version_id |
target.resource.product_object_id |
Se asigna directamente desde el campo de registro sin procesar object_version_id . |
objectsize |
target.file.size |
Se asigna directamente desde el campo de registro sin procesar objectsize después de convertirlo en un entero sin signo y sustituir "-" por "0". |
operation |
metadata.product_event_type |
Se asigna directamente desde el campo de registro sin procesar operation . |
referrer |
network.http.referral_url |
Se asigna directamente desde el campo de registro sin procesar referrer después de quitar las comillas. |
remoteip |
metadata.event_type : "USER_RESOURCE_ACCESS" |
El analizador asigna el valor "USER_RESOURCE_ACCESS" al campo event_type si el campo remoteip está vacío. |
remoteip |
principal.ip |
Se asigna directamente desde el campo de registro sin procesar remoteip . |
requester |
target.resource.attribute.labels.key : "ARN del punto de acceso"target.resource.attribute.labels.value : valor de requester |
Se asigna directamente desde el campo de registro sin procesar requester . |
requester_user |
principal.user.userid |
Se asigna directamente desde el campo de registro sin procesar requester_user . |
requestid |
network.session_id |
Se asigna directamente desde el campo de registro sin procesar requestid . |
request_time_ms |
network.session_duration.nanos |
Se asigna directamente desde el campo de registro sin procesar request_time_ms después de convertirlo en un número entero, sustituir "-" por "0" y rellenarlo con ceros para representar nanosegundos. |
signatureversion |
target.resource.attribute.labels.key : "Versión de la firma"target.resource.attribute.labels.value : valor de signatureversion |
Se asigna directamente desde el campo de registro sin procesar signatureversion . |
time |
metadata.event_timestamp |
Se ha analizado a partir del campo de registro sin procesar time y se ha convertido en una marca de tiempo. |
tlsVersion |
network.tls.version |
Se asigna directamente desde el campo de registro sin procesar tlsVersion . |
useragent |
network.http.user_agent |
Se asigna directamente desde el campo de registro sin procesar useragent después de quitar las comillas. |
(Lógica del analizador) | metadata.event_type : "NETWORK_HTTP" |
El analizador asigna el valor predeterminado "NETWORK_HTTP" a event_type . |
(Lógica del analizador) | metadata.log_type : "AWS_S3_SERVER_ACCESS" |
El analizador asigna el valor "AWS_S3_SERVER_ACCESS" a log_type . |
(Lógica del analizador) | metadata.product_name : "Acceso al servidor de AWS S3" |
El analizador asigna el valor "AWS S3 Server Access" a product_name . |
(Lógica del analizador) | metadata.product_version : "HTTP/http_version " |
El analizador define product_version mediante el http_version extraído. |
(Lógica del analizador) | metadata.vendor_name : "AMAZON" |
El analizador asigna el valor "AMAZON" a vendor_name . |
(Lógica del analizador) | network.application_protocol : "HTTP" |
El analizador asigna el valor "HTTP" a application_protocol si el campo ciphersuite no está presente. |
(Lógica del analizador) | timestamp |
El analizador asigna al evento timestamp la hora actual cuando se procesa el evento. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.