Аудит безопасности — это детальный анализ вашей инфраструктуры, направленный на выявление потенциальных уязвимостей и небезопасных практик. Code помогает упростить процесс аудита с помощью событий аудита, которые позволяют отслеживать широкий спектр действий, происходящих в системе.

Назначение и область применения

Механизм регистрации событий безопасности (события аудита) используется для:

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

Область применения — все уровни платформы Code, от отдельных проектов и групп до конфигурации инстанса. События фиксируются независимо от прав пользователя (при условии, что у него есть доступ к совершению действия) и сохраняются централизованно.

Технические меры регистрации событий

Система аудита реализует следующие меры:

  • Централизованная регистрация событий — все события фиксируются в едином журнале аудита.
  • Непрерывный сбор данных — событие фиксируется в реальном времени по ходу выполнения бизнес-операции. Например, при входе в систему, смене адреса электронной почты пользователя или включении возможности выполнять force push в защищённой ветке.
  • Защита целостности — журнал событий доступен только в режиме чтения для администраторов. Удалить или изменить события в журнале невозможно.
  • Доступ через UI и API — просмотр и фильтрация событий возможны как в интерфейсе администратора, так и через специализированный API.

Сценарии использования

События аудита безопасности позволяют отследить:

  • кто и когда изменил уровень доступа пользователя в проекте Code;
  • случаи создания и удаления пользователей;
  • признаки подозрительной активности — например, массовая смена адресов электронной почты сотрудников или удаление репозиториев;
  • случаи изменения переменных окружения в CI/CD;
  • случаи изменения уровня видимости проектов и групп.

События аудита помогают:

  • оценивать риски и усиливать меры безопасности;
  • своевременно реагировать на инциденты.

Доступ к событиям аудита

Доступ через UI

Чтобы получить доступ к событиям аудита, войдите в режим администратора и в боковом меню выберите пункт «Аудит событий». Откроется таблица событий аудита безопасности.

Описание столбцов в таблице:

  • Автор — имя пользователя, запустившего событие.
  • Событие — системное сообщение с информацией о событии.
  • Объект — область, к которой относится событие (название инстанса, группы, проекта, имя пользователя).
  • Цель — сущность, которая была изменена (название проекта, защищённой ветки, CI-переменной, имя пользователя, токена, и т. д.).
  • Время события — дата и время наступления события.

Таблица событий аудита безопасности

Доступ через API

Deckhouse Code предоставляет следующий API-метод для получения списка событий аудита:

POST /api/v4/admin/audit_events/search

Допускается фильтрация по датам, текстовому поиску и типам сущностей.

Диапазон дат должен находиться в пределах одного календарного месяца. Если значения created_after и created_before относятся к разным месяцам, параметр created_before будет автоматически приведён к последнему дню месяца, в который входит created_after.

Параметры запроса

ПараметрТипОбязательныйОписание
created_afterСтрокаНетНачальная дата (включительно) в формате ISO8601. По умолчанию — начало текущего месяца
created_beforeСтрокаНетКонечная дата (включительно) в формате ISO8601. По умолчанию — конец текущего месяца
qСтрокаНетПолнотекстовый поиск по сообщению события
sortСтрокаНетСортировка по дате создания. Возможные значения: created_asc, created_desc (по умолчанию)
entity_typesМассив строкНетСписок типов сущностей для фильтрации: User, Project, Group, Gitlab::Audit::InstanceScope

Пример запроса:

curl --request POST "https://example.com/api/v4/admin/audit_events/search" \
     --header "PRIVATE-TOKEN: <ACCESS_TOKEN>" \
     --header "Content-Type: application/json" \
     --data '{
       "created_after": "2025-08-01",
       "created_before": "2025-08-31",
       "q": "repository",
       "sort": "created_desc",
       "entity_types": ["Project"]
     }'

Содержимое событий аудита

Каждое событие аудита содержит дату, время, данные об IP-адресе и учётной записи пользователя, а также всю необходимую информацию об области изменения, измененном объекте и о том, что именно было изменено.

Перечень событий аудита

В таблице приведены примеры системных сообщений. В production-среде события аудита содержат полную информацию в самом сообщении или в дополнительном JSON-поле с данными.

