Integracja z SIEM
Przesyłaj dzienniki audytu, alerty monitorowania i alerty bezpieczeństwa z 1Security do Splunk, Microsoft Sentinel, QRadar, Elastic lub dowolnego systemu SIEM potrafiącego odpytywać API REST.
Ten przewodnik opisuje podłączenie 1Security do systemu SIEM od początku do końca: co przesyłać, jaka pętla odpytywania utrzymuje kompletność strumienia i jak połączyć to z popularnymi platformami. Sam kontrakt API - wszystkie punkty końcowe, parametry i pola - opisuje dokumentacja API.
Model jest pull-based. Twój SIEM odpytuje API zgodnie z harmonogramem i przechowuje znacznik czasu (watermark), dzięki czemu każde odpytanie pobiera tylko nowe dane. Nie jest wymagana żadna łączność przychodząca do Twojej sieci.
Zanim zaczniesz
Potrzebujesz klucza API z zakresami odpowiadającymi strumieniom, które chcesz
przesyłać. Utwórz go w panelu w Ustawienia → Klucze API (wyłącznie
administrator) i skopiuj sekret 1sec_live_… - jest wyświetlany tylko raz.
Zanim cokolwiek na nim zbudujesz, potwierdź, że działa:
curl -H "Authorization: Bearer $ONESEC_API_KEY" \
https://api.1security.ai/api/v1/pingOdpowiedź zwraca tenanta i zakresy przypisane do klucza. Jeśli brakuje zakresu,
którego oczekiwałeś, popraw to teraz, zamiast diagnozować błąd 403 z wnętrza
konektora.
1. Zdecyduj, co przesyłać
Trzy strumienie odpowiadają na różne pytania i mają bardzo różne wolumeny. Większość zespołów zaczyna od dwóch strumieni alertowych i dodaje dzienniki, gdy mapowanie pól jest już ustalone.
| Strumień | Wolumen | Przesyłaj, gdy |
|---|---|---|
/security-alerts | Niski | Zawsze. To wykrycia Defender / Sentinel, wzbogacone o użytkowników, grupy i aplikacje, których dotyczą. |
/monitoring-alerts | Niski | Zawsze. To wykrycia Twoich własnych reguł 1Security - nie ma ich nigdzie indziej. |
/logs | Wysoki - pełny strumień aktywności | Chcesz mieć w SIEM aktywność M365 wraz z kontekstem uprawnień, urządzenia i lokalizacji. |
Na dużym tenancie to /logs generuje koszt licencji SIEM. Filtruj po stronie
API, a nie po ingest: severity=high,critical albo konkretna lista action
utrzymuje wolumen proporcjonalny do tego, czego naprawdę używają Twoje
detekcje. Zakres zawsze można później poszerzyć.
2. Pętla odpytywania
Odpytuj zamknięte okno czasowe i przesuwaj znacznik dopiero wtedy, gdy całe okno zostanie pobrane.
To domknięcie okna decyduje o niezawodności. Zapytanie otwarte rośnie w trakcie stronicowania - nowe zdarzenia dopływają na początek porządku sortowania i przesuwają wiersze pomiędzy żądaniami. Okno domknięte z obu stron jest zbiorem stałym: nie może się zmienić w trakcie odczytu.
Okno po czasie przyjęcia zdarzenia
Dla /logs używaj discoveredFrom i discoveredTo, a nie from i to.
discoveredAt to moment przyjęcia zdarzenia przez 1Security, occurredAt to
moment, w którym zdarzenie wystąpiło w M365. Microsoft potrafi ujawniać
zdarzenia wiele godzin po fakcie, a tylko czas przyjęcia jest monotoniczny -
dlatego tylko on gwarantuje, że nie przeoczysz opóźnionego zdarzenia.
Dla strumieni alertowych from i to obejmują moment wygenerowania alertu.
Zostaw niewielkie opóźnienie
Kończ okno minutę lub dwie za bieżącym zegarem, a nie dokładnie na „teraz". Na granicy okna wciąż zatwierdzane są zapisy, a niewielkie opóźnienie zapobiega sytuacji, w której zdarzenie pojawia się tuż po tym, jak odczytałeś ten zakres.
Sortuj rosnąco i pobierz wszystkie strony
Dla /logs dodaj sort=discoveredAtAsc. Ten porządek rozstrzyga remisy po
identyfikatorze zdarzenia, więc każdy wiersz ma dokładnie jedną pozycję w
sekwencji stron. Podążaj za pagination.nextCursor, przekazując go jako
?cursor=, aż hasMore przyjmie wartość false.
Przesuwaj znacznik tylko po sukcesie
Przesuń znacznik na koniec okna, które właśnie pobrałeś, i wyłącznie po
tym, jak wszystkie strony zakończyły się powodzeniem. Jeśli którakolwiek
strona zawiedzie, zachowaj stary znacznik i powtórz całe okno - ponowny
odczyt jest tani, a deduplikacja po id pochłania nakładanie.
Kompletny skrypt odpytujący, na tyle krótki, by przeczytać go za jednym razem:
#!/usr/bin/env bash
set -euo pipefail
STATE_FILE=/var/lib/1security/watermark
LAG_SECONDS=120 # trzymaj się nieco za "teraz", by nic nie wpadło za krawędź
SINCE=$(cat "$STATE_FILE" 2>/dev/null || date -u -d '-1 hour' +%FT%TZ)
UNTIL=$(date -u -d "-${LAG_SECONDS} seconds" +%FT%TZ)
BASE="https://api.1security.ai/api/v1/logs"
QUERY="discoveredFrom=$SINCE&discoveredTo=$UNTIL&sort=discoveredAtAsc&limit=1000"
CURSOR=""
while :; do
URL="$BASE?$QUERY"
[ -n "$CURSOR" ] && URL="$URL&cursor=$CURSOR"
RESP=$(curl -sS --fail-with-body \
-H "Authorization: Bearer $ONESEC_API_KEY" "$URL")
echo "$RESP" | jq -c '.data[]' >> /var/log/1security-logs.ndjson
CURSOR=$(echo "$RESP" | jq -r '.pagination.nextCursor // empty')
[ -z "$CURSOR" ] && break
done
# Wykonywane tylko wtedy, gdy każda strona zakończyła się powodzeniem.
echo "$UNTIL" > "$STATE_FILE"Uruchamiaj go co jedną do pięciu minut. Lekkie nakładanie okien i poleganie na
deduplikacji po id w SIEM jest bezpieczniejsze niż próba trafiania w dokładne
granice.
3. Pierwsze uruchomienie
Pobranie historii to ta sama pętla, tyle że dla ustalonej sekwencji okien zamiast jednego okna przesuwnego. 1Security przechowuje aktywność do trzech lat, więc przed startem zdecyduj, jak głęboko wstecz Twój SIEM naprawdę potrzebuje danych.
- Przechodź zakres stałymi porcjami - od jednej do sześciu godzin, zależnie od wielkości tenanta. Każda porcja jest zamkniętym oknem, więc każdą można wznowić niezależnie.
- Zostaw
limit=1000i mieść się w limicie 600 żądań na minutę. - Zapisuj, na której porcji jesteś. Jeśli proces przerwie się, wznawiasz od tej porcji, a nie od początku.
- Uruchom pobieranie historii i odpytywanie bieżące jako osobne zadania z osobnymi znacznikami. Niech bieżące odpytywanie startuje od teraz, a pobieranie historii pracuje wstecz za nim - dzięki temu bieżące pokrycie nigdy nie czeka na historię.
4. Alerty zmieniają się po wygenerowaniu
Dzienniki są niezmienne: raz przyjęte zdarzenie nigdy się nie zmienia. Alerty takie nie są - są przypisywane, odkładane i rozwiązywane już po pojawieniu się. Odpytywanie oparte wyłącznie na znaczniku uchwyci moment wygenerowania alertu i nigdy nie zobaczy, co stało się z nim później.
Jeśli Twój SOC obsługuje alerty wewnątrz SIEM, dołóż obok odpytywania
przyrostowego przebieg uzgadniający: w wolniejszym rytmie, na przykład co
godzinę, pobierz ponownie alerty wygenerowane w ostatnich N dniach niezależnie
od znacznika i zaktualizuj je po id. Zmiany stanu będą wtedy trafiać do SIEM w
ciągu jednego przebiegu.
# Uzgadnianie co godzinę - ponowny odczyt ostatnich 7 dni i aktualizacja po id
curl -H "Authorization: Bearer $ONESEC_API_KEY" \
"https://api.1security.ai/api/v1/monitoring-alerts?from=$(date -u -d '-7 days' +%FT%TZ)&limit=1000"Dobierz okno uzgadniania do tego, jak długo alert zwykle pozostaje otwarty w
Twoim procesie. Pola isResolved i resolvedAt mówią, czym każdy z nich się
zakończył.
5. Podłączenie do systemu SIEM
Użyj Codeless Connector Platform albo Logic App, jeśli chcesz mieć pełną kontrolę nad pętlą.
- Uwierzytelnianie:
Authorization: Bearer <klucz>jako sekret połączenia. - Stronicowanie: przekazuj
pagination.nextCursordo parametrucursor; zatrzymaj się, gdyhasMoreprzyjmie wartośćfalse. - Miejsce docelowe: wysyłaj
data[]do tabeli niestandardowej w Log Analytics przez Data Collection Endpoint i regułę zbierania. - TimeGenerated: mapuj z
occurredAt(dzienniki),lastScan(alerty monitorowania) lubfirstActivityDateTime(alerty bezpieczeństwa). - Stan: przechowuj koniec okna w stanie konektora i przesuwaj go dopiero po pełnym pobraniu.
Ponieważ 1Security sam pobiera alerty z Defender i Sentinel, przesyłanie
/security-alerts z powrotem do Sentinel może dublować to, co już tam jest.
Większość zespołów przesyła do Sentinel /monitoring-alerts i /logs, a
/security-alerts zostawia dla systemów SIEM, które tego źródła nie mają.
6. Mapowanie pól
| Zastosowanie | /logs | /monitoring-alerts | /security-alerts |
|---|---|---|---|
| Czas zdarzenia | occurredAt | lastScan | firstActivityDateTime |
| Czas przyjęcia | discoveredAt | - | - |
| Klucz deduplikacji | id | id | id |
| Waga | severity | severity | severity |
| Aktor | actorName, actorId, actorIp | assignedUser | actorDisplayName |
| Zasób | resourceName, resourceType | resources, resourceType | users, groups, apps |
| Reguła / tytuł | action | name | title |
| Status | - | status, isResolved | status, classification |
Dwie kwestie normalizacyjne warte obsłużenia od razu:
- Słowniki wag są różne. Dzienniki i alerty monitorowania używają skali
info · low · medium · high · critical. Alerty bezpieczeństwa idą za skalą Microsoftu:informational · low · medium · high · unknown. Zmapuj obie na własną skalę SIEM, zamiast przepuszczać te wartości bez zmian. - Znaczniki czasu. Dzienniki i alerty bezpieczeństwa zwracają pełny ISO-8601
z
Z. Alerty monitorowania zwracają obecnie ten sam moment UTC bezTiZ(2026-06-05 09:12:44). Parsuj tę wartość jako UTC. Przyszłe wydanie ujednolici format do ISO-8601 wszędzie.
7. Utrzymanie integracji
Co dalej
Planowane usprawnienia tej ścieżki integracji, abyś mógł je uwzględnić w projekcie:
- Wypychanie przez webhooks, eliminujące pętlę odpytywania dla strumieni alertowych.
- Specyfikacja OpenAPI wraz z referencyjnymi konektorami dla Sentinel i Splunk, dzięki czemu konfiguracja z sekcji 5 stanie się importem, a nie budową od zera.
- Klucze na poziomie organizacji dla dostawców MSSP, aby jeden konektor obsługiwał całe portfolio tenantów zamiast jednego klucza na tenanta.
- Synchronizacja dwukierunkowa, aby zamknięcie alertu w SIEM zamykało go również w 1Security.
Dalej
NIS2
Zdąż z raportowaniem incydentów NIS2 w 24 i 72 godziny dzięki trzem latom historii śledczej, żywej widoczności ryzyka i dowodom dla każdego środka z art. 21 - na standardowych licencjach Microsoft 365.
API Reference
API REST tylko do odczytu, służące do pobierania dzienników audytu, alertów monitorowania i alertów bezpieczeństwa 1Security do SOC, MSSP lub SIEM.