Security audit is a detailed analysis of your infrastructure aimed at identifying potential vulnerabilities and unsafe practices.
Code simplifies the auditing process with audit events, which allow you to track a wide range of activities happening in the system.

Purpose and scope

The security event logging mechanism (audit events) is used to:

  • Record user and administrator actions related to system configuration changes.
  • Register information security incidents.
  • Provide the ability to investigate incidents and reconstruct a complete picture of actions in the system.

The scope of application is all levels of the Code platform — from individual projects and groups to instance configuration.
Events are recorded regardless of user role (if they have the right to perform the action) and stored centrally.

Technical capabilities for event logging

The audit system features the following capabilities:

  • Centralized event logging: All events are stored in a single audit log.
  • Real-time collection: Events are logged instantly at the time of business operation execution. This includes, for example, user login, email change, or enabling force push in a protected branch.
  • Integrity protection: The audit log is read-only for administrators. Logged events can’t be deleted or modified.
  • Access via UI or API: Events can be viewed and filtered both in the administrator interface and through the dedicated API.

Use cases

Audit events let you track:

  • Who and when changed a user’s access level in a Code project.
  • Cases of user creation and deletion.
  • Traces of suspicious activity — for example, cases of a bulk employee email change or a repository deletion.
  • Changes made to CI/CD environment variables.
  • Changes to project and group visibility levels.

Audit events help you:

  • Assess risks and strengthen security measures.
  • Respond promptly to incidents.

Accessing audit events

Accessing via UI

To access audit events, switch to the admin mode and select “Audit events” in the sidebar. This opens the audit event table.

Description of the table columns:

  • Author: User who triggered the event.
  • Event: System message with event details.
  • Object: Related scope of the event (instance, user, group, or project name).
  • Target: Entity that was changed (project, user, protected branch, token, or CI variable name, etc.).
  • Event time: Date and time when the event occurred.

Audit event table

Accessing via API

Deckhouse Code provides the following API method to retrieve the list of audit events:

POST /api/v4/admin/audit_events/search

The method supports filtering by dates, full-text search, and entity types.

The date range must be within a single calendar month. If created_after and created_before belong to different months, the created_before value will be automatically adjusted to the last day of the month of created_after.

Request parameters

ParameterTypeRequiredDescription
created_afterStringNoStart date (inclusive) in ISO8601 format. Default: beginning of the current month
created_beforeStringNoEnd date (inclusive) in ISO8601 format. Default: end of the current month
qStringNoFull-text search in the event message
sortStringNoSort by creation date. Possible values: created_asc, created_desc (default)
entity_typesArrayNoList of entity types for filtering: User, Project, Group, Gitlab::Audit::InstanceScope

Example request:

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

Audit event contents

Each audit event contains a date, time, IP address and user account details, as well as all required information about the scope of changes, object, and what exactly has been changed.

List of audit events

The table below shows example system messages.
Audit events in a production environment contain full information either directly in the message or in an additional JSON field with data.