НазваниеСистемное сообщениеНазначениеОтслеживаемые атрибуты
2fa_login_failedUser 2fa login failedОбнаружена неудачная попытка входа с двухфакторной аутентификацией.
access_approvedUser access was approvedПользователю одобрен запрос на доступ в инстанс.
access_token_createdProject/Group access token createdСоздан токен доступа для проекта или группы.
access_token_revokedProject/Group access token revokedТокен доступа был отозван.
added_gpg_keyAdded new gpg key to userПользователь добавил новый GPG-ключ.
added_ssh_keyUser added new ssh keyПользователь добавил новый SSH-ключ.
application_createdApplication was createdСоздано приложение (OAuth или интеграция).
application_deletedApplication deletedПриложение было удалено.
application_secret_renewApplication secret renewОбновлён секрет приложения.
application_updatedApplication UpdatedИзменены параметры приложения.
ci_cd_job_token_removed_from_allowlistDisallow group to use job tokenВ проекте ограничено использование CI/CD Job Token определённой группой.
ci_cd_job_token_added_to_allowlistAllow group to use job tokenВ проекте разрешено использование CI/CD Job Token определённой группой.
ci_variable_createdCi variable #{key} createdСоздана новая переменная CI/CD.
ci_variable_deletedCi variable #{key} deletedУдалена переменная CI/CD.
ci_variable_updatedCi variable updated (Value, Protected)Изменено значение или параметры защиты переменной CI/CD.
deploy_key_createdDeploy key addedСоздан новый ключ развёртывания (deploy key) для проекта/инстанса.
deploy_key_deletedDeploy key was deletedУдалён ключ развертывания.
deploy_key_disabledDeploy key disabledКлюч развёртывания отключён.
deploy_key_enabledDeploy key enabledКлюч развёртывания включён.
deploy_token_createdDeploy token createdСоздан токен развёртывания (deploy token) для доступа к данным.
deploy_token_deletedDeploy token deletedУдалён токен развёртывания.
deploy_token_revokedDeploy token revokedТокен развёртывания был отозван пользователем или системой.
feature_flag_createdCreated feature flag with descriptionСоздан новый флаг функций (feature flag).
feature_flag_deletedFeature flag was deletedФлаг функций был удалён.
feature_flag_updatedFeature flag was updatedОбновлены параметры флага функций.
group_createdGroup was createdСоздана новая группа.
group_export_createdGroup file export was createdСоздан файл экспорта группы.
group_invite_via_group_link_createdInvited group to groupВ группу приглашена другая группа через групповую ссылку.
group_invite_via_group_link_deletedRevoked group from groupДоступ группы, приглашенной по ссылке, был отозван.
group_invite_via_group_link_updatedGroup access changedИзменены параметры доступа группы через групповую ссылку.
group_invite_via_project_group_link_createdInvited group to projectВ проект приглашена группа через групповую ссылку.
group_invite_via_project_group_link_deletedRevoked group from projectДоступ группы к проекту был отозван.
group_invite_via_project_group_link_updatedGroup access for project changedИзменены параметры доступа группы к проекту.
group_updatedGroup updated (visibility, 2FA grace period)Изменения в настройках группы (видимость, безопасность, лимиты, политика доступа).
  • repository_size_limit
  • two_factor_grace_period
  • lfs_enabled
  • membership_lock
  • path
  • require_two_factor_authentication
  • request_access_enabled
  • shared_runners_minutes_limit
  • share_with_group_lock
  • mentions_disabled
  • max_personal_access_token_lifetime
  • visibility_level
  • name
  • description
  • project_creation_level
  • default_branch_protected
  • seat_control
  • duo_features_enabled
  • prevent_forking_outside_group
  • allow_mfa_for_subgroups
  • default_branch_name
  • resource_access_token_creation_allowed
  • new_user_signups_cap
  • show_diff_preview_in_email
  • enabled_git_access_protocol
  • runner_registration_enabled
  • allow_runner_registration_token
  • emails_enabled
  • service_access_tokens_expiration_enforced
  • enforce_ssh_certificates
  • disable_personal_access_tokens
  • remove_dormant_members
  • remove_dormant_members_period
  • prevent_sharing_groups_outside_hierarchy
  • default_branch_protection_defaults
  • wiki_access_level
