Auditing
ESS auditing provides comprehensive activity monitoring to manage risks. ESS services support the auditing of their activities.
Audit Events
The following events are audited:
Most Services
- service-started
- service-shutdown
Service Startup/Shutdown.
Purgeable services (i.e. Access Grant, Authorization, Broker, Pod Provision, and WebID)
- purge-init
- purge-completed
Purge start/complete.
Access Grant Service
- access-grant-created
- access-grant-queried
- access-grant-read
- access-grant-revoked
- access-grant-verified
- access-request-created
- access-request-read
- access-request-revoked
- access-request-verified
- access-denial-created
- access-denial-read
- access-denial-revoked
- access-denial-verified
- request-authorized
- revocation-status-read
Access Request/Grant/Denial lifecycle events.
request-authorized events contain additional information (such as the access grant service endpoint, the WebID, client id, etc.) for authenticated access requests/grants/denial events. For these events, you can find the corresponding request-authorized event using the instrument field. However, other than the service endpoint, the same information may be found in the access-* event messages themselves.
As part of the access grant to UMA access token exchange (which is an unauthenticated event), revocation-status-read events occur. These revocation-status-read events, which are also unauthenticated, do not have an associated request-authorized event.
Authorization Service
- acr-created
- acr-updated
- acr-deleted
- provisioned-pod-access-control
- deprovisioned-pod-access-control
ACR Lifecycle events.
Pod Storage Service
- resource-created
- resource-updated
- resource-deleted
Resource Lifecycle events.
- resource-read
Successful resource read events (GET and HEAD operations).
To enable, see INRUPT_STORAGE_AUDIT_RESOURCE_READ_ENABLED configuration for Pod Storage Service.
Pod Provision Service
- pod-provisioned
Pod Provisioned event.
Purger application
- purge-started
- purge-completed
- purge-failed
Purge start/end (successful or not).
Query Service
- query-succeeded
Query events.
Query Indexer
- ingest-succeeded
- ingest-failed
Query Indexer events.
Solid OIDC Broker Service
- openid-backend-idp-login
- openid-token-requested
- openid-authorization-initialized
Authentication/Authorization flow.
UMA Service
- uma-token-created
UMA Grant Flow.
WebID Service
- webid-created
- webid-updated
- webid-deleted
WebID Profile events.
The following services do not produce audit events:
- Notification Gateway service 
- WebSocket Notification service 
- Start service 
Audit Event Message Internal Format
Internally, ESS’ audit event messages are in RDF and serialized as ActivityStreams 2.0 JSON-LD documents:
{
   "@context":[
      "https://www.w3.org/ns/activitystreams",
      "https://schema.inrupt.com/audit/v1.jsonld"
   ],
   "id":"<UUID of the event>",
   "type": [ "Activity", <type2>,... ],
   "name":"<event name>",
   "summary": "<event description>",
   "generator": <JSON document identifying the software producing the event>,
   "actor": [ <JSON document identifying the actor associated with the event>, ... ],
   "object": [ <JSON document identifying the object associated with the event>, ... ],
   "instrument": [ <JSON document identifying the client/application associated with the event>,
                   <JSON document with associated OpenTelemetry data>,
                   <JSON document with associated application-defined metadata>,
                   <JSON document identifying the Pod root and data subject>, ... ],
   "result": [ <JSON document containing associated results for the event, if any> ],
   "published": "<datetime>",
   "identifier":"<identifier to use for correlated events>"
}@context
Specifies the JSON-LD contexts.
id
Universally Unique IDentifier (UUID) for the event.
type
An array of event types; e.g., [ "Activity", "Create" ].
name
Name that denotes the event; e.g., service-started, openid-backend-idp-login, resource-created, access-grant-created, etc.
summary
Short description associated with the message name.
generator
JSON document identifying the software (e.g., service) producing the event. For example, the generator for a Pod provision event:
"generator": {
   "id": "<service URL>"
   "type": ["SoftwareApplication"],
   "name": "<application name>",
   "qualifiedAssociation": "<processId>",
   "wasAssociatedWith": "<Kubernetes pod name>"
}actor
An array of JSON documents that identify the agents, if any, associated with the event. The actor’s identity can be denoted by various combination of fields, such as (list below is not exhaustive):
- idand- typefields;
- nameand- typefields.
The field can also be empty [] for events not initiated by a user (such as service start events, etc.).
id and name fields are associated with a type field.
For example:
- For an Access Request/Grant event, which include the - idand the- type:- "actor" : [ { "id" : "https://id.example.com/someusername", "type" : [ "Agent" ] } ],
- For IdP login events: - "actor": [ { "name": "someusername", "type" : [ "Agent" ] } ]
object
An array of JSON documents that identify the objects associated with the event; that is, the objects against which the action is performed.
The object can be denoted by various combination of fields, such as (list below is not exhaustive):
- idand- namefields;
- idand- typefields;
- nameand- qualifiedAssociationfields;
For example:
- A Pod provisioned event: - "object": [ { "type": [ "Storage" ], "id": "<Pod Root URL>" } ]
- For Access Request/Grant/Denial creation events, the - objectfield contains the created Access Request/Grant/Denial:- The - objectfor the create Access Request/Grant/Denial events contains the created Request/Grant/Denial in a document with:- Previously, the - objectcontained the created Access Request/Grant/Denial directly as an element.
- The - objectcontains an element that identifies the Pod resource.
 - "object": [ { "content" : "{\"id\":\"https://vc.example.com/vc/79288a3 ... }", "mediaType": "application/ld+json" }, { "type" : [ "Resource" ], "id" : "https://storage.example.com/ad3b.../some/resource" } ]
