Механизмы защиты данных
Единая система аутентификации и авторизации, шифрование и хеширование данных, а также подсистемы аудита и мониторинга, защищающие данные на всех уровнях платформы.
Единая система аутентификации и авторизации
Единая система аутентификации и авторизации — это ключевой компонент защиты данных, обеспечивающий безопасный доступ к ресурсам системы. Она позволяет управлять пользователями, их правами и доступом к данным на общесистемном уровне.
Напомним:
- Аутентификация — это процесс проверки подлинности пользователя (например, по имени пользователя и паролю).
- Авторизация — это процесс проверки прав пользователя на выполнение определённых действий (например, доступа к данным или функциям системы).
Компоненты системы
Аутентификация
- Логин и пароль: традиционный метод аутентификации. При входе пользователь должен сначала идентифицировать себя по имени пользователя и паролю.
- Многофакторная аутентификация (MFA): использование нескольких факторов (например, динамически обновляемого программного токена для веб-API).
Аутентификация на основе токенов упрощает процесс для уже зарегистрированных пользователей. Для начала работы пользователь отправляет на сервер запрос с именем пользователя и паролем. Сервер сверяет их со значениями, зарегистрированными в его базе данных учётных записей. Если подлинность подтверждена, сервер возвращает токен аутентификации (который также сохраняется в базе данных).
Когда тот же пользователь позже запрашивает доступ к защищённым ресурсам, эти запросы могут быть авторизованы токеном аутентификации вместо имени пользователя и пароля. Сервер сверяет токен с зарегистрированным в базе данных и предоставляет доступ.
Авторизация
- Роли и права: пользователям назначаются роли (например, администратор доступа, пользователь), которые определяют их права.
- ACL (Access Control Lists): списки, определяющие, кто имеет доступ к каким ресурсам.
- RBAC (Role-Based Access Control): управление доступом на основе ролей.
- ABAC (Attribute-Based Access Control): управление доступом на основе атрибутов (например, по времени суток или местоположению).
Хранение пользовательских данных
- База данных пользователей: хранит сведения о пользователях, их ролях и правах в единой базе данных.
Безопасность
- Шифрование: защищает данные при передаче и хранении.
- Токены доступа: динамически обновляемые программные токены, используемые для управления сеансами.
- Аудит: журналирование всех действий пользователей для последующего анализа.
Реализация системы
Платформа использует процесс аутентификации на основе токенов. Пользователь входит по логину и паролю, система проверяет их и возвращает токен доступа, который затем отправляется с каждым последующим запросом для авторизации доступа к защищённым ресурсам. В качестве логина используется адрес электронной почты пользователя.
Пример запроса в формате Curl:
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_inВ ответ мы получаем следующее сообщение:
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. Значение этого заголовка используется как пароль для каждого запроса и меняется с каждым запросом.
Ниже приведён пример запроса, использующего токен из предыдущего ответа:
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В ответ мы получаем следующее сообщение:
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: Bmh2GVrxr6aW0Hngor4gPw
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615311367
uid: api@local.net
ETag: W/"ba0df406b647bd92f0bf3a18916714c1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 35a26441-ae78-48fa-8b2e-e92d2605133b
X-Runtime: 0.167748
Transfer-Encoding: chunked
{"data": [
{"id":1,"name":"865293041101853","equipment_brand_name":"Corrector
BK","phone":"","equipment_id":1},...
],
"total_pages":7,
"current_page":2
}Чтобы завершить сеанс, можно воспользоваться процедурой SignOut либо сохранить необходимые заголовки из последнего запроса и повторно использовать их в следующий раз, если срок действия токена ещё не истёк. Обратите внимание, что без завершения сеанса последний токен остаётся действительным в течение некоторого времени, зависящего от системных настроек сервера.
Преимущества системы
Единая система аутентификации и авторизации — это мощный инструмент защиты данных и контроля доступа. Она обеспечивает следующие преимущества:
- Централизованное управление: упрощает управление пользователями и их правами.
- Безопасность: защищает данные от несанкционированного доступа.
- Согласованность: все приложения и системы используют единый механизм аутентификации и авторизации.
- Масштабируемость: позволяет легко добавлять новые приложения и пользователей.
Шифрование данных
Для защиты критически важной информации система использует шифрование (преобразование информации в форму, которую нельзя прочитать без соответствующего ключа) и хеширование (преобразование данных в уникальную строку фиксированной длины — хеш). Это один из ключевых механизмов защиты данных, обеспечивающий конфиденциальность, целостность и безопасность информации как при хранении, так и при передаче.
В системе применяются различные алгоритмы шифрования и хеширования данных.
Применение шифрования в системе
Шифрование при хранении
- Базы данных: шифрование отдельных полей базы данных.
- Файлы: шифрование файлов перед сохранением на диск.
Шифрование данных при передаче
- HTTPS: использование SSL/TLS для шифрования данных при передаче по сети.
- VPN: создание защищённого туннеля для передачи данных.
Шифрование паролей
Хранение хешей паролей вместо самих паролей.
Примеры шифрования и расшифровки данных
Рассмотрим примеры шифрования и расшифровки файлов конфигурации системы.
Шифрование данных
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)Расшифровка данных
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)Преимущества шифрования данных
- Конфиденциальность: защита данных от несанкционированного доступа.
- Целостность: гарантия того, что данные не были изменены.
- Подлинность: подтверждение источника данных.
- Требования соответствия: выполнение требований регуляторов.
Аудит и мониторинг
Несколько подсистем отслеживают активность пользователей и системы, выявляют подозрительное поведение и обеспечивают соблюдение требований безопасности. Совместно они:
- собирают, анализируют и хранят информацию об активности пользователей и системы для обеспечения подотчётности и соответствия;
- непрерывно отслеживают систему и оборудование в реальном времени для выявления инцидентов и реагирования на них.
Задачи
- Подотчётность: обеспечение того, что вся активность пользователей и системы фиксируется.
- Безопасность: выявление и предотвращение несанкционированной активности.
- Обнаружение проблем: выявление аппаратных проблем и аномалий и принятие корректирующих мер.
- Оптимизация производительности: анализ производительности системы и поиск узких мест, требующих оптимизации.
- Прогнозирование и планирование: сбор данных для прогнозирования будущих нагрузок и планирования ресурсов.
- Соответствие: обеспечение соблюдения требований регуляторов.
- Анализ инцидентов: анализ произошедших инцидентов для предотвращения будущих.
Компоненты аудита и мониторинга
Сбор данных
- Журналы: записи действий пользователей и системы на всех уровнях.
- Метрики: данные о производительности системы (например, загрузка ЦП, использование памяти).
Хранение данных
- Хранилище журналов: сбор данных из различных источников с распределённым хранением журналов и метрик, организованным по предметным областям.
- Ротация журналов: автоматическое удаление старых журналов для экономии места.
Анализ данных
- Поиск и фильтрация: возможность искать и фильтровать журналы по различным критериям.
- Аналитика: использование инструментов анализа данных (например, Zabbix).
Оповещения
- Оповещения: отправка уведомлений о подозрительной активности и нештатных ситуациях (например, по электронной почте или в чат Telegram).
- Автоматические действия: автоматическое реагирование на инциденты (например, блокировка пользователя).
Пример реализации
Журналирование
Использование библиотеки для журналирования в приложении.
# Logs all changes to models
gem "audited"
# Logging settings
Audited.config do |config|
config.audit_class = CustomAudit
end
class CustomAudit < Audited::Audit
default_scope { order(created_at: :desc) }
ACTION_NAME = { 'Create' => 'create',
'Update' => 'update',
'Destroy' => 'destroy' }.freeze
end
# Metering device
class Equipment < ApplicationRecord
audited except: [:password]
...
endСбор ошибок в данных от приборов учёта
# data model for error collection
class ErrorLog < ApplicationRecord
enum message: { invalid_equipment_serial_number: 0,
invalid_equipment_software_version: 1,
...
}
belongs_to :loggable, polymorphic: true
belongs_to :loggable_equipment, class_name: 'Equipment', foreign_key: :loggable_id, optional: true
validates :loggable_type, :loggable_id, :message, presence: true
end
# Event log
unless valid_value?(serial_number)
message_params = {equipment: equipment, new_serial_number: serial_number}
message2logger(loggable_obj: equipment, message: :invalid_equipment_serial_number, params: message_params)
endХранение журналов
Использование централизованного хранилища журналов.
Таблица audits
В этой таблице хранится информация журналирования данных.
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный идентификатор записи (первичный ключ). |
auditable_id | integer | Ссылка на аудируемый объект (equipment.id, stations.id …). |
auditable_type | character varying | Аудируемый объект (equipment, stations …). |
user_id | integer | Ссылка на идентификатор пользователя (users.id) |
action | character varying | Действие |
audited_changes | jsonb | Аудируемые изменения |
version | integer | Версия изменений |
remote_address | character varying | Удалённый адрес |
request_uuid | character varying | Идентификатор события. |
created_at | timestamp(6) without time zone | Дата/время изменения. |
Таблица error_logs
В этой таблице хранится информация об ошибках в данных, поступающих от приборов учёта.
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный идентификатор записи (первичный ключ). |
loggable_id | integer | Ссылка на зарегистрированный объект (equipment.id …). |
loggable_type | character varying | Зарегистрированный объект (equipment …). |
message | integer | Ссылка на идентификатор ошибки. |
params | jsonb | Характеристики ошибки. |
created_at | timestamp(6) without time zone | Дата/время изменения. |
Анализ журналов
Инструменты, используемые для анализа журналов:
- Настройка веб-форм для визуализации и анализа журналов.
- Создание панелей мониторинга для отслеживания активности пользователей.
Оповещения
Настраиваемые оповещения о подозрительной активности:
- Настройка оповещений в Zabbix для мониторинга метрик.
- Отправка уведомлений по электронной почте или в чат Telegram при аварийных событиях.
Преимущества аудита и мониторинга
Аудит и мониторинг — это мощные инструменты защиты данных, позволяющие отслеживать активность пользователей и системы, выявлять подозрительное поведение и обеспечивать соблюдение требований безопасности. Они позволяют:
- обеспечить подотчётность и безопасность данных;
- выявлять и предотвращать инциденты;
- выполнять требования регуляторов.
Связанные темы
Эта страница была полезной?
Спасибо за ваш отзыв!