NameSystem messagePurposeAudited attributes
2fa_login_failedUser 2fa login failedA failed attempt to log in with two-factor authentication was detected.
access_approvedUser access was approvedUser's access request to the instance was approved.
access_token_createdProject/Group access token createdAn access token for a project or group was created.
access_token_revokedProject/Group access token revokedAn access token was revoked.
added_gpg_keyAdded new gpg key to userA user added a new GPG key.
added_ssh_keyUser added new ssh keyA user added a new SSH key.
application_createdApplication was createdA new application (OAuth or integration) was created.
application_deletedApplication deletedAn application was deleted.
application_secret_renewApplication secret renewThe application secret was renewed.
application_updatedApplication UpdatedApplication parameters were updated.
ci_cd_job_token_removed_from_allowlistDisallow group to use job tokenA project restricted a specific group from using CI/CD Job Token.
ci_cd_job_token_added_to_allowlistAllow group to use job tokenA project allowed a specific group to use CI/CD Job Token.
ci_variable_createdCi variable #{key} createdA new CI/CD variable was created.
ci_variable_deletedCi variable #{key} deletedA CI/CD variable was deleted.
ci_variable_updatedCi variable updated (Value, Protected)The value or protection status of a CI/CD variable was updated.
deploy_key_createdDeploy key addedA new deploy key was added for a project or instance.
deploy_key_deletedDeploy key was deletedA deploy key was deleted.
deploy_key_disabledDeploy key disabledA deploy key was disabled.
deploy_key_enabledDeploy key enabledA deploy key was re-enabled.
deploy_token_createdDeploy token createdA deploy token was created for data access.
deploy_token_deletedDeploy token deletedA deploy token was deleted.
deploy_token_revokedDeploy token revokedA deploy token was revoked by a user or the system.
feature_flag_createdCreated feature flag with descriptionA new feature flag was created.
feature_flag_deletedFeature flag was deletedA feature flag was deleted.
feature_flag_updatedFeature flag was updatedA feature flag was updated.
group_createdGroup was createdA new group was created.
group_export_createdGroup file export was createdA group export file was generated.
group_invite_via_group_link_createdInvited group to groupAnother group was invited to the group using a group link.
group_invite_via_group_link_deletedRevoked group from groupGroup access through a group link was revoked.
group_invite_via_group_link_updatedGroup access changedGroup access parameters through a group link were updated.
group_invite_via_project_group_link_createdInvited group to projectA group was invited to a project using a group link.
group_invite_via_project_group_link_deletedRevoked group from projectGroup access to a project was revoked.
group_invite_via_project_group_link_updatedGroup access for project changedGroup access parameters to a project were updated.
group_updatedGroup updated (visibility, 2FA grace period)Changes in group settings (visibility, security, limits, access policy).
  • 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 userAn administrator started a session impersonating another user.
impersonation_stoppedUser root stopped impersonationAn administrator stopped impersonating another user.
instance_settings_updatedInstance settings updated: Signup enabled turned onGlobal instance settings were updated.All instance settings except encrypted fields.
login_failedAttempt to login failedA login attempt failed.
manually_trigger_housekeepingHousekeeping taskA housekeeping task for a repository was triggered manually.
member_permissions_createdNew member access grantedA user was granted membership (role) in a group or project.
member_permissions_destroyedMember access revokedA user's membership was revoked from a group or project.
member_permissions_updatedMember access updatedA user's role or membership expiration date was updated.
merge_request_closed_by_project_botMerge request #{merge_request.title} closed by project botA merge request was closed by a project bot.
merge_request_created_by_project_botMerge request #{merge_request.title} created by project botA merge request was created by a project bot.
merge_request_merged_by_project_botMerge request #{merge_request.title} merged by project botA merge request was merged by a project bot.
merge_request_reopened_by_project_botMerge request #{merge_request.title} reopened by project botA merge request was reopened by a project bot.
omniauth_login_failedOmniauth login failed for #{user} #{provider}Failed login attempt via external OAuth/Omniauth provider.
password_reset_failedPassword reset failedFailed password reset attempt by a user.
personal_access_token_issuedPersonal access token issuedA new personal access token was issued.
personal_access_token_revokedPersonal access token revokedA personal access token was revoked.
pipeline_deletedPipeline deletedA CI/CD pipeline was deleted.
project_blobs_removalProject blobs removedBulk removal of repository blobs in a project.
project_createdProject was createdA new project was created.
project_default_branch_changedProject default branch updatedThe default branch of a project was changed.
project_export_createdProject export createdA project export file was generated.
project_feature_updatedProject features updatedFeature access levels for a project were updated (issues, wiki, etc.).
project_setting_updatedProject settings updatedProject merge commit and squash commit templates were updated.
project_text_replacementProject text replacedBulk text replacement in a project.
project_topic_changedProject topic changedProject topic was updated.
project_updatedProject updated (name, namespace)Project settings were updated (name, namespace, policies).
  • 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 createdA protected branch was created.
protected_branch_deletedProtected branch was deletedA protected branch was deleted.
protected_branch_updatedProtected branch was updatedProtected branch rules were updated.
protected_tag_createdProtected tag createdA protected tag was created.
protected_tag_deletedProtected tag was deletedA protected tag was deleted.
protected_tag_updatedProtected tag updatedProtected tag rules were updated.
removed_gpg_keyRemoved gpg key from userA user's GPG key was removed.
removed_ssh_keyUser removed ssh keyA user's SSH key was removed.
requested_password_resetUser requested password changeA user requested a password reset.
revoked_gpg_keyRevoked gpg key from userA user's GPG key was revoked.
unban_userUser was unbanA user was unbanned.
unblock_userUser was unblockedA user was unblocked.
user_access_lockedUser access lockedA user account was locked.
user_access_unlockedUser access unlockedA user account was unlocked.
user_activatedUser was activatedA user account was activated.
user_bannedUser was bannedA user account was banned.
user_blockedUser was blockedA user account was blocked.
user_createdUser was createdA new user account was created.
user_deactivatedUser was deactivatedA user account was deactivated.
user_destroyedUser was destroyedA user account was deleted.
user_email_updatedUser email updatedA user's email address was updated.
user_logged_inUser logged inA user logged in successfully.
user_password_updatedPassword updatedA user's password was changed.
user_rejectedUser was rejectedA user account was rejected (for example, during a registration).
user_removed_two_factorTwo factor disabledA user disabled two-factor authentication.
user_settings_updatedUser settings updatedA user updated their profile settings.
  • name
  • public_email
  • otp_secret
  • otp_required_for_login
  • admin
  • private_profile
user_signupUser was registeredA new user registered.
user_switched_to_admin_modeUser switched to admin modeA user switched to admin mode.
user_username_updatedUsername updatedA user's username was updated.
webhook_createdWebhook was createdA webhook for a project, group, or instance was created.
webhook_destroyedSystem hook removedA webhook was removed.
group_deletedGroup was deletedA group was deleted.
project_deletedProject was deletedA project was deleted.
logoutUser logged outA user logged out of the system.
unauthenticated_sessionRedirected to loginAn unauthenticated user was redirected to the login page.
ci_runners_bulk_deletedCI runner bulk deleted: Errors:Multiple CI runners were deleted.
ci_runner_registeredCI runner created via APIA CI runner was registered via API.
ci_runner_unregisteredCI runner unregisteredA CI runner was unregistered.
ci_runner_token_resetCI runner registration token resetA CI runner's registration token was reset.
ci_runner_assigned_to_projectCI runner assigned to projectA CI runner was assigned to a project.
ci_runner_unassigned_from_projectCI runner unassigned from projectA CI runner was unassigned from a project.
ci_runner_createdCI runner created via UIA CI runner was created via the user interface.
package_registry_package_published#{name} package version #{version} has been publishedA new package was published to the package registry.
package_registry_package_deletedpackage version #{package.version} has been deletedA package was deleted from the package registry.
group_access_token_destroyedGroup access token destroyedA group access token was destroyed.
group_access_token_revokedGroup access token revokedA group access token was revoked.
personal_access_token_destroyedPersonal access token destroyedA personal access token was destroyed.
project_access_token_destroyedProject access token destroyedA project access token was destroyed.
project_access_token_revokedProject access token revokedA project access token was revoked.
approval_rule_createdMerge request\Project\Group approval rule createdA merge request, project, or group approval rule was created.
approval_rule_updatedMerge request\Project\Group approval rule updatedA merge request, project, or group approval rule was updated.
approval_rule_deletedMerge request\Project\Group approval rule deletedA merge request, project, or group approval rule was deleted.
approval_rule_propagatedApproval rules #{rule_names} propagated to #{project_and_group_names}Approval rules were propagated to these projects and groups.
variable_viewed_apiUser viewed all CI/CD variables via API for this scope or User viewed CI/CD variable #{variable.key} via APIAll CI/CD variables were viewed via API for this scope or A CI/CD variable #{variable.key} was viewed via API.
group_unarchivedUser unarchived groupA group was unarchived.
group_archivedUser archived groupA group was archived.
comment_deletedComment deletedA comment was deleted.
comment_createdComment createdA comment was created.
comment_updatedComment updatedA comment was updated.
user_records_migrated_to_ghostUser records migrated to ghostUser records were migrated to a ghost user.
user_enable_passkeyUser enable new passkeyA new passkey was enabled.
user_disable_passkeyUser disable passkeyA passkey was disabled.
push_rule_propagatedPush rule propagatedA push rule was propagated.
push_rule_updatedPush rule updatedAn existing push rule was updated.