Recolha registos do Snipe-IT
Este documento explica como carregar registos do Snipe-IT para o Google Security Operations através do Amazon S3.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma instância do Google SecOps.
- Acesso privilegiado ao inquilino do Snipe-IT.
- Acesso privilegiado à AWS (S3, Identity and Access Management [IAM], Lambda e EventBridge).
Recolha os pré-requisitos do Snipe-IT (token de API e URL base)
- Inicie sessão no Snipe-IT.
- Abra o menu do utilizador (avatar na parte superior direita) e clique em Gerir chaves da API.
- Clique em Criar nova chave da API:
- Nome/etiqueta: introduza uma etiqueta descritiva (por exemplo,
Google SecOps export
). - Clique em Gerar.
- Nome/etiqueta: introduza uma etiqueta descritiva (por exemplo,
- Copie o token de API (só é apresentado uma vez). Armazene-o em segurança.
- Determine o URL base da API, normalmente:
https://<your-domain>/api/v1
- Exemplo:
https://snipeit.example.com/api/v1
Configure o contentor do AWS S3 e o IAM para o Google SecOps
- Crie um contentor do Amazon S3 seguindo este guia do utilizador: Criar um contentor
- Guarde o nome e a região do contentor para referência futura (por exemplo,
snipe-it-logs
). - Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Configure a política e a função de IAM para carregamentos do S3
- Na consola da AWS, aceda a IAM > Políticas.
- Clique em Criar política > separador JSON.
- Copie e cole a seguinte política.
JSON da política (substitua
snipe-it-logs
se tiver introduzido um nome de contentor diferente):{ "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" } ] }
Clique em Seguinte > Criar política.
Aceda a IAM > Funções > Criar função > Serviço AWS > Lambda.
Anexe a política criada recentemente.
Dê o nome
SnipeITToS3Role
à função e clique em Criar função.
Crie a função Lambda
- Na consola da AWS, aceda a Lambda > Functions > Create function.
- Clique em Criar do zero.
Faculte os seguintes detalhes de configuração:
Definição Valor Nome snipeit_assets_to_s3
Runtime Python 3.13 Arquitetura x86_64 Função de execução SnipeITToS3Role
Depois de criar a função, abra o separador Código, elimine o fragmento e cole o seguinte 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())
Aceda a Configuração > Variáveis de ambiente.
Clique em Editar > Adicionar nova variável de ambiente.
Introduza as variáveis de ambiente fornecidas na tabela seguinte, substituindo os valores de exemplo pelos seus valores.
Variáveis de ambiente
Chave Valor de exemplo 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
Depois de criar a função, permaneça na respetiva página (ou abra Lambda > Functions > a sua função).
Selecione o separador Configuração.
No painel Configuração geral, clique em Editar.
Altere Tempo limite para 5 minutos (300 segundos) e clique em Guardar.
Crie um horário do EventBridge
- Aceda a Amazon EventBridge > Scheduler > Create schedule.
- Indique os seguintes detalhes de configuração:
- Agenda recorrente: Taxa (
1 hour
). - Destino: a sua função Lambda
snipeit_assets_to_s3
. - Nome:
snipeit_assets_to_s3-1h
.
- Agenda recorrente: Taxa (
- Clique em Criar programação.
(Opcional) Crie um utilizador e chaves da IAM só de leitura para o Google SecOps
- Aceda a AWS Console > IAM > Users.
- Clique em Adicionar utilizadores.
- Indique os seguintes detalhes de configuração:
- Utilizador: introduza
secops-reader
. - Tipo de acesso: selecione Chave de acesso â€" Acesso programático.
- Utilizador: introduza
- Clique em Criar utilizador.
- Anexe a política de leitura mínima (personalizada): Users > secops-reader > Permissions > Add permissions > Attach policies directly > Create policy.
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" } ] }
Nome =
secops-reader-policy
.Clique em Criar política > procure/selecione > Seguinte > Adicionar autorizações.
Crie uma chave de acesso para
secops-reader
: Credenciais de segurança > Chaves de acesso.Clique em Criar chave de acesso.
Transfira o
.CSV
. (Vai colar estes valores no feed).
Configure um feed no Google SecOps para carregar registos do Snipe-IT
- Aceda a Definições do SIEM > Feeds.
- Clique em + Adicionar novo feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo,
Snipe-IT logs
). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Snipe-IT como o Tipo de registo.
- Clicar em Seguinte.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://snipe-it-logs/snipeit/assets/
- Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
- ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
- Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
- URI do S3:
- Clicar em Seguinte.
- Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.