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_adminlubAUDIT_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:
| Atrybut | Główne ONE API | Audit API |
|---|---|---|
| Protokół | GraphQL | GraphQL |
| Punkt Końcowy (Endpoint) | http://host:8080/graphql | http://host:8071/graphql |
| Baza danych | Repozytorium metadanych ONE | Oddzielna baza PostgreSQL |
| Dane | Obiekty ładu danych (Governance) | Wyłącznie wpisy o zdarzeniach (eventy) |
| Konfiguracja | Moduł mmm | Moduł 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?
- 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.
- Zasoby (Assets) — czego dotyczyło zdarzenie:
- Szczegółowa tożsamość zasobu:
assetId,assetName,assetType. - Typ dostępu:
ENTITY(obiekt metadanych) lubLINK(wskaźnik do Konsoli Administracyjnej DPM).
- Szczegółowa tożsamość zasobu:
Struktura rekordu operacji (Operation Record)
| Pole | Typ | Opis |
|---|---|---|
| module | String | Moduł źródłowy: MMM, DPM lub DMM |
| action | String | Typ zdarzenia: READ, FINISH_SUCCESS, OPERATION |
| operation | String | Konkretna operacja: catalogItem, LIST, testConnection, checkCatalogItemDqEval |
| assetType | String | Typ zaangażowanej encji: catalogItem, connection, source |
| assetId | String | Unikalny identyfikator zasobu, do którego uzyskano dostęp |
| assetName | String | Nazwa wyświetlana zasobu |
| correlationId | String | Klucz łączący tę operację z powiązanymi rekordami zasobów (Asset) |
| time | Long | Czas w milisekundach od epoki Unix (01/01/1970) |
| userName | String | Nazwa użytkownika, który wywołał akcję |
| userId | String | Unikalny identyfikator użytkownika z Keycloak |
| violation | Boolean | true, 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:
- URL: Skieruj krok na port audytu:
http://host:8071/graphql(nie na port główny 8080). - Uprawnienia: Upewnij się, że użytkownik ma rolę
AUDIT_adminlubAUDIT_userw Keycloak. - 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 } } } }" } - Konfiguracja Reader (JSON Path): Ustaw ścieżkę strumienia jako
data.operations.edges[*].nodew 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