Mécanismes de sécurité des données
Authentification et autorisation unifiées, chiffrement et hachage des données, ainsi que les sous-systèmes d'audit et de supervision qui protègent les données sur l'ensemble de la plateforme.
Système unifié d’authentification et d’autorisation
Le système unifié d’authentification et d’autorisation est un composant clé de la protection des données qui garantit un accès sécurisé aux ressources du système. Il permet de gérer les utilisateurs, leurs droits et l’accès aux données à l’échelle de tout le système.
Rappel :
- L’authentification est le processus de vérification de l’identité d’un utilisateur (par exemple, à l’aide d’un identifiant et d’un mot de passe).
- L’autorisation est le processus de vérification des droits d’un utilisateur à effectuer certaines actions (par exemple, l’accès à des données ou à des fonctions du système).
Composants du système
Authentification
- Identifiant et mot de passe : la méthode d’authentification traditionnelle. Lors de la connexion, l’utilisateur doit d’abord s’identifier avec un identifiant et un mot de passe.
- Authentification multifacteur (MFA) : l’utilisation de plusieurs facteurs (par exemple, un jeton logiciel mis à jour dynamiquement pour l’API web).
L’authentification par jeton simplifie le processus pour les utilisateurs déjà enregistrés. Pour commencer, l’utilisateur envoie au serveur une requête contenant un identifiant et un mot de passe. Le serveur les compare aux valeurs enregistrées dans sa base d’identités. Si l’identité est confirmée, le serveur renvoie un jeton d’authentification (qui est lui aussi stocké dans la base de données).
Lorsque ce même utilisateur demande ultérieurement l’accès à des ressources protégées, ces requêtes peuvent être autorisées au moyen du jeton d’authentification plutôt que d’un identifiant et d’un mot de passe. Le serveur compare le jeton à celui qui est enregistré dans la base de données et accorde l’accès.
Autorisation
- Rôles et droits : des rôles sont attribués aux utilisateurs (par exemple, administrateur des accès, utilisateur) ; ces rôles définissent leurs droits.
- ACL (Access Control Lists) : des listes qui définissent qui a accès à quelles ressources.
- RBAC (Role-Based Access Control) : contrôle d’accès fondé sur les rôles.
- ABAC (Attribute-Based Access Control) : contrôle d’accès fondé sur les attributs (par exemple, selon l’heure de la journée ou la localisation).
Stockage des données utilisateur
- Base de données des utilisateurs : stocke les informations relatives aux utilisateurs, à leurs rôles et à leurs droits dans une base de données unique.
Sécurité
- Chiffrement : protège les données lors de leur transmission et de leur stockage.
- Jetons d’accès : jetons logiciels mis à jour dynamiquement, utilisés pour la gestion des sessions.
- Audit : journalisation de toutes les actions des utilisateurs en vue d’une analyse ultérieure.
Mise en œuvre du système
La plateforme s’appuie sur un flux d’authentification par jeton. L’utilisateur se connecte avec un identifiant et un mot de passe, le système les valide et renvoie un jeton d’accès, qui est ensuite transmis avec chaque requête suivante pour autoriser l’accès aux ressources protégées. L’adresse e-mail de l’utilisateur sert d’identifiant.
Exemple de requête au format Curl :
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_inEn réponse, nous recevons le message suivant :
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"}}Dans cette réponse, c’est le paramètre access_token qui nous intéresse. La valeur de cet en-tête est utilisée comme mot de passe pour chaque requête et change à chaque requête.
Voici un exemple de requête qui utilise le jeton de la réponse précédente :
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/stationsEn réponse, nous recevons le message suivant :
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
}Pour mettre fin à la session, vous pouvez utiliser la procédure SignOut, ou bien conserver les en-têtes nécessaires de la dernière requête et les réutiliser ultérieurement tant que le jeton n’a pas expiré. Notez que, sans clôture de la session, le dernier jeton reste valide pendant un certain temps, en fonction des paramètres système du serveur.
Avantages du système
Un système unifié d’authentification et d’autorisation est un outil puissant de protection des données et de contrôle des accès. Il offre les avantages suivants :
- Gestion centralisée : simplifie la gestion des utilisateurs et de leurs droits.
- Sécurité : protège les données contre les accès non autorisés.
- Cohérence : toutes les applications et tous les systèmes utilisent le même mécanisme d’authentification et d’autorisation.
- Évolutivité : facilite l’ajout de nouvelles applications et de nouveaux utilisateurs.
Chiffrement des données
Pour protéger les informations critiques, le système recourt au chiffrement (transformation de l’information en une forme illisible sans la clé appropriée) et au hachage (transformation des données en une chaîne unique de longueur fixe — une empreinte, ou hash). Il s’agit de l’un des mécanismes clés de protection des données, qui garantit la confidentialité, l’intégrité et la sécurité des informations, aussi bien lors de leur stockage que de leur transit.
Le système utilise différents algorithmes de chiffrement et de hachage des données.
Application du chiffrement dans le système
Chiffrement du stockage
- Bases de données : chiffrement de champs individuels de la base de données.
- Fichiers : chiffrement des fichiers avant leur enregistrement sur le disque.
Chiffrement des données en transit
- HTTPS : utilisation de SSL/TLS pour chiffrer les données lors de leur transmission sur le réseau.
- VPN : création d’un tunnel sécurisé pour la transmission des données.
Chiffrement des mots de passe
Stockage des empreintes (hash) des mots de passe au lieu des mots de passe eux-mêmes.
Exemples de chiffrement et de déchiffrement des données
Examinons des exemples de chiffrement et de déchiffrement des fichiers de configuration du système.
Chiffrement des données
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)Déchiffrement des données
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)Avantages du chiffrement des données
- Confidentialité : protection des données contre les accès non autorisés.
- Intégrité : garantie que les données n’ont pas été altérées.
- Authenticité : confirmation de la source des données.
- Exigences de conformité : respect des exigences réglementaires.
Audit et supervision
Plusieurs sous-systèmes surveillent l’activité des utilisateurs et du système, détectent les comportements suspects et garantissent le respect des exigences de sécurité. Ensemble, ils :
- collectent, analysent et conservent les informations relatives à l’activité des utilisateurs et du système afin d’assurer la traçabilité et la conformité ;
- surveillent en permanence le système et les équipements en temps réel afin de détecter les incidents et d’y répondre.
Objectifs
- Traçabilité : garantir que toute l’activité des utilisateurs et du système est enregistrée.
- Sécurité : détecter et prévenir les activités non autorisées.
- Détection des problèmes : identifier les pannes matérielles et les anomalies, et prendre les mesures correctives nécessaires.
- Optimisation des performances : analyser les performances du système et repérer les goulets d’étranglement à optimiser.
- Prévision et planification : collecter des données pour anticiper les charges de travail futures et planifier les ressources.
- Conformité : garantir le respect des exigences réglementaires.
- Analyse des incidents : analyser les incidents survenus afin d’en prévenir de nouveaux.
Composants de l’audit et de la supervision
Collecte des données
- Journaux : enregistrements des actions des utilisateurs et du système à tous les niveaux.
- Métriques : données de performance du système (par exemple, utilisation du processeur, consommation de mémoire).
Stockage des données
- Stockage des journaux : collecte de données provenant de diverses sources, avec un stockage distribué des journaux et des métriques organisé par domaine thématique.
- Rotation des journaux : suppression automatique des anciens journaux afin d’économiser de l’espace.
Analyse des données
- Recherche et filtrage : possibilité de rechercher et de filtrer les journaux selon différents critères.
- Analytique : utilisation d’outils d’analyse des données (par exemple, Zabbix).
Alertes
- Alertes : envoi de notifications en cas d’activité suspecte ou de situation d’urgence (par exemple, par e-mail ou via une discussion Telegram).
- Actions automatiques : réponse automatique aux incidents (par exemple, blocage d’un utilisateur).
Exemple de mise en œuvre
Journalisation
Utilisation d’une bibliothèque de journalisation dans l’application.
# 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]
...
endCollecte des erreurs dans les données provenant des compteurs
# 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)
endStockage des journaux
Utilisation d’un stockage centralisé pour les journaux.
Table audits
Cette table conserve les informations de journalisation des données.
| Champ | Type | Description |
|---|---|---|
id | integer | Identifiant unique de l’enregistrement (clé primaire). |
auditable_id | integer | Référence vers l’objet audité (equipment.id, stations.id …). |
auditable_type | character varying | Objet auditable (equipment, stations …). |
user_id | integer | Référence vers l’identifiant de l’utilisateur (users.id) |
action | character varying | Action |
audited_changes | jsonb | Modifications auditées |
version | integer | Version des modifications |
remote_address | character varying | Adresse distante |
request_uuid | character varying | Identifiant de l’événement. |
created_at | timestamp(6) without time zone | Date/heure de la modification. |
Table error_logs
Cette table conserve les informations relatives aux erreurs présentes dans les données provenant des compteurs.
| Champ | Type | Description |
|---|---|---|
id | integer | Identifiant unique de l’enregistrement (clé primaire). |
loggable_id | integer | Référence vers l’objet enregistré (equipment.id …). |
loggable_type | character varying | Objet enregistré (equipment …). |
message | integer | Référence vers l’identifiant de l’erreur. |
params | jsonb | Caractéristiques de l’erreur. |
created_at | timestamp(6) without time zone | Date/heure de la modification. |
Analyse des journaux
Outils utilisés pour analyser les journaux :
- Mise en place de formulaires web pour visualiser et analyser les journaux.
- Création de tableaux de bord pour suivre l’activité des utilisateurs.
Alertes
Alertes personnalisées en cas d’activité suspecte :
- Configuration d’alertes dans Zabbix pour surveiller les métriques.
- Envoi de notifications par e-mail ou via une discussion Telegram pour les événements d’alarme.
Avantages de l’audit et de la supervision
L’audit et la supervision sont de puissants outils de protection des données qui permettent de suivre l’activité des utilisateurs et du système, de repérer les comportements suspects et de garantir le respect des exigences de sécurité. Ils permettent de :
- assurer la traçabilité et la sécurité des données ;
- détecter et prévenir les incidents ;
- répondre aux exigences réglementaires.
Sujets connexes
Cette page vous a-t-elle été utile ?
Merci pour votre retour !