Передача событий безопасности в файл или Kafka#

В Blitz Identity Provider можно настроить регистрацию событий безопасности в один или несколько приемников. Настройка задается в блоке настроек blitz.prod.local.idp.audit.

Необходимо задать следующие настройки:

  • emitters – определяет список приемников записей аудита. По каждому приемнику заполняется блок настроек:

    • type – тип приемника. Возможные значения:

      • audit-store – запись производится в СУБД;

      • log – запись производится в логгер с именем AUDIT.

    • enabled – необязательная настройка – определяет, включен или нет приемник;

    • include – необязательная настройка – перечисляются типы событий безопасности (см. таблицу ниже), по которым осуществляется запись в приемник. Если настройка не указана, то пишутся все события безопасности;

    • exclude – необязательная настройка – перечисляются типы событий безопасности (см. таблицу ниже), которые не должны записываться в приемник. Если настройка не указана, то никакие события не исключаются. Если настройка указана вместе с include, то сначала список событий определяется настройкой include, а потом из него исключаются события, указанные в exclude. Рекомендуется не использовать совместно обе настройки include и exclude, а применять только что-то одно;

    • logger – необязательная настройка – указывается только для приемника с типом log. Позволяет определить имя логгера. Если настройка не задана, то запись производится в логгер с именем AUDIT;

    • name – необязательная настройка – указывается для приемников с типами log и kafka. Указывает имя приемника, так как для этих типов приемников можно настроить несколько приемников. Если настройка не задана, то используются log и kafka в качестве имен приемников;

    • bootstrapServers – обязательная настройка для приемника с типом kafka – указывается список адресов для первоначального подключения к кластеру Kafka;

    • topic – обязательная настройка для приемника с типом kafka – название топика Kafka, в который должно отправляться событие;

    • securityProtocol – необязательная настройка для приемника с типом kafka – в случае использования подключения по SASL может не указываться. При подключении по SSL в настройке должно быть указано значение SSL. Если в Kafka не настроен TLS, укажите значение SASL_PLAINTEXT;

    • sasl – необязательный блок настроек для приемника с типом kafka – задает параметры подключения при использовании SASL-аутентификации для подключения к Kafka:

      • jaasConfig – строка подключения, в которой можно использовать параметры подстановки из secureParams;

      • mechanism – значение PLAIN;

      • secureParams – блок с параметрами, которые будут зашифрованы в конфигурационном файле при запуске сервера.

    Пример блока:

    "sasl": {
        "jaasConfig": "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"alice\" password=\"${pswd}\";",
        "mechanism": "PLAIN",
        "secureParams": {
            "pswd": "Содержимое зашифруется при запуске",
        }
    }
    
    • ssl – необязательный блок настроек для приемника с типом kafka – задает параметры SSL для подключения к Kafka:

      • enabledProtocols – строки со списком включенных протоколов;

      • keyStore – блок настроек с параметрами доступа к ключевому контейнеру Blitz Identity Provider. Содержит настройки type, path, password;

      • trustedStore – блок настроек с параметрами доступа к контейнеру с доверенными сертификатами. Содержит настройки type, path, password;

      • keyPassword – необязательная настройка – пароль для доступа к ключу.

    Пример блока:

    "securityProtocol" : "SSL",
    "ssl" : {
        "enabledProtocols" : ["TLSv1.2,TLSv1.3"],
        "keyStore" : {
            "password" : "CHANGE-ME",
            "path" : "/etc/blitz-config/bip-d1app01-1.jks",
            "type" : "JKS"
        },
        "trustedStore" : {
            "password" : "CHANGE-ME",
            "path" : "/etc/blitz-config/ca.jks",
            "type" : "JKS"
        },
        "keyPassword": "CHANGE-ME"
    },
    
    • tuning – необязательный блок настроек для приемника с типом kafka – задает опциональные настройки producer для взаимодействия с Kafka. Имена параметров необходимо указывать с точкой как в документации Kafka.

    Пример блока:

    "tuning": {
        "client.id": "BlitzKafka"
    }
    
    • emitAtLeastOneOf – необязательная настройка – указывается список приемников, достаточно записи событий в любой из которых, чтобы операция считалась успешной;

    • emitToAllOf – необязательная настройка – указывается список приемников, по которым обязательно должно быть получено подтверждение успешной записи события, чтобы операция считалась успешной. Если настройки emitAtLeastOneOf и emitToAllOf не заданы, то обязательно подтверждение от всех настроенных приемников;

    • emitTimeoutInSec – необязательная настройка – определяет максимальное время отклика от приемника в ответ на запроса записи события. Если настройка не задана, то ожидание 60 секунд.

    Пример настроек записи аудита одновременно в лог, в СУБД и в Kafka:

    "audit": {
        "emitters": [
            {
                "type": "log",
                "name": "users-log",
                "enabled": true,
                "logger": "AUDIT",
                "exclude": ["admin_added", "admin_pswd_changed", "admin_removed", "admin_roles_changed",
                            "config_changed"]
            },
            {
                "type": "log",
                "name": "admins-log",
                "enabled": true,
                "logger": "AUDITADMIN",
                "include": ["admin_added", "admin_pswd_changed", "admin_removed", "admin_roles_changed",
                            "config_changed"]
            },
            {
                "type": "audit-store",
                "enabled": true
            },
            {
                "type" : "kafka",
                "enabled": true,
                "name" : "kafka",
                "include": ["login"],
                "bootstrapServers" : ["infra-kfk01:9443"],
                "topic" : "blitz_audit",
                "securityProtocol" : "SSL",
                "ssl" : {
                    "enabledProtocols" : ["TLSv1.2,TLSv1.3"],
                    "keyStore" : {
                        "password" : "CHANGE-ME",
                        "path" : "/etc/blitz-config/bip-app01.jks",
                        "type" : "JKS"
                    },
                    "trustedStore" : {
                        "password" : "CHANGE-ME",
                        "path" : "/etc/blitz-config/ca.jks",
                        "type" : "JKS"
                    }
                },
            }
        ],
        "emitAtLeastOneOf": ["users-log","admins-log","kafka"],
        "emitToAllOf": ["audit-store"],
        "emitTimeoutInSec": 30
    }
    

