Audit the deployment
Auditing is managed by the Commons Audit Framework to log audit events for security, troubleshooting, and regulatory compliance. Audit logs are written in UTF-8 format.
Remote and local auditing
Remote auditing
In remote auditing, the agent logs audit events to the audit event handler configured in the AM realm. In an environment with several AM servers, the agent writes audit logs to the AM server that satisfies the agent request for client authentication or resource authorization.
The agent logs audit events remotely only when AM’s global audit logging is enabled and configured in the realm where the agent runs.
Set up global audit logging in the AM admin UI:
-
In the AM admin UI, go to Configure > Global Services > Audit logging.
-
Enable Audit logging.
-
Enter values to include in Field whitelist filters or Field blacklist filters.
The following example path in the Field whitelist filters list includes the
Accept-Language
value in the http.request.headers field in access events:
/access/http/request/headers/accept-language
Learn more from AM’s Global audit logging.
Audit event logs
When a request matches a not-enforced rule, the agent doesn’t log an audit event for that request. Otherwise, the agent logs an audit event according to the configuration described in Configure auditing and Include or exclude elements from the audit logs.
The following example shows an audit event log for successful access to a resource:
{
"_id": "...", //This ID is internal to AM and available only in remote logs.
"timestamp": "...",
"eventName": "AM-ACCESS-OUTCOME",
"transactionId": "...",
"trackingIds": [
"...",
"..."
],
"userId":"id=demo,ou=user,dc=example,dc=com",
"client": {
"ip": "...",
"port": ...
},
"server": {
"ip": "...",
"port": 8020
},
"http": {
"request": {
"secure": false,
"method": "GET",
"path":"http://my.example.com:8020/examples/",
"headers": {
"accept": [
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
],
"host": [
"my.example.com:8020"
],
"user-agent": [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
]
}
}
},
"request": {
"protocol": "HTTP/1.1",
"operation": "GET"
},
"response": {
"status": "SUCCESSFUL",
"statusCode": "302",
"elapsedTime": 25,
"elapsedTimeUnits": "MILLISECONDS"
},
"component": "Java Policy Agent"
}
The audit log format uses the log structure shared by the Ping Identity Platform. Learn more from Audit log format in AM’s Security guide.
Java Agent supports propagation of the transaction ID across the Ping Identity Platform,
using the HTTP header X-ForgeRock-TransactionId
. Learn more from
Trust transaction headers
in AM’s Security guide.
Configure auditing
In the AM admin UI, access the audit configuration at Realms > realm name > Applications > Agents > Java > agent name > Global > Audit. Use the following properties to configure auditing:
-
Audit Access Types: Select the type of messages to log. For example, select
LOG_ALL
to log access allowed and access denied events. -
Audit Log Location: Select whether to write the audit logs locally to the agent installation (
LOCAL
), remotely to AM (REMOTE
), or to both places (ALL
). For example, keepREMOTE
to log audit events to the AM instances. -
Enable Local Audit Log Rotation: Select whether to rotate the audit logs when they reach a maximum size.
-
Local Audit Log Rotation Size: Specify the maximum size of logs before rotation.
Include or exclude elements from the audit logs
Before you include non-safelisted audit event fields in the logs, consider the impact on security. Inclusion of some headers, query parameters, or cookies could cause credentials or tokens to be logged, and allow anyone with access to the logs to impersonate the holder of these credentials or tokens. |
To prevent logging of sensitive data for an audit event, the Common Audit Framework uses a safelist to specify which audit event fields appear in the logs. By default, only safelisted audit event fields are included in the logs.
Use Audit Log Include Paths and Audit Log Exclude Paths to include or exclude elements from the audit logs.
Audit Log Exclude Paths takes precedence over Audit Log Include Paths. If a path is specified by both properties, the corresponding audit event field is excluded.
The following example excludes Header1 but includes Header2 and Cookie1:
org.forgerock.agents.audit.exclude.path.list[0]=/access/http/request/headers/Header1Name org.forgerock.agents.audit.include.path.list[0]=/access/http/request/headers/Header2Name org.forgerock.agents.audit.include.path.list[1]=/access/http/request/cookies/Cookie1Name