---
title: Integracja z SIEM
description: Przesyłaj strumieniowo alerty i logi z 1Security do systemów Splunk, Microsoft Sentinel lub dowolnego SIEM za pomocą cyklicznego odpytywania REST.
icon: Radar
---

Ten przewodnik pokazuje, jak przesyłać **alerty polityk**, **dzienniki audytu**
oraz **alerty bezpieczeństwa** z 1Security do Twojego systemu SIEM za pomocą [API REST](/docs/reference/api).
Model przesyłania oparty jest na mechanizmie **pull-based**: Twój system SIEM odpytuje nasze API
zgodnie z harmonogramem i przechowuje kursor (znacznik), dzięki czemu każde odpytanie
pobiera tylko nowe dane.

## 1. Utwórz klucz API

Na panelu nawigacyjnym otwórz **Ustawienia → Klucze API** i utwórz klucz z uprawnieniami,
których potrzebujesz (`logs:read`, `monitoring-alerts:read`, `security-alerts:read`).
Skopiuj sekretny ciąg znaków zaczynający się od `1sec_live_…` - jest on wyświetlany tylko raz.

Zweryfikuj go:

```bash
curl -H "Authorization: Bearer $ONESEC_API_KEY" \
  https://api.1security.ai/api/v1/ping
```

## 2. Wzorzec odpytywania przyrostowego

Nie pobieraj całej historii przy każdym uruchomieniu. Zamiast tego zastosuj **okno czasowe oparte o czas ingestii (przyjęcia)**
i zachowaj stan "znacznika czasu" (watermark) pomiędzy odpytaniami.

<Steps>
  <Step>
    ### Zapisz znacznik czasu (watermark)
    Zachowaj czas ostatniego udanego odpytania (zacznij od "teraz minus kilka minut").
  </Step>
  <Step>
    ### Pobierz okno danych
    Odpytuj tylko o zdarzenia przetworzone po znaczniku czasu. Dla punktu końcowego `/logs` używaj
    parametru `discoveredFrom` (czas ingestii w 1Security) zamiast parametru `from` (czas wystąpienia zdarzenia w środowisku) - opóźnione
    zdarzenia z M365 są dzięki temu wykazywane po ich fizycznym przyjęciu przez system i nic Ci nie umknie.

    ```bash
    curl -H "Authorization: Bearer $ONESEC_API_KEY" \
      "https://api.1security.ai/api/v1/logs?discoveredFrom=2026-06-05T09:00:00Z&limit=1000"
    ```

  </Step>
  <Step>
    ### Przejdź przez strony (Paginacja)
    Śledź wartość `pagination.nextCursor` jako argument `?cursor=` do momentu, aż flaga `hasMore` zwróci wartość `false`.
  </Step>
  <Step>
    ### Przesuń znacznik i zdeduplikuj
    Zaktualizuj znacznik na obecny czas i zastosuj deduplikację w SIEM, używając atrybutu `id`
    jako klucza zdarzenia. Dzięki temu nachodzące na siebie okna odpytywania nie spowodują podwójnego indeksowania.
  </Step>
</Steps>

<Callout type="info">
  Zawsze minimalnie nadpisuj okna odpytywania (pytaj z marginesem minuty lub
  dwóch) i polegaj na deduplikacji atrybutu `id`, zamiast precyzyjnych i
  ryzykownych kursorów brzegowych. To najbezpieczniejsza metoda na
  zagwarantowanie braku luk w logach po restarcie.
</Callout>

## 3. Integracja z Twoim SIEM

<Tabs items={['Splunk', 'Microsoft Sentinel', 'Plain cron']}>
  <Tab value="Splunk">
    Skorzystaj z wtyczki **REST API Modular Input** (np. za pomocą Splunk Add-on Builder lub modułu `rest_ta`):

    - Punkt końcowy (Endpoint): `https://api.1security.ai/api/v1/security-alerts`
    - Nagłówek uwierzytelniania: `Authorization: Bearer <twój klucz>`
    - Handler odpowiedzi: zaczytuj atrybuty w liście tablicy `data[]`, czas zdarzenia bierz z
      `firstActivityDateTime`, a do deduplikacji używaj klucza `id`.
    - Harmonogram: pobieraj co 1-5 minut i zachowuj parametry `discoveredFrom`/`from` jako punkt kontrolny.

  </Tab>
  <Tab value="Microsoft Sentinel">
    Użyj wtyczki bezkodowej **Codeless Connector** (lub Logic App), która wyśle żądanie GET
    na każdy endpoint według harmonogramu, przejdzie przez strony uzywając `pagination.nextCursor`
    i prześle treść tablicy `data[]` do logów z poziomu Custom Table API korzystając z
    Data Collection Endpoint. Stan znacznika przechowuj w konfiguracji konektora.
  </Tab>
  <Tab value="Plain cron">
    Szkic minimalistycznego skryptu poller'a dla zadań Cron:

    ```bash
    #!/usr/bin/env bash
    SINCE=$(cat .watermark 2>/dev/null || date -u -d '-5 min' +%FT%TZ)
    CURSOR=""
    while :; do
      RESP=$(curl -s -H "Authorization: Bearer $ONESEC_API_KEY" \
        "https://api.1security.ai/api/v1/logs?discoveredFrom=$SINCE&limit=1000&cursor=$CURSOR")
      echo "$RESP" | jq -c '.data[]' >> /var/log/1security-logs.ndjson
      CURSOR=$(echo "$RESP" | jq -r '.pagination.nextCursor // empty')
      [ -z "$CURSOR" ] && break
    done
    date -u +%FT%TZ > .watermark
    ```

  </Tab>
</Tabs>

## 4. Zarządzanie limitami zapytań (Rate Limits)

Pozostań poniżej 600 zapytań na minutę w obrębie każdego klucza. Jeśli otrzymasz błąd `429`, zastosuj
się do zawartości nagłówka `Retry-After`. Dla zdecydowanej większości instalacji regularne odpytywanie endpointa
np. raz na minutę przy zastosowaniu ogromnych wskaźników parametru `limit` z pewnością nie przebije tego budżetu.

## Ściąga do mapowania kluczowych pól

| Cel użycia         | Dzienniki aktywności (Logs)     | Alerty bezpieczeństwa (Security alerts) |
| ------------------ | ------------------------------- | --------------------------------------- |
| Czas zdarzenia     | `occurredAt`                    | `firstActivityDateTime`                 |
| Klucz deduplikacji | `id`                            | `id`                                    |
| Wagą / Krytyczność | `severity`                      | `severity`                              |
| Aktor / Działacz   | `actorName` / `actorIp`         | `actorDisplayName`                      |
| Naruszony zasób    | `resourceName` / `resourceType` | `threatDisplayName`                     |

Przejdź do pełnej [Dokumentacji Referencyjnej API](/docs/reference/api), aby przeanalizować wszystkie dostępne atrybuty.
