Extracting Audit API

🎯 Definicja Audit API to dedykowany interfejs GraphQL w module Audytu (Audit module) Ataccama ONE. Służy do śledzenia i pobierania historii wszystkich działań podejmowanych przez użytkowników w systemie (odczyty, edycje, usunięcia) oraz prób nieautoryzowanego dostępu w celach bezpieczeństwa i zgodności z regulacjami (compliance).


🔑 Kluczowe punkty

  • Działa na osobnym porcie (domyślnie 8071) i korzysta z oddzielnej bazy danych PostgreSQL (nie wpływa na wydajność głównego repozytorium metadanych).
  • Rejestruje dwa typy rekordów: Operacje (kto i co zrobił) oraz Zasoby (do jakich obiektów uzyskano dostęp).
  • Powiązanie operacji z zasobami odbywa się za pomocą klucza correlationId.
  • Uwierzytelnianie dzieli wspólny realm Keycloak; użytkownik wywołujący to API musi posiadać rolę AUDIT_admin lub AUDIT_user.
  • Zapytania do Audit API powinny zawsze zawierać filtry czasowe (czas uniksowy w milisekundach), aby uniknąć pełnego skanowania tabeli.

📚 Szczegółowe wyjaśnienie i architektura

Różnice architektoniczne:

AtrybutGłówne ONE APIAudit API
ProtokółGraphQLGraphQL
Punkt Końcowy (Endpoint)http://host:8080/graphqlhttp://host:8071/graphql
Baza danychRepozytorium metadanych ONEOddzielna baza PostgreSQL
DaneObiekty ładu danych (Governance)Wyłącznie wpisy o zdarzeniach (eventy)
KonfiguracjaModuł mmmModuł audit (server.port)

Domyślnie audytowane encje to: source, location, connection, credential, catalogItem, attribute, dmmCatalogItem, record.
Aby włączyć audyt na innych obiektach, należy dodać cechę audit:auditEnabled w konfiguracji wybranej encji.


Co dokładnie śledzi moduł audytu?

  1. Operacje (Operations) — co się wydarzyło:
    • Wyświetlanie (listing), odczyt (read), aktualizacja (update) i usuwanie (delete) zasobów.
    • Niestandardowe operacje (np. profiling:bulkProfile, datasource:testConnection).
    • Naruszenia dostępu (access violations) – logowane, gdy użytkownik nie ma uprawnień lub zasób nie istnieje.
  2. Zasoby (Assets) — czego dotyczyło zdarzenie:
    • Szczegółowa tożsamość zasobu: assetId, assetName, assetType.
    • Typ dostępu: ENTITY (obiekt metadanych) lub LINK (wskaźnik do Konsoli Administracyjnej DPM).

Struktura rekordu operacji (Operation Record)

PoleTypOpis
moduleStringModuł źródłowy: MMM, DPM lub DMM
actionStringTyp zdarzenia: READ, FINISH_SUCCESS, OPERATION
operationStringKonkretna operacja: catalogItem, LIST, testConnection, checkCatalogItemDqEval
assetTypeStringTyp zaangażowanej encji: catalogItem, connection, source
assetIdStringUnikalny identyfikator zasobu, do którego uzyskano dostęp
assetNameStringNazwa wyświetlana zasobu
correlationIdStringKlucz łączący tę operację z powiązanymi rekordami zasobów (Asset)
timeLongCzas w milisekundach od epoki Unix (01/01/1970)
userNameStringNazwa użytkownika, który wywołał akcję
userIdStringUnikalny identyfikator użytkownika z Keycloak
violationBooleantrue, jeśli akcja została odrzucona przez brak uprawnień

💡 Przykłady zapytań GraphQL

1. Pobranie listy wszystkich rekordów operacji:

query listOperations {
  operations {
    edges {
      node {
        module
        action
        operation
        assetType
        assetName
        correlationId
        time
        userName
        userId
        violation
      }
    }
  }
}

2. Filtrowanie operacji (np. odczyty z modułu MMM dla określonego użytkownika i przedziału czasu):

query filterOperations {
  operations(
    modules: ["MMM"]
    userIds: ["716b5f1e-d566-4ec8-bcd8-27a7ff1f53e5"]
    actions: ["READ"]
    operations: ["catalogItem"]
    time: {
      oldest: 1600000000000
      newest: 1800000000000
    }
  ) {
    edges {
      node {
        operation
        action
        assetType
        correlationId
        time
      }
    }
  }
}

3. Pobranie listy zasobów (Assets):

query listAssets {
  assets {
    edges {
      node {
        correlationId
        assetId
        assetName
        assetType
        type
        action
        violation
        time
      }
    }
  }
}

4. Stronicowanie (Pagination) w Audit API

Audit API wykorzystuje stronicowanie oparte na parametrach skip (przesunięcie) oraz size (rozmiar strony):

query listAssets {
  assets(
    skip: 0
    size: 50
    time: { oldest: 1700000000000, newest: 1800000000000 }
  ) {
    edges {
      node {
        correlationId
        assetName
        action
        time
      }
    }
    pageInfo {
      endCursor
      hasNext
    }
  }
}

Metodologia korelacji danych (Operations & Assets)

W celu pełnego zrekonstruowania przebiegu zdarzenia stosuje się schemat korelacji za pomocą klucza correlationId:

graph TD
    A["Krok 1: Filtruj operacje (np. po userId i czasie)"] --> B["Pobierz listę correlationId"]
    B --> C["Krok 2: Odpytaj o zasoby (Assets) filtrując po correlationId"]
    C --> D["Krok 3: Połącz wyniki po correlationId (Pełny log audytowy: Kto -> Co zrobił -> Na jakim zasobie)"]

Pobieranie logów z poziomu ONE Desktop

W celu cyklicznego pobierania logów do zewnętrznych celów analitycznych można użyć kroku JSON Call w ONE Desktop:

  1. URL: Skieruj krok na port audytu: http://host:8071/graphql (nie na port główny 8080).
  2. Uprawnienia: Upewnij się, że użytkownik ma rolę AUDIT_admin lub AUDIT_user w Keycloak.
  3. Szablon Wejściowy (Input Template): Parametryzuj zapytanie za pomocą dynamicznych zmiennych w formacie ${zmienna}:
    {
      "query": "query listOperations { operations(modules: [\"MMM\"], actions: [\"DELETE\"], time: { oldest: ${fromEpoch}, newest: ${toEpoch} }) { edges { node { operation action assetName correlationId time userName } } } }"
    }
  4. Konfiguracja Reader (JSON Path): Ustaw ścieżkę strumienia jako data.operations.edges[*].node w celu spłaszczenia struktury GraphQL i przekazania wierszy do zapisu w bazie danych lub pliku CSV.

📌 Źródła

  • Ataccama ONE Security and Auditing Guide
  • ONE Desktop Integration plans repository