Recopilar registros de Snipe-IT
En este documento se explica cómo ingerir registros de Snipe-IT en Google Security Operations mediante Amazon S3.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps.
- Acceso privilegiado al arrendatario de Snipe-IT.
- Acceso privilegiado a AWS (S3, Gestión de Identidades y Accesos [IAM], Lambda y EventBridge).
Recopilar los requisitos previos de Snipe-IT (token de API y URL base)
- Inicia sesión en Snipe-IT.
- Abre el menú de usuario (avatar situado en la parte superior derecha) y haz clic en Gestionar claves de API.
- Haga clic en Crear clave de API:
- Nombre o etiqueta: introduce una etiqueta descriptiva (por ejemplo,
Google SecOps export
). - Haz clic en Generar.
- Nombre o etiqueta: introduce una etiqueta descriptiva (por ejemplo,
- Copia el token de la API (solo se mostrará una vez). Almacénala de forma segura.
- Determina la URL base de la API, que suele ser la siguiente:
https://<your-domain>/api/v1
- Ejemplo:
https://snipeit.example.com/api/v1
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
snipe-it-logs
). - Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros en Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para futuras consultas.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- En la sección Políticas de permisos, haz clic en Añadir permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar la política y el rol de gestión de identidades y accesos para las subidas de S3
- En la consola de AWS, ve a IAM > Políticas.
- Haz clic en Crear política > pestaña JSON.
- Copia y pega la siguiente política.
JSON de la política (sustituye
snipe-it-logs
si has introducido otro nombre de contenedor):{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::snipe-it-logs/*" }, { "Sid": "AllowGetStateObject", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::snipe-it-logs/snipeit/state.json" } ] }
Haz clic en Siguiente > Crear política.
Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.
Adjunte la política que acaba de crear.
Dale el nombre
SnipeITToS3Role
al rol y haz clic en Crear rol.
Crear la función Lambda
- En la consola de AWS, ve a Lambda > Funciones > Crear función.
- Haz clic en Crear desde cero.
Proporciona los siguientes detalles de configuración:
Ajuste Valor Nombre snipeit_assets_to_s3
Tiempo de ejecución Python 3.13 Arquitectura x86_64 Rol de ejecución SnipeITToS3Role
Una vez creada la función, abra la pestaña Código, elimine el stub y pegue el siguiente código (
snipeit_assets_to_s3.py
).#!/usr/bin/env python3 # Lambda: Pull Snipe-IT hardware (assets) via REST API and write raw JSON pages to S3 (no transform) import os, json, time, urllib.parse from urllib.request import Request, urlopen import boto3 BASE = os.environ["SNIPE_BASE_URL"].rstrip("/") # e.g. https://snipeit.example.com/api/v1 TOKEN = os.environ["SNIPE_API_TOKEN"] BUCKET = os.environ["S3_BUCKET"] PREFIX = os.environ.get("S3_PREFIX", "snipeit/assets/") PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "500")) # Snipe-IT max 500 per request MAX_PAGES = int(os.environ.get("MAX_PAGES", "200")) s3 = boto3.client("s3") def _headers(): return {"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"} def fetch_page(offset: int) -> dict: params = {"limit": PAGE_SIZE, "offset": offset, "sort": "id", "order": "asc"} qs = urllib.parse.urlencode(params) url = f"{BASE}/hardware?{qs}" req = Request(url, method="GET", headers=_headers()) with urlopen(req, timeout=60) as r: return json.loads(r.read().decode("utf-8")) def write_page(payload: dict, ts: float, page: int) -> str: key = f"{PREFIX}/{time.strftime('%Y/%m/%d', time.gmtime(ts))}/snipeit-hardware-{page:05d}.json" body = json.dumps(payload, separators=(",", ":")).encode("utf-8") s3.put_object(Bucket=BUCKET, Key=key, Body=body, ContentType="application/json") return key def lambda_handler(event=None, context=None): ts = time.time() offset = 0 page = 0 total = 0 while page < MAX_PAGES: data = fetch_page(offset) rows = data.get("rows") or data.get("data") or [] write_page(data, ts, page) total += len(rows) if len(rows) < PAGE_SIZE: break page += 1 offset += PAGE_SIZE return {"ok": True, "pages": page + 1, "objects": total} if __name__ == "__main__": print(lambda_handler())
Vaya a Configuración > Variables de entorno.
Haz clic en Editar > Añadir nueva variable de entorno.
Introduce las variables de entorno que se indican en la siguiente tabla y sustituye los valores de ejemplo por los tuyos.
Variables de entorno
Clave Valor de ejemplo S3_BUCKET
snipe-it-logs
S3_PREFIX
snipeit/assets/
SNIPE_BASE_URL
https://snipeit.example.com/api/v1
SNIPE_API_TOKEN
<your-api-token>
PAGE_SIZE
500
MAX_PAGES
200
Una vez creada la función, permanece en su página (o abre Lambda > Funciones > tu-función).
Seleccione la pestaña Configuración.
En el panel Configuración general, haz clic en Editar.
Cambia Tiempo de espera a 5 minutos (300 segundos) y haz clic en Guardar.
Crear una programación de EventBridge
- Ve a Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Programador > Crear programación).
- Proporcione los siguientes detalles de configuración:
- Programación periódica: Precio (
1 hour
). - Destino: tu función Lambda
snipeit_assets_to_s3
. - Nombre:
snipeit_assets_to_s3-1h
.
- Programación periódica: Precio (
- Haz clic en Crear programación.
(Opcional) Crear un usuario y claves de IAM de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios.
- Haz clic en Add users (Añadir usuarios).
- Proporcione los siguientes detalles de configuración:
- Usuario: introduce
secops-reader
. - Tipo de acceso: selecciona Clave de acceso> Acceso programático.
- Usuario: introduce
- Haz clic en Crear usuario.
- Asigna una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Añadir permisos > Asignar políticas directamente > Crear política.
JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::snipe-it-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::snipe-it-logs" } ] }
Nombre =
secops-reader-policy
.Haz clic en Crear política > busca o selecciona > Siguiente > Añadir permisos.
Crea una clave de acceso para
secops-reader
: Credenciales de seguridad > Claves de acceso.Haz clic en Crear clave de acceso.
Descarga la
.CSV
. (Estos valores se pegarán en el feed).
Configurar un feed en Google SecOps para ingerir registros de Snipe-IT
- 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,
Snipe-IT logs
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione Snipe-IT como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- URI de S3:
s3://snipe-it-logs/snipeit/assets/
- Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- 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: 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: la etiqueta aplicada a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.