При регистрации аудита в лог можно настроить логгер с помощью файла конфигурации logback.xml (см. подробнее). Пример настройки логгера AUDIT в файле конфигурации logback.xml:

…
    <appender name="AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${dir.logs}/audit-${app.name}.log</file>
        <encoder>
            <pattern>%date - [%level] -[%file:%line] - %message%n%xException{20}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${dir.logs}/archive/audit-${app.name}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>90</maxHistory>
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <logger name="AUDIT" additivity="false">
        <appender-ref ref="AUDIT" />
    </logger>
…

Пример записи в логе:

2023-11-20 13:29:47,170 - [INFO] -[LoggerEventEmitterDriver.scala:37] - {"ip_st":"Tashkent","ip":"213.230.116.179","authnDone":"true","process_id":"b80ca03e-4718-44ff-9456-7d4255610eaa","ip_ctr":"Узбекистан","type":"login","object_id":"BIP-123456","protocol":"oAuth","subject_id":"BIP-123456","auth_methods":"cls:password","session_id":"f8d85ba2-a26a-447f-b82e-944b9218abb8","timestamp":1700476187069,"ch_platform_version":"\"14.1.0\"","ch_platform":"\"macOS\"","ip_ct":"Tashkent","id_store":"ldap01","ip_lng":"69.2494","ip_rad":"5","ch_ua":"\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","lp_id":"test-system","id":"6056828858453673-600312119","ip_lat":"41.3171","client_auth_method":"redirectUri"}

Набор атрибутов записи может отличаться в зависимости от типа события безопасности и особенностей процесса входа.

