Audit log entry schema
Stronghold logs audit entries as individual JSON objects separated by line breaks. Audit log entries include attributes that are common across all API endpoints and endpoint-specific request and response attributes.
Audit log entries represent API requests received by Stronghold and API response sent by Stronghold. You can match response entries to the corresponding request entry with the ID field of the request object (.request.id) included in both entries.
| Attribute | Type | Description |
|---|---|---|
auth |
object |
authentication object describing the authenticated principal making the API call. |
error |
string |
Error string generated by the request or returned in the response. Omitted for successful transactions. |
forwarded_from |
string |
Host and port of the performance standby node forwarding the request. Omitted for requests not forwarded. |
request |
object |
request object describing the request details. |
response |
object |
response object describing response details. Omitted for request entries. |
time |
string |
Date and time of the API request/response in ISO 8601 format. |
type |
string |
Type of the audit log entry. One of request or response. |
{
"auth": <authentication object>,
"error": "error converting input {\"name\":\"John\"} for field \"data\": '' expected a map, got 'string'",
"forwarded_from": "vault-1.prod.corp.com:443",
"request": <request object>,
"time": "2025-06-05T16:10:22.292517Z",
"type": "request"
}
{
"auth": <original authentication object>,
"error": "1 error occurred:\n\t* invalid request\n\n",
"forwarded_from": "vault-1.prod.corp.com:443",
"request": <original request object>,
"response": <response object>,
"time": "2025-06-05T16:10:22.292639Z",
"type": "response"
}
Authentication object
Stronghold omits irrelevant authentication object attributes from the audit entry. For example, accessor and client_token are irrelevant for unauthenticated requests and metadata is irrelevant if the authentication token lacks metadata.
| Attribute | Type | Description |
|---|---|---|
accessor |
string |
Accessor of the Stronghold token that performed the request. This value is hashed by default; the example shows a non-hashed token accessor. Refer to token accessors for more information. |
client_token |
string |
Stronghold token that performed the request, in hashed form. |
display_name |
string |
Name associated with the Stronghold token that performed the request. This is a non-sensitive value that can help identify tokens. If a display name is not set, "token" will be shown. |
token_type |
string |
Whether the Stronghold token is a service, batch, or periodic token. Refer to token types. |
token_issue_time |
string |
Date and time when the Stronghold token was issued, in ISO 8601 format. |
token_ttl |
integer |
Validity period of the Stronghold token, in seconds and as of when the token was first issued, relative to token_issue_time. Note that this value is not updated when the token's lifetime is changed subsequent to initial issuance. |
metadata |
object |
Metadata associated with the Stronghold token. |
num_uses |
integer |
When the API request results in a token being issued, which token has a limited number of uses, the number of uses on that token. |
remaining_uses |
integer |
If the Stronghold token has a limit on the number of uses, the number of uses remaining prior to the current request. |
entity_created |
boolean |
Whether the request resulted in an entity being created, i.e. an authorized principal logs into Stronghold for the first time. Omitted when false. |
entity_id |
string |
If the Stronghold token is associated with an entity, the ID of that entity. |
policies |
list(string) |
List of the names of the ACL policies associated with either the Stronghold token or the corresponding entity. |
identity_policies |
list(string) |
If the Stronghold token is associated with an entity, a list of the names of the ACL policies associated (directly or via group membership) with that entity. |
token_policies |
list(string) |
A list of the names of the ACL policies associated directly with the Stronghold token. |
no_default_policy |
boolean |
Whether the Stronghold token does not have Stronghold's "default" ACL policy associated with it. Omitted when false. |
external_namespace_ policies |
object |
If the Stronghold token is associated with an entity, and that entity inherits ACL policies from a namespace other than the namespace in which the entity exists, a JSON object containing a boolean attribute allowed and granting_policies, a list of those inherited ACL policies. Refer to the JSON structure below for more information about granting_policies. |
policy_results |
object |
JSON object containing a boolean attribute allowed and granting_policies, a list of ACL policies associated with either the Stronghold token or the corresponding entity that resulted in the request being allowed. Refer to the JSON structure below for more information about granting_policies. |
{
"accessor": "",
"client_token": "",
"display_name": "",
"entity_created": "",
"entity_id": "",
"external_namespace_policies": {
"allowed": true,
"granting_policies": [
{
"name": "",
"namespace_id": "",
"namespace_path": "",
"type": ""
}
]
},
"identity_policies": [""],
"metadata": {},
"no_default_policy": false,
"num_uses": 10,
"policies": [""],
"policy_results": {
"allowed": true,
"granting_policies": [
{
"name": "",
"namespace_id": "",
"namespace_path": "",
"type": ""
}
]
},
"remaining_uses": 5,
"token_policies": [""],
"token_issue_time": "",
"token_ttl": 3600,
"token_type": ""
}
Request object ((#request))
The following request object definition includes example data with simple types (string, bool, int) and used in other JSON examples that include a <request> object.
| Attribute | Type | Description |
|---|---|---|
id |
string |
Random ID generated by Stronghold to uniquely identify the API request. |
operation |
string |
Whether the request is a create, read, update, delete, or list operation. |
namespace |
object |
JSON object with the namespace's unique id and its path. |
path |
string |
API path that received the request. |
request_uri |
string |
The original request path from the HTTP request, if it differs from path (e.g., when the Stronghold namespace is specified as an HTTP header). |
mount_accessor |
string |
Unique identifier of the Stronghold mount (secret engine or authentication backend) that received the API request. |
mount_type |
string |
Type of Stronghold mount that received the API request. |
mount_running_version |
string |
Version string for the Stronghold mount that received the API request. |
mount_running_sha256 |
string |
If the mount that received the API request is an external plugin, the SHA-256 hash of the plugin's running version. |
mount_is_external_ plugin |
boolean |
Whether the mount that received the API request is an external plugin. |
remote_address |
string |
IP address of the client making the request, as seen by Stronghold. Note that load balancers, proxies, and reverse proxies may all mask the true client's IP address. |
remote_port |
integer |
Port number used by the client making the request, as seen by Stronghold. |
headers |
object |
JSON object containing request headers configured to be logged. |
policy_override |
boolean |
Whether the client requested an override of a Sentinel policy. |
client_id |
string |
ID of the Stronghold client making the request. |
client_token |
string |
Stronghold token that performed the request, in hashed form. |
client_token_accessor |
string |
Accessor of the Stronghold token that performed the request. This value is hashed by default; the example shows a non-hashed token accessor. Refer to token accessors for more information. |
client_certificate_ serial_number |
string |
If the client's connection to Stronghold is mutually authenticated, the serial number of the client's TLS certificate. |
wrap_ttl |
integer |
If the client requested the response to be wrapped, the number of seconds for which the wrapped response will be available. |
data |
object |
JSON object containing the request's payload. This is dependent on the API endpoint called. |
replication_cluster |
string |
If the request was forwarded from a Performance Replication secondary cluster, the name of the secondary cluster. |
{
"client_certificate_serial_number": "",
"client_id": "",
"client_token": "",
"client_token_accessor": "",
"data": {},
"id": "",
"headers": {},
"mount_accessor": "",
"mount_class": "",
"mount_point": "",
"mount_type": "",
"mount_running_version": "",
"mount_running_sha256": "",
"mount_is_external_plugin": "",
"namespace": {
"id": "",
"path": ""
},
"operation": "",
"path": "",
"policy_override": true,
"remote_address": "",
"remote_port": 1234,
"replication_cluster": "",
"request_uri": "",
"wrap_ttl": 60
}
Response object ((#response))
The following response object definition includes example data with simple types (string, bool, int) and used in other JSON examples that include a <response> object.
| Attribute | Type | Description |
|---|---|---|
auth |
object |
If the request results in a token being created, an authentication object with the token information. See authentication above. |
headers |
object |
Set of HTTP response headers sent by the plugin that handled the API request. |
redirect |
string |
For requests sent to authentication backends, the URL to which the authentication backend redirected the user for further authentication. |
warnings |
list(string) |
If the API returned one or more warnings, a list of the warning messages. |
data |
object |
JSON object containing the response payload. This is dependent on the API endpoint called. |
secret |
object |
If the API returned a leased secret, a JSON object with one attribute, lease_id, that identifies that leased secret. |
wrap_info |
object |
If the API returned a response-wrapped secret, a JSON object containing the properties of the wrapping token. See below for the attributes in the JSON object. |
mount_class |
string |
Type of API mount, auth or secret. |
mount_accessor |
string |
Unique identifier of the Stronghold mount (secret engine or authentication backend) that responded to the API request. |
mount_type |
string |
Type of Stronghold mount that responded to the API request. |
mount_running_plugin_version |
string |
Version string for the Stronghold mount that responded to the API request. |
mount_running_sha256 |
string |
If the mount that received the API request is an external plugin, the SHA-256 hash of the plugin's running version. |
mount_is_external_plugin |
boolean |
Whether the mount that received the API request is an external plugin. |
{
"auth": <auth>,
"data": {},
"headers": {},
"mount_accessor": "",
"mount_class": "",
"mount_is_external_plugin": false,
"mount_point": "",
"mount_running_sha256": "",
"mount_running_plugin_version": "",
"mount_type": "",
"redirect": "",
"secret": {
"lease_id": ""
},
"wrap_info": {
"accessor": "",
"creation_path": "",
"creation_time": "",
"token": "",
"ttl": 60,
"wrapped_accessor": ""
},
"warnings": [
""
]
}
Full entry examples
{
"auth": {
"accessor": "hmac-sha256:3348fe9b24b078f97d747363dda2d55bb0445e90b512e9f68f48d289fed798b3",
"client_token": "hmac-sha256:c39c69748f0894cb4cd0333c779e72343ba45af287649d0fbcc37e9b079abe5d",
"display_name": "userpass-alice",
"entity_id": "62ff123b-7609-1ed9-5707-ea621da72de7",
"metadata": { "username": "alice" },
"policies": ["default"],
"policy_results": {
"allowed": true,
"granting_policies": [
{ "type": "" },
{ "name": "default", "namespace_id": "root", "type": "acl" }
]
},
"token_policies": ["default"],
"token_issue_time": "2025-06-04T16:01:31-04:00",
"token_ttl": 2764800,
"token_type": "service"
},
"request": {
"client_id": "62ff123b-7609-1ed9-5707-ea621da72de7",
"client_token": "hmac-sha256:3431e8c2ce0e5f5e179a857fcf9d948afd83363de9f64a5e956851262e1285e0",
"client_token_accessor": "hmac-sha256:3348fe9b24b078f97d747363dda2d55bb0445e90b512e9f68f48d289fed798b3",
"headers": { "user-agent": ["Go-http-client/1.1"] },
"id": "79cc9b26-488f-eabf-2a97-303ed3bef0d6",
"mount_class": "auth",
"mount_point": "auth/token/",
"mount_running_version": "v1.19.1+builtin.vault",
"mount_type": "token",
"namespace": { "id": "root" },
"operation": "read",
"path": "auth/token/lookup-self",
"remote_address": "127.0.0.1",
"remote_port": 64199
},
"time": "2025-06-04T20:02:46.117181Z",
"type": "request"
}
{
"auth": {
"accessor": "hmac-sha256:3348fe9b24b078f97d747363dda2d55bb0445e90b512e9f68f48d289fed798b3",
"client_token": "hmac-sha256:c39c69748f0894cb4cd0333c779e72343ba45af287649d0fbcc37e9b079abe5d",
"display_name": "userpass-alice",
"entity_id": "62ff123b-7609-1ed9-5707-ea621da72de7",
"metadata": { "username": "alice" },
"policies": ["default"],
"policy_results": {
"allowed": true,
"granting_policies": [
{ "type": "" },
{ "name": "default", "namespace_id": "root", "type": "acl" }
]
},
"token_policies": ["default"],
"token_issue_time": "2025-06-04T16:01:31-04:00",
"token_ttl": 2764800,
"token_type": "service"
},
"request": {
"client_id": "62ff123b-7609-1ed9-5707-ea621da72de7",
"client_token": "hmac-sha256:3431e8c2ce0e5f5e179a857fcf9d948afd83363de9f64a5e956851262e1285e0",
"client_token_accessor": "hmac-sha256:3348fe9b24b078f97d747363dda2d55bb0445e90b512e9f68f48d289fed798b3",
"headers": { "user-agent": ["Go-http-client/1.1"] },
"id": "79cc9b26-488f-eabf-2a97-303ed3bef0d6",
"mount_accessor": "auth_token_d43d387d",
"mount_class": "auth",
"mount_point": "auth/token/",
"mount_running_version": "v1.19.1+builtin.vault",
"mount_type": "token",
"namespace": { "id": "root" },
"operation": "read",
"path": "auth/token/lookup-self",
"remote_address": "127.0.0.1",
"remote_port": 64199
},
"response": {
"data": {
"accessor": "hmac-sha256:3348fe9b24b078f97d747363dda2d55bb0445e90b512e9f68f48d289fed798b3",
"creation_time": 1749067291,
"creation_ttl": 2764800,
"display_name": "hmac-sha256:e9fb3affb6ae22b7f747e1a60bdda5b57809c9e64ae6f39ebac24e371e6b9d89",
"entity_id": "hmac-sha256:d2458e3011b3567a0070f22bcdd5e513aeb3473457922e1866f01463ccce2b11",
"expire_time": "2025-07-06T16:01:31.771304-04:00",
"explicit_max_ttl": 0,
"id": "hmac-sha256:c39c69748f0894cb4cd0333c779e72343ba45af287649d0fbcc37e9b079abe5d",
"issue_time": "2025-06-04T16:01:31.771306-04:00",
"meta": {
"username": "hmac-sha256:b93081f3689ff25929e88d5c323631ccf7d6145cd9f33c0c5129a7a340248b9a"
},
"num_uses": 0,
"orphan": true,
"path": "hmac-sha256:82f79af6be9e1d33d6821a8cfcfcba3196e5ec68512c1f5ed4c919acd8443dd6",
"policies": [
"hmac-sha256:1b1a37ccd3a6a78da781140396f04eb50e3460504492d2da75b446d775d3325b"
],
"renewable": true,
"ttl": 2764725,
"type": "hmac-sha256:b835fe7ff7616f2023c77f6dbddc7afd83ef5c6644aba61c574c378dda710809"
},
"mount_accessor": "auth_token_d43d387d",
"mount_class": "auth",
"mount_point": "auth/token/",
"mount_running_plugin_version": "v1.19.1+builtin.vault",
"mount_type": "token"
},
"time": "2025-06-04T20:02:46.117567Z",
"type": "response"
}