35
35
import no .nav .vedtak .log .audit .Auditlogger ;
36
36
import no .nav .vedtak .log .audit .CefField ;
37
37
import no .nav .vedtak .log .audit .EventClassId ;
38
+ import no .nav .vedtak .sikkerhet .abac .beskyttet .ActionType ;
39
+ import no .nav .vedtak .sikkerhet .abac .beskyttet .ResourceType ;
38
40
import no .nav .vedtak .sikkerhet .abac .internal .BeskyttetRessursAttributter ;
39
41
import no .nav .vedtak .sikkerhet .abac .pdp .AppRessursData ;
40
42
import no .nav .vedtak .sikkerhet .kontekst .IdentType ;
@@ -63,19 +65,23 @@ public void loggUtfall(AbacResultat utfall, BeskyttetRessursAttributter beskytte
63
65
LOG .info ("ABAC AVSLAG SYSTEMBRUKER {} tjeneste {}" , beskyttetRessursAttributter .getBrukerId (), beskyttetRessursAttributter .getServicePath ());
64
66
}
65
67
} else if (beskyttetRessursAttributter .isSporingslogg ()) {
66
- logg (beskyttetRessursAttributter , appRessursData , utfall .fikkTilgang () ? Access .GRANTED : Access .DENIED );
68
+ try {
69
+ logg (beskyttetRessursAttributter , appRessursData , utfall .fikkTilgang () ? Access .GRANTED : Access .DENIED );
70
+ } catch (Exception e ) {
71
+ LOG .warn ("ABAC AUDITLOG FAILURE ident {} tjeneste {}" , beskyttetRessursAttributter .getIdentType (), beskyttetRessursAttributter .getServicePath (), e );
72
+ }
73
+
67
74
}
68
75
}
69
76
70
77
private void logg (BeskyttetRessursAttributter beskyttetRessursAttributter , AppRessursData appRessursData , Access access ) {
71
78
requireNonNull (beskyttetRessursAttributter );
72
79
requireNonNull (beskyttetRessursAttributter .getDataAttributter ());
73
80
74
- String abacAction = requireNonNull (beskyttetRessursAttributter .getActionType ().getEksternKode ());
75
- var header = createHeader (abacAction , access );
81
+ var header = createHeader (beskyttetRessursAttributter .getActionType (), access );
76
82
var fields = createDefaultAbacFields (beskyttetRessursAttributter );
77
83
78
- List <String > ids = getBerortBrukerId (appRessursData );
84
+ List <String > ids = getBerortBrukerId (appRessursData ); // TODO: Vurder å kun logge for hovedperson
79
85
for (String aktorId : ids ) {
80
86
loggTilgangPerBerortAktoer (header , fields , aktorId );
81
87
}
@@ -88,7 +94,7 @@ private void loggTilgangPerBerortAktoer(AuditdataHeader header, Set<CefField> fi
88
94
auditlogger .logg (auditdata );
89
95
}
90
96
91
- private AuditdataHeader createHeader (String abacAction , Access access ) {
97
+ private AuditdataHeader createHeader (ActionType abacAction , Access access ) {
92
98
return new AuditdataHeader .Builder ().medVendor (auditlogger .getDefaultVendor ())
93
99
.medProduct (auditlogger .getDefaultProduct ())
94
100
.medEventClassId (finnEventClassIdFra (abacAction ))
@@ -98,13 +104,13 @@ private AuditdataHeader createHeader(String abacAction, Access access) {
98
104
}
99
105
100
106
protected Set <CefField > createDefaultAbacFields (BeskyttetRessursAttributter beskyttetRessursAttributter ) {
101
- var abacAction = requireNonNull (beskyttetRessursAttributter .getActionType (). getEksternKode ( ));
102
- var abacResourceType = requireNonNull (beskyttetRessursAttributter .getResourceType ());
107
+ var abacAction = requireNonNull (mapActionType ( beskyttetRessursAttributter .getActionType ()));
108
+ var abacResourceType = requireNonNull (mapResourceType ( beskyttetRessursAttributter .getResourceType () ));
103
109
104
110
Set <CefField > fields = new HashSet <>();
105
111
fields .add (new CefField (EVENT_TIME , System .currentTimeMillis ()));
106
112
fields .add (new CefField (REQUEST , beskyttetRessursAttributter .getServicePath ()));
107
- fields .add (new CefField (ABAC_RESOURCE_TYPE , abacResourceType . getResourceTypeAttribute () ));
113
+ fields .add (new CefField (ABAC_RESOURCE_TYPE , abacResourceType ));
108
114
fields .add (new CefField (ABAC_ACTION , abacAction ));
109
115
110
116
if (beskyttetRessursAttributter .getBrukerId () != null ) {
@@ -141,15 +147,33 @@ private static Optional<String> getOneOfNew(AbacDataAttributter attributter, Aba
141
147
return Optional .empty ();
142
148
}
143
149
144
- private static EventClassId finnEventClassIdFra (String abacAction ) {
150
+ private static EventClassId finnEventClassIdFra (ActionType abacAction ) {
145
151
return switch (abacAction ) {
146
- case "read" -> AUDIT_ACCESS ; /* Fall-through */
147
- case "delete" , "update" -> AUDIT_UPDATE ;
148
- case "create" -> AUDIT_CREATE ;
152
+ case READ -> AUDIT_ACCESS ; /* Fall-through */
153
+ case DELETE , UPDATE -> AUDIT_UPDATE ;
154
+ case CREATE -> AUDIT_CREATE ;
149
155
default -> throw new IllegalArgumentException ("Ukjent abacAction: " + abacAction );
150
156
};
151
157
}
152
158
159
+ private static String mapActionType (ActionType actionType ) {
160
+ return actionType == ActionType .DUMMY ? null : actionType .name ().toLowerCase ();
161
+ }
162
+
163
+ // TODO: vurder å forkorte vekk abac.attributter.
164
+ private static String mapResourceType (ResourceType resourceType ) {
165
+ return switch (resourceType ) {
166
+ case APPLIKASJON -> "no.nav.abac.attributter.foreldrepenger" ;
167
+ case DRIFT -> "no.nav.abac.attributter.foreldrepenger.drift" ;
168
+ case FAGSAK -> "no.nav.abac.attributter.foreldrepenger.fagsak" ;
169
+ case VENTEFRIST -> "no.nav.abac.attributter.foreldrepenger.fagsak.ventefrist" ;
170
+ case OPPGAVESTYRING_AVDELINGENHET -> "no.nav.abac.attributter.foreldrepenger.oppgavestyring.avdelingsenhet" ;
171
+ case OPPGAVESTYRING -> "no.nav.abac.attributter.foreldrepenger.oppgavestyring" ;
172
+ case UTTAKSPLAN -> "no.nav.abac.attributter.foreldrepenger.uttaksplan" ;
173
+ case PIP , DUMMY -> throw new IllegalArgumentException ("Ulovlig resourceType: " + resourceType );
174
+ };
175
+ }
176
+
153
177
/**
154
178
* Standard hos NAV er at tilgang logges som "INFO" og avslag som "WARN". Merk
155
179
* at dette avviker fra CEF-standarden.
0 commit comments