Возможные типы событий безопасности:

  • admin_added – добавлен администратор

  • admin_pswd_changed – изменен пароль администратора

  • admin_removed – удален администратор

  • admin_roles_changed – изменены роли администратора

  • app_password_changed – задан пароль для приложения

  • attribute_changed – добавлен, изменен или удален атрибут

  • attribute_confirmed – атрибут подтвержден

  • auth – выполнена аутентификация (при OAuth 2.0 Resource Owner Password Credentials)

  • auth_failed – ошибка аутентификации

  • auth_req – запрос на аутентификацию

  • authz_granted – выдано OAuth-разрешение

  • authz_rejected – отказано в выдаче OAuth-разрешения

  • authz_revoked – отозвано OAuth-разрешение

  • bind_ext_account – учетная запись привязана к внешней

  • config_changed – изменены настройки конфигурации

  • grant_right – назначение прав доступа

  • group_attr_changed – у группы пользователей изменен или удален атрибут

  • group_registered – группа пользователей создана

  • group_removed – группа пользователей удалена

  • hotp_attached – привязан HOTP-генератор

  • hotp_detached – отвязан HOTP-генератор

  • internal_user_deleted – учетная запись удалена

  • locked_methods_changed – изменен список заблокированных методов аутентификации

  • login – выполнен вход

  • login_failed – ошибка входа

  • login_stopped – неуспешный вход

  • logout – выполнен выход

  • logout_req – запрос на выход

  • member_added – пользователь включен в группу пользователей

  • member_removed – пользователь исключен из группы пользователей

  • need_password_change – установлен признак необходимости смены пароля

  • recovery – доступ к учетной записи восстановлен

  • recovery_fail – восстановление доступа не выполнено

  • recovery_req – выполнен запрос на восстановление доступа

  • registration – учетная запись зарегистрирована

  • registration_req – выполнен запрос на регистрацию

  • required_factor_changed – изменен режим аутентификации пользователя

  • reset_user_password – пароль установлен администратором

  • reset_user_sessions – выход с устройств (сброс сессий)

  • revoke_right – отзыв прав доступа

  • send_email_code – код подтверждения отправлен на email

  • send_push_code – код подтверждения отправлен в Push

  • send_sms_code – код подтверждения отправлен по SMS

  • token_exchange_failed – отказано в обмене маркера доступа

  • token_exchanged – произведен обмен маркера доступа

  • token_granted – выдан маркер доступа

  • totp_attached – привязан TOTP-генератор

  • totp_detached – отвязан TOTP-генератор

  • unbind_ext_account – учетная запись отвязана от внешней

  • user_locked – учетная запись заблокирована

  • user_password_changed – изменен пароль пользователя

  • user_sec_qsn_changed – изменен контрольный вопрос

  • user_sec_qsn_removed – удален контрольный вопрос

  • user_unlocked – учетная запись разблокирована

  • web_authn_reg_key – добавлен ключ безопасности

  • web_authn_revoke_key – удален ключ безопасности

Возможные параметры событий аудита

Тип события

Описание

Параметры события

access_denied

Доступ к приложению запрещен

ua_id

access_permitted

Доступ к приложению разрешен

ua_id, rule

activation

Выполнена активация учетной записи

admin_added

Добавлен администратор

roles

admin_pswd_changed

Изменен пароль администратора

admin_removed

Удален администратор

roles

admin_roles_changed

Изменены роли администратора

new_roles, old_roles

all_methods_unlocked

Снята блокировка со всех методов аутентификации

ua_id

app_password_changed

Задан пароль для приложения

attribute_changed

Добавлен, изменен или удален атрибут

attr_name, new_attr_value, old_attr_value

attribute_confirmed

Атрибут подтвержден

attr_name, value

auth

Выполнена аутентификация (при OAuth 2.0 Resource Owner Password Credentials)

auth_methods, id_store, used_login

auth_failed

Ошибка аутентификации

error, failed_method, used_login

authz_granted

Выдано OAuth-разрешение

ua_id, scopes

authz_rejected

Отказано в выдаче OAuth-разрешения

ua_id, used_login

authz_revoked

Отозвано OAuth-разрешение

ua_id, scopes

bind_ext_account

Учетная запись привязана к внешней

ext_account_id, ext_account_name, ext_account_type

config_changed

Изменены настройки конфигурации

module

duo_put

Мобильное приложение Duo Mobile привязано администратором

duoUserId

duo_remove

Мобильное приложение Duo Mobile отвязано администратором

flash_call

Запрошено подтверждение по звонку

mobile, used_login

grant_right

Назначение прав доступа

right_name, target

group_attr_changed

У группы пользователей изменен или удален атрибут

attr_name, new_attr_value, old_attr_value

group_registered

Группа пользователей создана

group_removed

Группа пользователей удалена

hotp_attached

Привязан HOTP-генератор

device_serial

hotp_detached

Отвязан HOTP-генератор

device_serial

internal_user_deleted

Учетная запись удалена

locked_methods_changed

Изменен список заблокированных методов аутентификации

old_attr_value, new_attr_value

lock_state_changed

Изменен статус блокировки по неактивности

lock_state.name, lock_state.till

login

Выполнен вход

auth_methods, authnDone, auth_roles

login_stopped

Неуспешный вход

auth_methods

logout

Выполнен выход

logout_redirect_uri

member_added

Пользователь включен в группу пользователей

group_id, group_profile

member_removed

Пользователь исключен из группы пользователей

group_id, group_profile

need_password_change

Установлен признак необходимости смены пароля

recovery

Доступ к учетной записи восстановлен

recovery_type, origin_app, recovery_contact

recovery_fail

Восстановление доступа не выполнено

error, origin_app

recovery_req

Выполнен запрос на восстановление доступа

origin_app, recovery_contact, recovery_type

registration

Учетная запись зарегистрирована

entry_point, origin_app

required_factor_changed

Изменен режим аутентификации пользователя

new_factor, old_factor