- For Pod resource CRUD events ( - resource-created,- resource-read,- resource-updated, and- resource-deleted) events, the- objectfield include an object that identifies the Pod resource.- For example: - "object": [ { "generated" : "6cba8240-9f79-40db-a129-c6b8edddb840", "invalidated" : "4e12ed06-c4e5-41bc-bcd3-0f6a821c08ca", "type" : [ "Resource" ], "id" : "https://storage.example.com/ad3b.../some/resource" } ]- The - generatedand- invalidatedfields are internal references to the content that appear in some combination depending on whether it’s a create/read/update/delete event.- The object may also include additional fields, such as - accessControlfor- resource-createdevents.
instrument
An array of JSON documents that identify:
- The clients associated with the event, if any. For example: - "instrument" : [ { "id" : "https://start.example.com/app/id", "summary" : "Client identifier", } ],- Instrument objects that identify the clients have an associated - summaryfield with the value- "Client identifier".- Some events such as - service-starteddo not have associated clients, and thus may have empty- instrumentarray.
- The associated OpenTelemetry instrument info - For example: - "instrument" : [ // ... { "traceId" : "7decd3657a9efffc010a4b6a4b3da586", "spanId" : "91123fce3c668451", "isSampled" : true, "name" : "OpenTelemetry Span Context", "type" : [ "SpanContext" ] }, // ... ],- OpenTelemetry - traceIdfield can be used to correlate messages associated with a request. See Appendix: Audit Event Correlation for more information.
- The associated Pod information: - hasDataSubjectcontains the Pod data subject information (Pod Data Subject refers to the agent who created the Pod. )
- hasStoragecontains the Pod root URL.
 - For example: - "instrument" : [ // ... { "hasDataSubject" : { "id" : "https://id.example.com/someusername", "type" : [ "https://w3id.org/dpv#DataSubject" ] }, "hasStorage" : "https://storage.example.com/root/", "type" : [ "http://www.w3.org/2004/02/skos/core#Concept" ] } // ... ],
- Application-defined metadata sent in client requests - For example: - "instrument" : [ // ... { "name" : "Application-Defined Request Metadata", "items": [ { "mediaType" : "text/plain", "name" : "x-correlation-id", "content" : "2049875809728750827498245084" }, { "mediaType": "text/plain", "name": "my-client-version", "content": "1.0.3" } ], "type": [ "urn:uuid:1a05e301-4013-40c9-bae7-5d719b7151c8" ] } // ... ],- See Application-Defined Metadata for the configuration needed to include in audit events. 
result
An array of JSON documents that contains associated results. For example:
- an - access-request-verifiedevent includes the results of the verification, or
- an - access-grant-revokedevent includes the updated status.
published
The timestamp of the event.
identifier
Identifier to use for correlated events from a single service that have occurred within the same request. To correlate events across services for a request, use the OpenTelemetry traceId in the instrument field.
For examples, see Appendix: Audit Events Examples
Integration with External Logging Systems
The ESS Auditing Service can log to:
- sysout(default)
- Syslog 
For more information, see Integration with Syslog and Integration with Sentinel.
Last updated