impersonation_initiatedUser root impersonated another userАдминистратор начал сессию от имени другого пользователя.
impersonation_stoppedUser root stopped impersonationАдминистратор завершил сессию от имени другого пользователя.
instance_settings_updatedInstance settings updated: Signup enabled turned onИзменены глобальные настройки инстанса.Все поля с настройками инстанса, кроме зашифрованных.
login_failedAttempt to login failedНеудачная попытка входа в систему.
manually_trigger_housekeepingHousekeeping taskЗапущена задача обслуживания репозитория вручную.
member_permissions_createdNew member access grantedПользователю предоставлен доступ (роль) к группе или проекту.
member_permissions_destroyedMember access revokedДоступ пользователя к проекту или группе отозван.
member_permissions_updatedMember access updatedИзменены права или срок действия доступа пользователя.
merge_request_closed_by_project_botMerge request #{merge_request.title} closed by project botЗапрос на merge закрыт системным ботом проекта.
merge_request_created_by_project_botMerge request #{merge_request.title} created by project botЗапрос на merge создан системным ботом проекта.
merge_request_merged_by_project_botMerge request #{merge_request.title} merged by project botЗапрос на merge обработан системным ботом проекта.
merge_request_reopened_by_project_botMerge request #{merge_request.title} reopened by project botЗапрос на merge переоткрыт системным ботом проекта.
omniauth_login_failedOmniauth login failed for #{user} #{provider}Ошибка входа через внешний OAuth/Omniauth-провайдер.
password_reset_failedPassword reset failedНеудачная попытка сброса пароля пользователем.
personal_access_token_issuedPersonal access token issuedВыпущен новый токен доступа (personal access token).
personal_access_token_revokedPersonal access token revokedТокен доступа был отозван.
pipeline_deletedPipeline deletedКонвейер CI/CD был удалён.
project_blobs_removalProject blobs removedМассовое удаление объектов (blobs) из проекта.
project_createdProject was createdСоздан новый проект.
project_default_branch_changedProject default branch updatedИзменена ветка по умолчанию в проекте.
project_export_createdProject export createdСоздан файл экспорта проекта.
project_feature_updatedProject features updatedИзменены уровни доступа к функциям проекта (issues, wiki и т. д.).
project_setting_updatedProject settings updatedИзменены шаблоны merge commit и squash commit.
project_text_replacementProject text replacedВ проекте выполнена массовая замена текста.
project_topic_changedProject topic changedИзменена тема проекта.
project_updatedProject updated (name, namespace)Изменены настройки проекта (имя, неймспейс, политики).
  • name
  • packages_enabled
  • reset_approvals_on_push
  • path
  • merge_requests_author_approval
  • merge_requests_disable_committers_approval
  • only_allow_merge_if_all_discussions_are_resolved
  • only_allow_merge_if_pipeline_succeeds
  • require_password_to_approve
  • disable_overriding_approvers_per_merge_request
  • repository_size_limit
  • project_namespace_id
  • namespace_id
  • printing_merge_request_link_enabled
  • resolve_outdated_diff_discussions
  • merge_requests_ff_only_enabled
  • merge_requests_rebase_enabled
  • remove_source_branch_after_merge
  • merge_requests_template
  • visibility_level
  • builds_access_level
  • container_registry_access_level
  • environments_access_level
  • feature_flags_access_level
  • forking_access_level
  • infrastructure_access_level
  • issues_access_level
  • merge_requests_access_level
  • metrics_dashboard_access_level
  • monitor_access_level
  • operations_access_level
  • package_registry_access_level
  • pages_access_level
  • releases_access_level
  • repository_access_level
  • requirements_access_level
  • security_and_compliance_access_level
  • snippets_access_level
  • wiki_access_level
  • merge_commit_template
  • squash_commit_template
  • runner_registration_enabled
  • show_diff_preview_in_email
  • selective_code_owner_removals
protected_branch_createdProtected branch createdСоздана защищённая ветка.
protected_branch_deletedProtected branch was deletedУдалена защищённая ветка.
protected_branch_updatedProtected branch was updated:Обновлены правила защищённой ветки.
protected_tag_createdProtected tag createdСоздан защищённый тег.
protected_tag_deletedProtected tag was deletedУдалён защищённый тег.
protected_tag_updatedProtected tag updated:Обновлены правила защищённого тега.
removed_gpg_keyRemoved gpg key from userУдалён GPG-ключ пользователя.
removed_ssh_keyUser removed ssh keyУдалён SSH-ключ пользователя.
requested_password_resetUser requested password changeПользователь запросил сброс пароля.
revoked_gpg_keyRevoked gpg key from userGPG-ключ пользователя был отозван.
unban_userUser was unbanПользователь разблокирован (unban).
unblock_userUser was unblockedС пользователя снята блокировка (unblock).
user_access_lockedUser access lockedУчётная запись пользователя заблокирована.
user_access_unlockedUser access unlockedУчётная запись пользователя разблокирована.
user_activatedUser was activatedУчётная запись пользователя активирована.
user_bannedUser was bannedПользователь забанен.
user_blockedUser was blockedУчётная запись пользователя заблокирована.
user_createdUser was createdСоздан новый пользователь.
user_deactivatedUser was deactivatedУчётная запись пользователя деактивирована.
user_destroyedUser was destroyedУчётная запись пользователя удалена.
user_email_updatedUser email updatedИзменён адрес электронной почты пользователя.
user_logged_inUser logged inУспешный вход пользователя.
user_password_updatedPassword updatedПароль пользователя изменён.
user_rejectedUser was rejectedУчётная запись пользователя отклонена (например, при регистрации).
user_removed_two_factorTwo factor disabledПользователь отключил двухфакторную аутентификацию.
user_settings_updatedUser settings updatedОбновлены настройки профиля пользователя.
  • name
  • public_email
  • otp_secret
  • otp_required_for_login
  • admin
  • private_profile
user_signupUser was registeredПользователь зарегистрирован.
user_switched_to_admin_modeUser switched to admin modeПользователь включил режим администратора.
user_username_updatedUsername updatedИзменено имя пользователя (username).
webhook_createdWebhook was createdСоздан вебхук для проекта, группы или инстанса.
webhook_destroyedSystem hook removedВебхук удалён.
group_deletedGroup was deletedГруппа удалена.
project_deletedProject was deletedПроект удалён.
logoutUser logged outПользователь вышел из системы.
unauthenticated_sessionRedirected to loginСистема перенаправила неаутентифицированного пользователя на страницу входа.
ci_runners_bulk_deletedCI runner bulk deleted: Errors:Массовое удаление CI runners.
ci_runner_registeredCI runner created via APIРегистрация CI runner через API.
ci_runner_unregisteredCI runner unregisteredОтмена регистрации CI runner.
ci_runner_token_resetCI runner registration token resetСброшен токен CI runner.
ci_runner_assigned_to_projectCI runner assigned to projectRunner был привязан к проекту.
ci_runner_unassigned_from_projectCI runner unassigned from projectRunner был отвязан от проекта.
ci_runner_createdCI runner created via UIRunner был создан через графический интерфейс.
package_registry_package_published#{name} package version #{version} has been publishedВ реестре пакетов опубликован новый пакет.
package_registry_package_deletedpackage version #{package.version} has been deletedПакет удалён из реестра пакетов.
group_access_token_destroyedGroup access token destroyedТокен доступа группы был удалён.
group_access_token_revokedGroup access token revokedТокен доступа группы был отозван.
personal_access_token_destroyedPersonal access token destroyedПерсональный токен доступа был удалён.
project_access_token_destroyedProject access token destroyedТокен доступа проекта был удалён.
project_access_token_revokedProject access token revokedТокен доступа проекта был отозван.
approval_rule_createdMerge request\Project\Group approval rule createdПравило апрува для запроса на слияние, проекта или группы было создано.
approval_rule_updatedMerge request\Project\Group approval rule updatedПравило апрува для запроса на слияние, проекта или группы было обновлено.
approval_rule_deletedMerge request\Project\Group approval rule deletedПравило апрува для запроса на слияние, проекта или группы было удалено.
approval_rule_propagatedApproval rules #{rule_names} propagated to #{project_and_group_names}Правила апрува были распространены в эти проекты и группы.
variable_viewed_apiUser viewed all CI/CD variables via API for this scope or User viewed CI/CD variable #{variable.key} via APIВсе CI/CD переменные были просмотрены через API для данной области или CI/CD переменная #{variable.key} была просмотрена через API.
group_unarchivedUser unarchived groupГруппа была разархивирована.
group_archivedUser archived groupГруппа была архивирована.
comment_deletedComment deletedКомментарий был удалён.
comment_createdComment createdКомментарий был создан.
comment_updatedComment updatedКомментарий был обновлён.
user_records_migrated_to_ghostUser records migrated to ghostЗаписи пользователя были перенесены ghost-пользователю.
user_enable_passkeyUser enable new passkeyНовый passkey был включён.
user_disable_passkeyUser disable passkeyPasskey был отключён.
push_rule_propagatedPush rule propagatedPush-правило было распространено.
push_rule_updatedPush rule updatedСуществующее push-правило было обновлено.