reset_user_password

Пароль установлен администратором

reset_user_sessions

Выход с устройств (сброс сессий)

ua_id

revoke_right

Отзыв прав доступа

right_name, target

send_email_code

Код подтверждения отправлен на email

email

send_push_code

Код подтверждения отправлен в Push

mobile

send_push_inquiry

Запрос на подтверждения входа отправлен Push-уведомлением

inquiryId

send_sms_code

Код подтверждения отправлен по SMS

mobile

session_closed

Завершена сессия

couse

token_exchange_failed

Отказано в обмене маркера доступа

audience, resource, scopes

token_exchanged

Произведен обмен маркера доступа

audience, resource, scopes

token_granted

Выдан маркер доступа

scopes

totp_attached

Привязан TOTP-генератор

device_serial

totp_detached

Отвязан TOTP-генератор

device_serial

unbind_ext_account

Учетная запись отвязана от внешней

ext_account_id, ext_account_name, ext_account_type

user_locked

Учетная запись заблокирована

user_password_changed

Изменен пароль пользователя

user_props_changed

Изменены свойства пользователя

user_sec_qsn_changed

Изменен контрольный вопрос

user_sec_qsn_removed

Удален контрольный вопрос

user_unlocked

Учетная запись разблокирована

web_authn_reg_key

Добавлен ключ безопасности

wa_key_id, wa_key_name

web_authn_revoke_key

Удален ключ безопасности

wa_key_id, wa_key_name

Описание параметров событий

Параметр

Описание

Тип значения

Описание значения

alt_pswd_cause

Причина, по которой пользователя просили сменить пароль

Строка

Возможные значения: password_expired - пароль просрочен; password_reset - пароль нужно сменить при первом входе; password_policy_violated - пароль не соответствует парольной политике

attr_name

Имя атрибута учетной записи

Строка

Содержит имя установленного/удаленного/измененного атрибута

audience

Список получателей

Строка

Содержит список получателей маркера

auth_methods

Пройденные методы аутентификации

Строка

Содержит список пройденных пользователем методов аутентификации (возможные значения указаны после таблицы)

auth_roles

Роль пользователя

Строка

Роль пользователя

authDone

Проводилась ли аутентификация при этом входе

Булево значение

Признак, позволяющий узнать, проводилась ли аутентификация при данном входе. У первичных входов этот признак будет установлен true, у SSO-входов без дополнительной аутентификации – false

bf_delay

Включалась ли задержка входа

Булево значение

Признак, позволяющий узнать, использовалась ли при данном входе задержка входа (в результате действия механизма защиты от подбора пароля)

captcha_passed

Признак, что при входе спрашивалась CAPTCHA

Булево значение

Признак того, что при входе спрашивалась CAPTCHA

couse

Причина завершения сессии

Строка

Причина завершения сессии

duoUserId

Идентификатор пользователя в Duo Mobile

Строка

Идентификатор пользователя в Duo Mobile

email

Значение электронной почты

Строка

Значение электронной почты для отправки кода

entry_point

Тип интерфейса, использованного для регистрации пользователя

Строка

WEB – при регистрации из веб-приложения Blitz Identity Provider; REST – при регистрации через REST-сервисы Blitz Identity Provider; SOCIAL– при регистрации через внешнего поставщика

error

Ошибка аутентификации

Строка

Содержит причину неуспешной аутентификации

ext_account_id

Идентификатор внешней учетной записи

Строка

Указан идентификатор пользователя во внешней системе входа (соцсети, ЕСИА или Сбербанк ID)

ext_account_name

Имя внешнего поставщика идентификации

Строка

Указано имя внешнего поставщика идентификации

ext_acount_type

Тип внешнего поставщика идентификации

Строка

Указан тип внешнего поставщика идентификации

failed_method

Название непройденного метода аутентификации

Строка

Указывает, какой метод аутентификации не смог пройти пользователь

group_id

Идентификатор группы пользователей

Строка

Заполняется в результате операций изменения членства пользователей в группах пользователей

group_profile

Идентификатор профиля использования групп пользователей

Строка

Заполняется в результате операций изменения членства пользователей в группах пользователей

id_store

Хранилище учетной записи

Строка

Хранилище учетных записей, в котором был найден пользователь в момент успешной аутентификации

inquiryId

Идентификатор запроса

Строка

Идентификатор запроса

lock_state.name

Статус блокировки о неактивности

Строка

Значение untouchable означает, что пользователь не может быть заблокирован

lock_state.till

Время действия статуса блокировки по неактивности

Строка

Пользователь не будет заблокирован до наступления времени, указанного в данном параметре. Далее будет происходить блокировка на общих основаниях

