Механізми безпеки даних
Єдина система автентифікації та авторизації, шифрування й хешування даних, а також підсистеми аудиту та моніторингу, що захищають дані в межах усієї платформи.
Єдина система автентифікації та авторизації
Єдина система автентифікації та авторизації — це ключовий компонент захисту даних, що забезпечує безпечний доступ до ресурсів системи. Вона дає змогу керувати користувачами, їхніми правами та доступом до даних на загальносистемному рівні.
Нагадаємо:
- Автентифікація — це процес перевірки особи користувача (наприклад, за іменем користувача та паролем).
- Авторизація — це процес перевірки прав користувача на виконання певних дій (наприклад, доступ до даних або системних функцій).
Компоненти системи
Автентифікація
- Логін і пароль: традиційний спосіб автентифікації. Під час входу користувач спершу має ідентифікувати себе за іменем користувача та паролем.
- Багатофакторна автентифікація (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 про аварійні події.
Переваги аудиту та моніторингу
Аудит і моніторинг — це потужні інструменти захисту даних, що дають змогу відстежувати активність користувачів і системи, виявляти підозрілу поведінку та забезпечувати дотримання вимог безпеки. Вони дають змогу:
- забезпечити підзвітність і безпеку даних;
- виявляти інциденти та запобігати їм;
- дотримуватися нормативних вимог.
Пов'язані теми
Чи була ця сторінка корисною?
Дякуємо за відгук!