Механизмы защиты данных

Единая система аутентификации и авторизации, шифрование и хеширование данных, а также подсистемы аудита и мониторинга, защищающие данные на всех уровнях платформы.

Единая система аутентификации и авторизации

Единая система аутентификации и авторизации — это ключевой компонент защиты данных, обеспечивающий безопасный доступ к ресурсам системы. Она позволяет управлять пользователями, их правами и доступом к данным на общесистемном уровне.

Напомним:

  • Аутентификация — это процесс проверки подлинности пользователя (например, по имени пользователя и паролю).
  • Авторизация — это процесс проверки прав пользователя на выполнение определённых действий (например, доступа к данным или функциям системы).

Компоненты системы

Аутентификация

  • Логин и пароль: традиционный метод аутентификации. При входе пользователь должен сначала идентифицировать себя по имени пользователя и паролю.
  • Многофакторная аутентификация (MFA): использование нескольких факторов (например, динамически обновляемого программного токена для веб-API).

Аутентификация на основе токенов упрощает процесс для уже зарегистрированных пользователей. Для начала работы пользователь отправляет на сервер запрос с именем пользователя и паролем. Сервер сверяет их со значениями, зарегистрированными в его базе данных учётных записей. Если подлинность подтверждена, сервер возвращает токен аутентификации (который также сохраняется в базе данных).

Когда тот же пользователь позже запрашивает доступ к защищённым ресурсам, эти запросы могут быть авторизованы токеном аутентификации вместо имени пользователя и пароля. Сервер сверяет токен с зарегистрированным в базе данных и предоставляет доступ.

Авторизация

  • Роли и права: пользователям назначаются роли (например, администратор доступа, пользователь), которые определяют их права.
  • ACL (Access Control Lists): списки, определяющие, кто имеет доступ к каким ресурсам.
  • RBAC (Role-Based Access Control): управление доступом на основе ролей.
  • ABAC (Attribute-Based Access Control): управление доступом на основе атрибутов (например, по времени суток или местоположению).

Хранение пользовательских данных

  • База данных пользователей: хранит сведения о пользователях, их ролях и правах в единой базе данных.

Безопасность

  • Шифрование: защищает данные при передаче и хранении.
  • Токены доступа: динамически обновляемые программные токены, используемые для управления сеансами.
  • Аудит: журналирование всех действий пользователей для последующего анализа.

Реализация системы

Платформа использует процесс аутентификации на основе токенов. Пользователь входит по логину и паролю, система проверяет их и возвращает токен доступа, который затем отправляется с каждым последующим запросом для авторизации доступа к защищённым ресурсам. В качестве логина используется адрес электронной почты пользователя.

Пример запроса в формате Curl:

Request example
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_in

В ответ мы получаем следующее сообщение:

Response example
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin Content-Type: application/json; charset=utf-8 access-token: tgervk9_9xicJYpmSsnnNA
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615227012
uid: api@local.net
ETag: W/"5b9bcc76f7223b72b79d9f2d31ff0fd5"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c18e06b4-e5bd-40b5-875d-7ac958e2fbb5
X-Runtime: 0.391069
Transfer-Encoding: chunked
{"data":{"id":6,"email":"api@local.
net","provider":"email","uid":"api@local.net","name":"API user"}}

В этом ответе нас интересует параметр access_token. Значение этого заголовка используется как пароль для каждого запроса и меняется с каждым запросом.

Ниже приведён пример запроса, использующего токен из предыдущего ответа:

Request example with token
curl -i --header "access-token: tgervk9_9xicJYpmSsnnNA" \
--header "token-type: Bearer" \
--header "client: D-Uv3ER53873olhnNLjL9w" \
--header "uid: api@local.net" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stations

В ответ мы получаем следующее сообщение:

Чтобы завершить сеанс, можно воспользоваться процедурой SignOut либо сохранить необходимые заголовки из последнего запроса и повторно использовать их в следующий раз, если срок действия токена ещё не истёк. Обратите внимание, что без завершения сеанса последний токен остаётся действительным в течение некоторого времени, зависящего от системных настроек сервера.

Преимущества системы

Единая система аутентификации и авторизации — это мощный инструмент защиты данных и контроля доступа. Она обеспечивает следующие преимущества:

  • Централизованное управление: упрощает управление пользователями и их правами.
  • Безопасность: защищает данные от несанкционированного доступа.
  • Согласованность: все приложения и системы используют единый механизм аутентификации и авторизации.
  • Масштабируемость: позволяет легко добавлять новые приложения и пользователей.

Шифрование данных

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

В системе применяются различные алгоритмы шифрования и хеширования данных.

Применение шифрования в системе

Шифрование при хранении

  • Базы данных: шифрование отдельных полей базы данных.
  • Файлы: шифрование файлов перед сохранением на диск.

Шифрование данных при передаче

  • HTTPS: использование SSL/TLS для шифрования данных при передаче по сети.
  • VPN: создание защищённого туннеля для передачи данных.

Шифрование паролей

Хранение хешей паролей вместо самих паролей.

Примеры шифрования и расшифровки данных

Рассмотрим примеры шифрования и расшифровки файлов конфигурации системы.

Шифрование данных

example.config
mkdir_p(encrypted_dir_path)
encrypted = Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key')
encrypted.write(File.read(decrypted_file_path))
File.delete(decrypted_file_path)

Расшифровка данных

example.config
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
  Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)

Преимущества шифрования данных

  • Конфиденциальность: защита данных от несанкционированного доступа.
  • Целостность: гарантия того, что данные не были изменены.
  • Подлинность: подтверждение источника данных.
  • Требования соответствия: выполнение требований регуляторов.

Аудит и мониторинг

Несколько подсистем отслеживают активность пользователей и системы, выявляют подозрительное поведение и обеспечивают соблюдение требований безопасности. Совместно они:

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

Задачи

  • Подотчётность: обеспечение того, что вся активность пользователей и системы фиксируется.
  • Безопасность: выявление и предотвращение несанкционированной активности.
  • Обнаружение проблем: выявление аппаратных проблем и аномалий и принятие корректирующих мер.
  • Оптимизация производительности: анализ производительности системы и поиск узких мест, требующих оптимизации.
  • Прогнозирование и планирование: сбор данных для прогнозирования будущих нагрузок и планирования ресурсов.
  • Соответствие: обеспечение соблюдения требований регуляторов.
  • Анализ инцидентов: анализ произошедших инцидентов для предотвращения будущих.

Компоненты аудита и мониторинга

Сбор данных

  • Журналы: записи действий пользователей и системы на всех уровнях.
  • Метрики: данные о производительности системы (например, загрузка ЦП, использование памяти).

Хранение данных

  • Хранилище журналов: сбор данных из различных источников с распределённым хранением журналов и метрик, организованным по предметным областям.
  • Ротация журналов: автоматическое удаление старых журналов для экономии места.

Анализ данных

  • Поиск и фильтрация: возможность искать и фильтровать журналы по различным критериям.
  • Аналитика: использование инструментов анализа данных (например, Zabbix).

Оповещения

  • Оповещения: отправка уведомлений о подозрительной активности и нештатных ситуациях (например, по электронной почте или в чат Telegram).
  • Автоматические действия: автоматическое реагирование на инциденты (например, блокировка пользователя).

Пример реализации

Журналирование

Использование библиотеки для журналирования в приложении.

Сбор ошибок в данных от приборов учёта

Хранение журналов

Использование централизованного хранилища журналов.

Таблица audits

В этой таблице хранится информация журналирования данных.

ПолеТипОписание
idintegerУникальный идентификатор записи (первичный ключ).
auditable_idintegerСсылка на аудируемый объект (equipment.id, stations.id …).
auditable_typecharacter varyingАудируемый объект (equipment, stations …).
user_idintegerСсылка на идентификатор пользователя (users.id)
actioncharacter varyingДействие
audited_changesjsonbАудируемые изменения
versionintegerВерсия изменений
remote_addresscharacter varyingУдалённый адрес
request_uuidcharacter varyingИдентификатор события.
created_attimestamp(6) without time zoneДата/время изменения.
Таблица error_logs

В этой таблице хранится информация об ошибках в данных, поступающих от приборов учёта.

ПолеТипОписание
idintegerУникальный идентификатор записи (первичный ключ).
loggable_idintegerСсылка на зарегистрированный объект (equipment.id …).
loggable_typecharacter varyingЗарегистрированный объект (equipment …).
messageintegerСсылка на идентификатор ошибки.
paramsjsonbХарактеристики ошибки.
created_attimestamp(6) without time zoneДата/время изменения.

Анализ журналов

Инструменты, используемые для анализа журналов:

  • Настройка веб-форм для визуализации и анализа журналов.
  • Создание панелей мониторинга для отслеживания активности пользователей.

Оповещения

Настраиваемые оповещения о подозрительной активности:

  • Настройка оповещений в Zabbix для мониторинга метрик.
  • Отправка уведомлений по электронной почте или в чат Telegram при аварийных событиях.

Преимущества аудита и мониторинга

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

  • обеспечить подотчётность и безопасность данных;
  • выявлять и предотвращать инциденты;
  • выполнять требования регуляторов.

Связанные темы

Последнее обновление

Эта страница была полезной?