logout_redirect_uri

URI для редиректа

Строка

Содержит URI, на который система должна перенаправить пользователя после успешного выхода из системы

mobile

Значение мобильного телефона

Строка

Значение мобильного телефона для отправки sms/push/flash_call

module

Блок конфигурационного файла

Строка

Блок конфигурационного файла, который был изменен

new_attr_value

Новое значение атрибута

Строка

Содержит новое значение установленного/измененного атрибута.

new_factor

Новое значение признака, указывающего на необходимость проверки второго фактора аутентификации

Число

0 – в соответствии с настройками системы; 1 – не требуется проверка второго фактора аутентификации; 2 – требуется проверка второго фактора аутентификации

new_roles

Роли учетной записи администратора

Строка

Содержит список ролей, добавленных учетной записи администратора в процессе ее изменения

old_attr_value

Прежнее значение атрибута

Строка

Содержит прежнее значение удаленного/измененного атрибута

old_factor

Прежнее значение признака, указывающего на необходимость проверки второго фактора аутентификации

Число

0 – в соответствии с настройками системы; 1 – не требуется проверка второго фактора аутентификации; 2 – требуется проверка второго фактора аутентификации

old_roles

Роли учетной записи администратора

Строка

Содержит список ролей, отозванных у учетной записи администратора в процессе ее изменения

origin_app

Идентификатор приложения, инициировавшего регистрацию пользователя / восстановление пароля

Строка

Идентификатор приложения (entity_id/client_id)

pswd_changed

Признак, что рекомендовалась смена пароля

Булево значение

Признак того, что рекомендовалась смена пароля

pswd_tmp_locked

Признак, что была временная блокировка

Булево значение

Признак того, что была временная блокировка

recovery_contact

Указанный при восстановлении контакт

Строка

Адрес email или номер мобильного телефона, использованного при восстановлении пароля

recovery_type

Тип восстановления пароля

Строка

Возможные значения – email или mobile

resource

URL, к которому предоставляется доступ

Строка

URL, к которому предоставляется доступ

right_name

Название полномочия

Строка

Идентификатор назначенного/отозванного полномочия

roles

Роли учетной записи администратора

Строка

Содержит список ролей учетной записи администратора, заданных при создании учетной записи (для события с типом admin_added, или имеющихся у учетной записи на момент ее удаления для события с типом admin_removed)

rule

Правило сопоставления

Строка

Заполняется из правила, заданного в контроле доступа приложения, в который осуществляется вход

scopes

Список разрешений

Строка

Содержит список разрешений (OAuth scopes), которые выдал/отозвал пользователь

tags

Метка назначенного/отозванного полномочия

Массив строк

Тэг

target

Идентификатор группы, приложения, пользователя

Строка

Идентификатор группы, приложения, пользователя, на что дается право

tried_old_pswd

Признак того, что была попытка входа с паролем из сохраненной истории паролей (предыдущим паролем)

Булево значение

Признак того, что была попытка входа с паролем из сохраненной истории паролей (предыдущим паролем)

ua_fp

Идентификатор отпечатка устройства доступа

Строка

Идентификатор отпечатка устройства доступа пользователя

ua_id

Идентификатор устройства пользователя

Строка

Идентификатор устройства пользователя

used_login

Логин, использованный при входе

Строка

Логин, использованный при входе

value

Значение атрибута

Строка

Заполняется при подтверждении атрибута

wa_key_id

Идентификатор ключа безопасности

Строка

Идентификатор ключа безопасности

wa_key_name

Имя ключа безопасности

Строка

Имя ключа безопасности

Примечание

Возможные значения auth_methods:

  • password – парольная аутентификация

  • spnego – вход с помощью сеанса ОС

  • x.509 – вход с помощью средства электронной подписи

  • qr – вход по QR-коду

  • css – автоматический вход по результатам регистрации пользователя или восстановления пароля

  • sms – вход по коду SMS (может быть как в качестве первого, так и в качестве второго фактора аутентификации)

  • hotp – второй фактор аутентификации с помощью аппаратного брелока

  • totp – второй фактор аутентификации с помощью программного TOTP-генератора кодов подтверждения

  • externalIdps:<type>:<name> – вход с помощью внешнего поставщика идентификации (соцсети или ЕСИА)

  • userApp – вторичная аутентификация в мобильном приложении

  • outside_name – внешний метод аутентификации с именем name

Наличие перед методом префикса cls: означает, что вход был выполнен с помощью долгосрочной сессии, а ранее при первичном входе использовались те методы входа, что перечислены после cls: