Collecter les journaux Snipe-IT
Ce document explique comment ingérer des journaux Snipe-IT dans Google Security Operations à l'aide d'Amazon S3.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps.
- Accès privilégié au locataire Snipe-IT.
- Accès privilégié à AWS (S3, Identity and Access Management (IAM), Lambda, EventBridge).
Collecter les conditions préalables de Snipe-IT (jeton d'API et URL de base)
- Connectez-vous à Snipe-IT.
- Ouvrez votre menu utilisateur (avatar en haut à droite), puis cliquez sur Gérer les clés API.
- Cliquez sur Créer une clé API :
- Nom/Libellé : saisissez un libellé descriptif (par exemple,
Google SecOps export
). - Cliquez sur Générer.
- Nom/Libellé : saisissez un libellé descriptif (par exemple,
- Copiez le jeton d'API (il ne s'affichera qu'une seule fois). Stockez-le de manière sécurisée.
- Déterminez votre URL de base de l'API, qui est généralement la suivante :
https://<your-domain>/api/v1
- Exemple :
https://snipeit.example.com/api/v1
Configurer un bucket AWS S3 et IAM pour Google SecOps
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le Nom et la Région du bucket pour référence ultérieure (par exemple,
snipe-it-logs
). - Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : Ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez la règle AmazonS3FullAccess.
- Sélectionnez la règle.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer la stratégie et le rôle IAM pour les importations S3
- Dans la console AWS, accédez à IAM > Stratégies.
- Cliquez sur Créer une règle > onglet JSON.
- Copiez et collez le règlement suivant.
JSON de la règle (remplacez
snipe-it-logs
si vous avez saisi un autre nom de bucket) :{ "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" } ] }
Cliquez sur Suivant > Créer une règle.
Accédez à IAM > Rôles > Créer un rôle > Service AWS > Lambda.
Associez la règle que vous venez de créer.
Nommez le rôle
SnipeITToS3Role
, puis cliquez sur Créer un rôle.
Créer la fonction Lambda
- Dans la console AWS, accédez à Lambda > Fonctions > Créer une fonction.
- Cliquez sur Créer à partir de zéro.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Nom snipeit_assets_to_s3
Durée d'exécution Python 3.13 Architecture x86_64 Rôle d'exécution SnipeITToS3Role
Une fois la fonction créée, ouvrez l'onglet Code, supprimez le stub et collez le code suivant (
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())
Accédez à Configuration > Variables d'environnement.
Cliquez sur Modifier > Ajouter une variable d'environnement.
Saisissez les variables d'environnement fournies dans le tableau suivant en remplaçant les valeurs d'exemple par les vôtres.
Variables d'environnement
Clé Exemple de valeur 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
Une fois la fonction créée, restez sur sa page (ou ouvrez Lambda > Fonctions > votre-fonction).
Accédez à l'onglet Configuration.
Dans le panneau Configuration générale, cliquez sur Modifier.
Définissez le délai avant expiration sur 5 minutes (300 secondes), puis cliquez sur Enregistrer.
Créer une programmation EventBridge
- Accédez à Amazon EventBridge> Scheduler> Create schedule.
- Fournissez les informations de configuration suivantes :
- Planning récurrent : Tarif (
1 hour
). - Cible : votre fonction Lambda
snipeit_assets_to_s3
. - Nom :
snipeit_assets_to_s3-1h
.
- Planning récurrent : Tarif (
- Cliquez sur Créer la programmation.
(Facultatif) Créez un utilisateur et des clés IAM en lecture seule pour Google SecOps
- Accédez à Console AWS > IAM > Utilisateurs.
- Cliquez sur Add users (Ajouter des utilisateurs).
- Fournissez les informations de configuration suivantes :
- Utilisateur : saisissez
secops-reader
. - Type d'accès : sélectionnez Clé d'accès – Accès programmatique.
- Utilisateur : saisissez
- Cliquez sur Créer un utilisateur.
- Associez une stratégie de lecture minimale (personnalisée) : Utilisateurs > secops-reader > Autorisations > Ajouter des autorisations > Associer des stratégies directement > Créer une stratégie.
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" } ] }
Nom =
secops-reader-policy
.Cliquez sur Créer une règle> recherchez/sélectionnez > Suivant> Ajouter des autorisations.
Créez une clé d'accès pour
secops-reader
: Identifiants de sécurité > Clés d'accès.Cliquez sur Créer une clé d'accès.
Téléchargez le fichier
.CSV
. (Vous collerez ces valeurs dans le flux.)
Configurer un flux dans Google SecOps pour ingérer les journaux Snipe-IT
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur + Ajouter un flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Snipe-IT logs
). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez Snipe-IT comme Type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 :
s3://snipe-it-logs/snipeit/assets/
- Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
- ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
- Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
- Espace de noms de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé appliqué aux événements de ce flux.
- URI S3 :
- Cliquez sur Suivant.
- Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.