Audit¶
Úvod¶
DHIS2 podporuje novou službu auditu založenou na Apache ActiveMQ Artemis. Artemis používá jako asynchronní systém zasílání zpráv DHIS2.
Po uložení entity do databáze bude vytvořena zpráva auditu a odeslána spotřebitelské službě zpráv Artemis. Zpráva bude poté zpracována v jiném vláknu.
Protokoly auditu lze získat z databáze DHIS2. V současné době není k dispozici žádný koncový bod uživatelského rozhraní ani rozhraní API pro načítání záznamů auditu.
Detailed explanation of the audit system architecture can be found here.
What we log¶
This is the list of operations we log as part of the audit system:
- Operations on user accounts (like but not limited to creation, profile edits)
- Operations on user roles, groups and authority groups
- Operations on metadata objects (like but not limited to categories, organization units, reports)
- Operations on tracked objects (like but not limited to tracked entities)
- Jobs configuration
- Breaking the glass operations
Jedna tabulka auditu¶
All audit entries, except the ones related to tracked entities, will be saved into one single table named audit
| Sloupec | Typ | Popis |
|---|---|---|
| auditid | celé číslo | Primární klíč. |
| audittype | text | READ, CREATE, UPDATE, DELETE, SEARCH |
| auditscope | text | METADATA, AGGREGATE, TRACKER |
| klass | text | Název entity auditu Java třídy. |
| atributy | jsonb | Řetězec JSON s atributy auditovaného objektu. Příklad: {"valueType":"TEXT", "categoryCombo":"SWQW313FQY", "domainType":"TRACKER"}. |
| data | bytea | Komprimovaný řetězec JSON auditní entity ve formátu bajtového pole (nečitelný pro lidi). |
| createdat | časové razítko bez časového pásma | Doba vytvoření. |
| createdby | text | Uživatelské jméno uživatele provádějícího auditovanou operaci. |
| uid | text | UID auditlovaného objektu. |
| code | text | Kód auditovaného objektu. |
Služba auditu využívá dva nové koncepty: Audit Scope a Audit Type.
Rozsah auditu¶
Rozsah auditu je logická oblast aplikace, kterou lze auditovat. V současné době existují tři rozsahy auditu.
| Rozsah | Klíč | Auditované objekty |
|---|---|---|
| Trasovač | TRACKER | Tracked Entity, Enrollment, Event. |
| Metadata | METADATA | Všechny objekty metadat (např. datový prvek, organizační jednotka). |
| Aggregate | AGGREGATE | Hodnota souhrnných dat. |
Typ auditu¶
Typ auditu je akce, která spouští operaci auditu. V současné době podporujeme následující čtyři typy.
| Název | Klíč | Popis |
|---|---|---|
| Číst | READ | Objekt byl přečten. |
| Vytvořit | VYTVOŘIT | Objekt byl vytvořen. |
| Aktualizace | AKTUALIZACE | Objekt byl aktualizován. |
| Vymazat | SMAZAT | Objekt byl smazán. |
| Vypnuto | VYPNUTO | Vypnout audit |
Pozor
Typ auditu READ může generovat velké množství dat v databázi a může mít dopad na výkon.
Tracked entity audits¶
Operations on tracked entities are stored in the trackedentityaudit table.
trackedentityaudit¶
| Sloupec | Typ | Popis |
|---|---|---|
| trackedentityauditid | celé číslo | Primární klíč. |
| trackedentity | text | Tracked entity name. |
| created | časové razítko bez časového pásma | Doba vytvoření. |
| accessedby | text | Uživatelské jméno uživatele provádějícího auditovanou operaci. |
| audittype | text | READ, CREATE, UPDATE, DELETE, SEARCH |
| comment | text | Kód auditovaného objektu. |
This data can be retrieved via the API.
Rozbití skla¶
Funkce prolomení skla umožňuje přístup k záznamům, ke kterým uživatel DHIS2 za zvláštních okolností přístup nemá. V důsledku toho musí uživatelé zadat důvod pro přístup k takovým záznamům.
Video vysvětlující, jak to funguje, najdete na našem kanálu YouTube zde.
Událost rozbití skla je uložena v tabulce programtempownershipaudit, popsané níže:
| Sloupec | Typ | Popis |
|---|---|---|
| programtempownershipauditid | celé číslo | Primární klíč. |
| programid | celé číslo | ID programu, ke kterému trasovaná entita patří. |
| trackedentityid | celé číslo | Tracked entity ID of which the attribute value belongs to. |
| created | časové razítko bez časového pásma | Doba vytvoření. |
| accessedby | text | Uživatelské jméno uživatele provádějícího auditovanou operaci. |
| důvod | text | Důvod, jak je uvedeno v dialogovém okně. |
Nastavení¶
Systém auditu je standardně povolen pro následující rozsahy a typy.
Rozsahy (rozlišují se malá a velká písmena):
READVYTVOŘITUPDATEDELETESEARCHDISABLED
Typy:
METADATATRACKERAGGREGATE
To znamená, že není vyžadována žádná akce k aktivaci výchozího systému auditu. Výchozí nastavení je ekvivalentní následující konfiguraci dhis.conf.
audit.metadata = CREATE;UPDATE;DELETE
audit.tracker = CREATE;UPDATE;DELETE
audit.aggregate = CREATE;UPDATE;DELETE
Audit lze nakonfigurovat pomocí audit matrix. Matice auditu představuje platné kombinace rozsahů a typů a je definována pomocí následujících vlastností v konfiguračním souboru dhis.conf. Každá vlastnost přijímá seznam typů auditu oddělený středníkem (;).
audit.metadataaudit.trackeraudit.aggregate
Artemis¶
Apache ActiveMQ Artemis je projekt s otevřeným zdrojovým kódem, jehož cílem je vybudovat multiprotokolový, embeddovatelný, velmi výkonný, klastrovaný asynchronní systém zasílání zpráv. Je součástí DHIS2 od verze 2.31 a používá se jako systém pro zpracování protokolů auditu.
Ve výchozím nastavení DHIS2 spustí vestavěný server Artemis, který aplikace interně používá k ukládání událostí auditu a přístupu k nim.
Pokud však již máte server Artemis, můžete se k němu připojit z DHIS2 a odesílat události auditu, jak je popsáno v naší oficiální dokumentaci: v tomto nastavení budou události auditu proudit z DHIS2 do externího systému Artemis .
log4j2¶
log4j2 je výchozí knihovna protokolování DHIS2 používaná ke zpracování výstupních zpráv. Používá se k ovládání toho, jaké události se zaznamenávají do kterého souboru.
Aplikace dodává výchozí konfigurační soubor log4j2, který dává pokyn, jaké informace se mají protokolovat a kam (konzole). DHIS2 se poté postará o import tohoto souboru a protokolování instrukcí, jak je popsáno v třída konfigurace log4j, tedy přesměrování výstupu z konzole do souborů.
Od 2.36 do 2.38 se soubor protokolu auditu dhis-audit.log otočí každý den o půlnoci.
Příklad vlastní konfigurace log4j2 lze nalézt zde: ukazuje, jak nakonfigurovat DHIS2 tak, aby ukládal všechny protokoly do externího úložiště, střídal je na týdenní bázi a uchovával je po dobu 30 dnů. Přečtěte si prosím sekci protokolování aplikací, jak jej používat.
Příklady¶
Tato část ukazuje, jak nakonfigurovat systém auditu v dhis.conf.
Chcete-li povolit audit vytváření a aktualizace pouze metadat a sledování:
audit.metadata = CREATE;UPDATE
audit.tracker = CREATE;UPDATE
audit.aggregate = DISABLED
Chcete-li pouze vytvořit a odstranit objekty související se sledováním:
audit.metadata = DISABLED
audit.tracker = CREATE;DELETE
audit.aggregate = DISABLED
Chcete-li úplně zakázat audit pro všechny rozsahy:
audit.metadata = DISABLED
audit.tracker = DISABLED
audit.aggregate = DISABLED
Doporučujeme uchovávat auditní záznamy v souboru, jako standardně ve verzi 2.38. U starších verzí následující konfigurace ukládá protokoly auditu do souboru $DHIS2_HOME/logs/dhis-audit.log:
audit.database = off
audit.logger = on
Chcete-li uložit data auditu do databáze, přidejte do svého souboru dhis.conf následující (výchozí do verze 2.38):
audit.database = on
audit.logger = off
Chcete-li extrahovat protokoly z tabulky audit, můžete použít dhis2-audit-data-extractor ze systému, kde běží DHIS2:
$ python extract_audit.py extract
Úplné podrobnosti naleznete v dokumentaci.
Chcete-li analyzovat položky ze souboru protokolu, můžete použít skript python takto:
$ grep "auditType" dhis-audit.log | python extract_audit.py parse
Nebo použijte jq následovně:
$ grep "auditType" dhis-audit.log | jq -r .
Chcete-li vybrat události v určitém datu, můžete použít jq následovně (v tomto příkladu vybíráme všechny události, které se staly mezi lednem 2022 a koncem června 2022):
$ grep "auditType" dhis-audit.log | jq -r '.[] | select ( (.datetime >="2022-01-01") and (.datetime <= "2022-06-30") )'
Totéž s extract_audit:
$ python3 extract_audit.py extract -m stdout -f JSON | jq -r '.[] | select ( (.datetime >="2022-01-01") and (.datetime <= "2022-06-30") )'