Перейти к содержанию

Схема записей журнала аудита

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"
}