Схема записей журнала аудита
Stronghold логирует записи аудита как отдельные JSON-объекты, разделённые переносами строк. Записи журнала аудита включают атрибуты, общие для всех API-эндпоинтов, а также специфичные для эндпоинта атрибуты запроса и ответа.
Записи журнала аудита представляют API-запросы, полученные Stronghold, и API-ответы, отправленные Stronghold. Вы можете сопоставить записи ответов с соответствующими записями запросов по полю ID объекта request (.request.id), включённому в обе записи.
| Атрибут | Тип | Описание |
|---|---|---|
auth |
object |
Объект authentication, описывающий аутентифицированного субъекта, выполняющего API-вызов. |
error |
string |
Строка ошибки, сгенерированная запросом или возвращённая в ответе. Пропускается для успешных транзакций. |
forwarded_from |
string |
Хост и порт узла производительности в режиме ожидания, перенаправляющего запрос. Пропускается для запросов, которые не были перенаправлены. |
request |
object |
Объект request, описывающий детали запроса. |
response |
object |
Объект response, описывающий детали ответа. Пропускается для записей запросов. |
time |
string |
Дата и время API-запроса/ответа в формате ISO 8601. |
type |
string |
Тип записи журнала аудита. Одно из значений: request или 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"
}
Объект аутентификации
Stronghold пропускает нерелевантные атрибуты объекта authentication в записи аудита. Например, accessor и client_token нерелевантны для неаутентифицированных запросов, а metadata нерелевантен, если токен аутентификации не содержит метаданных.
| Атрибут | Тип | Описание |
|---|---|---|
accessor |
string |
Accessor токена Stronghold, который выполнил запрос. Это значение хешируется по умолчанию; в примере показан нехешированный accessor токена. См. token accessors для получения дополнительной информации. |
client_token |
string |
Токен Stronghold, который выполнил запрос, в хешированном виде. |
display_name |
string |
Имя, связанное с токеном Stronghold, который выполнил запрос. Это нечувствительное значение, которое может помочь идентифицировать токены. Если отображаемое имя не установлено, будет показано "token". |
token_type |
string |
Является ли токен Stronghold токеном типа service, batch или periodic. См. token types. |
token_issue_time |
string |
Дата и время выдачи токена Stronghold в формате ISO 8601. |
token_ttl |
integer |
Срок действия токена Stronghold в секундах на момент первой выдачи токена, относительно token_issue_time. Обратите внимание, что это значение не обновляется, когда срок жизни токена изменяется после первоначальной выдачи. |
metadata |
object |
Метаданные, связанные с токеном Stronghold. |
num_uses |
integer |
Когда API-запрос приводит к выдаче токена с ограниченным количеством использований, количество использований этого токена. |
remaining_uses |
integer |
Если токен Stronghold имеет ограничение на количество использований, количество оставшихся использований до текущего запроса. |
entity_created |
boolean |
Привел ли запрос к созданию сущности, т.е. авторизованный субъект впервые входит в Stronghold. Пропускается, если false. |
entity_id |
string |
Если токен Stronghold связан с сущностью, ID этой сущности. |
policies |
list(string) |
Список имён ACL-политик, связанных с токеном Stronghold или соответствующей сущностью. |
identity_policies |
list(string) |
Если токен Stronghold связан с сущностью, список имён ACL-политик, связанных (напрямую или через членство в группе) с этой сущностью. |
token_policies |
list(string) |
Список имён ACL-политик, связанных напрямую с токеном Stronghold. |
no_default_policy |
boolean |
Не связана ли с токеном Stronghold ACL-политика "default" Stronghold. Пропускается, если false. |
external_namespace_ policies |
object |
Если токен Stronghold связан с сущностью, и эта сущность наследует ACL-политики из пространства имён, отличного от пространства имён, в котором существует сущность, JSON-объект, содержащий булев атрибут allowed и granting_policies, список этих унаследованных ACL-политик. См. структуру JSON ниже для получения дополнительной информации о granting_policies. |
policy_results |
object |
JSON-объект, содержащий булев атрибут allowed и granting_policies, список ACL-политик, связанных с токеном Stronghold или соответствующей сущностью, которые привели к разрешению запроса. См. структуру JSON ниже для получения дополнительной информации о 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": ""
}
Объект запроса
Следующее определение объекта запроса включает примеры данных с простыми типами (string, bool, int) и используется в других JSON-примерах, которые включают объект <request>.
| Атрибут | Тип | Описание |
|---|---|---|
id |
string |
Случайный ID, сгенерированный Stronghold для уникальной идентификации API-запроса. |
operation |
string |
Является ли запрос операцией create, read, update, delete или list. |
namespace |
object |
JSON-объект с уникальным id пространства имён и его path. |
path |
string |
API-путь, который получил запрос. |
request_uri |
string |
Исходный путь запроса из HTTP-запроса, если он отличается от path (например, когда пространство имён Stronghold указано как HTTP-заголовок). |
mount_accessor |
string |
Уникальный идентификатор точки монтирования Stronghold (движок секретов или бэкенд аутентификации), который получил API-запрос. |
mount_type |
string |
Тип точки монтирования Stronghold, которая получила API-запрос. |
mount_running_version |
string |
Строка версии для точки монтирования Stronghold, которая получила API-запрос. |
mount_running_sha256 |
string |
Если точка монтирования, которая получила API-запрос, является внешним плагином, SHA-256 хеш запущенной версии плагина. |
mount_is_external_ plugin |
boolean |
Является ли точка монтирования, которая получила API-запрос, внешним плагином. |
remote_address |
string |
IP-адрес клиента, выполняющего запрос, как видит Stronghold. Обратите внимание, что балансировщики нагрузки, прокси и обратные прокси могут маскировать истинный IP-адрес клиента. |
remote_port |
integer |
Номер порта, используемый клиентом, выполняющим запрос, как видит Stronghold. |
headers |
object |
JSON-объект, содержащий заголовки запроса, настроенные для логирования. |
policy_override |
boolean |
Запросил ли клиент переопределение политики Sentinel. |
client_id |
string |
ID клиента Stronghold, выполняющего запрос. |
client_token |
string |
Токен Stronghold, который выполнил запрос, в хешированном виде. |
client_token_accessor |
string |
Accessor токена Stronghold, который выполнил запрос. Это значение хешируется по умолчанию; в примере показан нехешированный accessor токена. См. token accessors для получения дополнительной информации. |
client_certificate_ serial_number |
string |
Если соединение клиента с Stronghold является взаимно аутентифицированным, серийный номер TLS-сертификата клиента. |
wrap_ttl |
integer |
Если клиент запросил обёртывание ответа, количество секунд, в течение которых обёрнутый ответ будет доступен. |
data |
object |
JSON-объект, содержащий полезную нагрузку запроса. Это зависит от вызванного API-эндпоинта. |
replication_cluster |
string |
Если запрос был перенаправлен из вторичного кластера Performance Replication, имя вторичного кластера. |
{
"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
}
Объект ответа
Следующее определение объекта ответа включает примеры данных с простыми типами (string, bool, int) и используется в других JSON-примерах, которые включают объект <response>.
| Атрибут | Тип | Описание |
|---|---|---|
auth |
object |
Если запрос приводит к созданию токена, объект authentication с информацией о токене. См. authentication выше. |
headers |
object |
Набор HTTP-заголовков ответа, отправленных плагином, который обработал API-запрос. |
redirect |
string |
Для запросов, отправленных в бэкенды аутентификации, URL, на который бэкенд аутентификации перенаправил пользователя для дальнейшей аутентификации. |
warnings |
list(string) |
Если API вернул одно или несколько предупреждений, список сообщений предупреждений. |
data |
object |
JSON-объект, содержащий полезную нагрузку ответа. Это зависит от вызванного API-эндпоинта. |
secret |
object |
Если API вернул арендованный секрет, JSON-объект с одним атрибутом lease_id, который идентифицирует этот арендованный секрет. |
wrap_info |
object |
Если API вернул обёрнутый секрет, JSON-объект, содержащий свойства токена обёртывания. См. ниже атрибуты в JSON-объекте. |
mount_class |
string |
Тип точки монтирования API, auth или secret. |
mount_accessor |
string |
Уникальный идентификатор точки монтирования Stronghold (движок секретов или бэкенд аутентификации), который ответил на API-запрос. |
mount_type |
string |
Тип точки монтирования Stronghold, которая ответила на API-запрос. |
mount_running_plugin_version |
string |
Строка версии для точки монтирования Stronghold, которая ответила на API-запрос. |
mount_running_sha256 |
string |
Если точка монтирования, которая получила API-запрос, является внешним плагином, SHA-256 хеш запущенной версии плагина. |
mount_is_external_plugin |
boolean |
Является ли точка монтирования, которая получила API-запрос, внешним плагином. |
{
"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": [
""
]
}
Полные примеры записей
Запись аудита запроса
{
"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"
}