PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utilisation du chiffrement pour renforcer la sécurité de la base de données PostgreSQL

Remarque :Certaines parties du blog contiennent des références et des exemples tirés de "ANNOUNCING AVAILABILITY OF POSTGRESQL INSTANCE LEVEL ENCRYPTION" de CyberTec, une société qui fournit une assistance, des conseils et une formation pour PostgreSQL.

Les organisations traitent différents types de données, y compris des informations cruciales qui doivent être stockées dans une base de données. La sécurité est un aspect clé à prendre en compte pour garantir que les données sensibles telles que les dossiers médicaux et les transactions financières ne se retrouvent pas entre les mains de personnes disposant de moyens malveillants. Au fil des ans, les développeurs proposent de multiples mesures pour améliorer l'intégrité et la protection des données. L'une des techniques les plus utilisées est le cryptage afin d'empêcher les violations de données.

Même si vous avez utilisé des mesures de protection complexes, certaines personnes peuvent toujours avoir accès à votre système. Le cryptage est une couche de sécurité supplémentaire. PostgreSQL offre un chiffrement à différents niveaux en plus d'offrir une flexibilité dans la protection des données contre la divulgation en raison d'administrateurs non fiables, de connexions réseau non sécurisées et de vol de serveur de base de données. PostgreSQL fournit différentes options de chiffrement telles que :

  • Authentification de l'hôte SSL
  • Chiffrer les données sur un réseau
  • Cryptage des partitions de données
  • Chiffrement pour des colonnes spécifiques
  • Cryptage du stockage des mots de passe
  • Cryptage côté client

Cependant, plus la stratégie de cryptage que vous utilisez est sophistiquée, plus la probabilité que vous soyez bloqué sur vos données est grande. En outre, le processus de lecture sera non seulement difficile, mais nécessitera également de nombreuses ressources pour interroger et décrypter. L'option de cryptage que vous sélectionnez dépend de la nature des données que vous traitez en termes de sensibilité. Le schéma ci-dessous illustre la procédure globale de chiffrement et de déchiffrement des données lors des transactions du serveur.

Cet article traite des différentes manières dont une entreprise peut sécuriser des informations sensibles, mais le principal point d'intérêt sera le chiffrement au niveau de l'instance mentionné précédemment.

Cryptage

Le cryptage est une pratique consistant à coder les données afin qu'elles ne soient plus dans leur format d'origine et ne puissent pas être lues. Il existe 2 types de données autant que la base de données est concernée :les données au repos et les données en mouvement. Lorsque des données sont stockées dans la base de données, elles sont appelées données au repos. À l'autre extrémité, si un client, par exemple, envoie une requête à la base de données, si certaines données sont renvoyées et doivent atteindre le client, on parle alors de données en mouvement. Les deux différents types de données doivent être protégés à l'aide d'une technologie similaire. Par exemple, si une application est développée de telle sorte qu'un utilisateur doit soumettre un mot de passe, ce mot de passe ne sera pas stocké dans la base de données sous forme de texte brut. Certaines procédures de codage sont utilisées pour transformer ce texte brut en une chaîne différente avant le stockage. De plus, si l'utilisateur a besoin d'utiliser ce mot de passe par exemple pour un système de connexion, nous avons besoin d'un moyen de comparer celui qui sera soumis dans le processus de déchiffrement.

Le chiffrement de la base de données peut être mis en œuvre de différentes manières, mais de nombreux développeurs ne tiennent pas compte du niveau de transport. Cependant, les différentes approches sont également associées à différents pièges parmi les temps d'accès aux données ralentis, en particulier lorsque la mémoire virtuelle est fortement sollicitée.

Chiffrement des données au repos

Les données au repos désignent les données inactives stockées physiquement sur le disque. Lorsqu'il s'agit d'héberger une base de données dans un environnement cloud, où le fournisseur de cloud a un accès complet à l'infrastructure, le chiffrement peut être une bonne mesure pour garder le contrôle sur les données. Certaines des stratégies de chiffrement que vous pouvez utiliser sont décrites ci-dessous.

Chiffrement intégral du disque (FDE)

Le concept derrière FDE est généralement de protéger chaque fichier et stockage temporaire pouvant contenir des parties de données. C'est assez efficace surtout quand on a du mal à sélectionner ce qu'on veut protéger ou plutôt si on ne veut pas rater un fichier. Le principal avantage de cette stratégie est qu'elle ne nécessite aucune attention particulière de la part de l'utilisateur final après avoir eu accès au système. Cette approche comporte cependant quelques pièges. Ceux-ci incluent :

  • Le processus de chiffrement et de déchiffrement ralentit le temps d'accès global aux données.
  • Les données peuvent ne pas être protégées lorsque le système est allumé, car les informations seront décryptées et prêtes à être lues. Vous devez donc engager d'autres stratégies de chiffrement telles que le chiffrement basé sur les fichiers.

Chiffrement basé sur les fichiers

Dans ce cas, les fichiers ou répertoires sont chiffrés par le système de fichiers cryptographiques empilables lui-même. Dans PostgreSQL, nous utilisons souvent l'approche pg_crypto comme discuté dans cet article.

Certains des avantages du chiffrement du système de fichiers incluent :

  • Le contrôle des actions peut être appliqué grâce à l'utilisation de la cryptographie à clé publique
  • Gestion séparée des fichiers chiffrés de sorte que les sauvegardes des fichiers modifiés individuellement même sous forme chiffrée, plutôt que la sauvegarde de l'ensemble du volume chiffré.

Cependant, il ne s'agit pas d'une méthode de chiffrement très fiable que vous pouvez utiliser pour vos données en cluster. La raison en est que certaines solutions de chiffrement basées sur des fichiers peuvent laisser un reste de fichiers chiffrés sur lesquels un attaquant peut récupérer. La meilleure approche combinée consiste donc à combiner cela avec le chiffrement intégral du disque.

Chiffrement au niveau de l'instance

Le niveau de l'instance utilise des tampons tels que tous les fichiers composant le cluster PostgreSQL sont stockés sur le disque en tant que chiffrement des données au repos. Ils sont ensuite présentés sous forme de blocs de décryptage lorsqu'ils sont lus à partir du disque dans des tampons partagés. Après avoir écrit ces blocs sur le disque à partir des tampons partagés, ils sont à nouveau chiffrés automatiquement. La base de données est d'abord initialisée avec un chiffrement à l'aide de la commande initdb. Deuxièmement, lors du démarrage, la clé de chiffrement est récupérée par le serveur de l'une ou l'autre de ces deux manières ; via le paramètre pgcrypto.keysetup_command ou via une variable d'environnement.

Téléchargez le livre blanc aujourd'hui PostgreSQL Management &Automation with ClusterControlDécouvrez ce que vous devez savoir pour déployer, surveiller, gérer et faire évoluer PostgreSQLTélécharger le livre blanc

Configuration du chiffrement au niveau de l'instance

Un petit récapitulatif sur la façon dont vous pouvez configurer le chiffrement au niveau de l'instance est décrit dans les étapes ci-dessous :

  1. Vérifiez si vous avez installé "contrib" en utilisant la commande rpm -qa |grep contrib pour le système d'exploitation basé sur RedHat ou dpkg -l |grep contrib pour le système d'exploitation basé sur Debian. S'il ne figure pas dans la liste, installez-le avec apt-get install postgresql-contrib si vous utilisez l'environnement basé sur Debian ou yum install postgresql-contrib si vous utilisez un système d'exploitation basé sur RedHat.
  2. Créer le code PostgreSQL.
  3. Cluster initialisé en établissant la clé de chiffrement et en exécutant la commande initdb
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Démarrez le serveur avec la commande
    $ postgres -D /usr/local/pgsql/data
  5. Définition de la variable d'environnement PGENCRYPTIONKEY avec la commande :
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    La clé peut également être définie via une procédure de lecture de clé personnalisée et plus sécurisée via le paramètre postgresql.conf de la commande "pgcrypto.keysetup_command" mentionné ci-dessus.

Attentes en matière de performances

Le chiffrement se fait toujours au détriment des performances, car il n'y a pas d'options sans coût. Si votre charge de travail est orientée E/S, vous pouvez vous attendre à une performance considérablement réduite, mais ce n'est peut-être pas le cas. Parfois, sur le matériel serveur typique, si l'ensemble de données est moins partagé dans les tampons ou si son temps de séjour dans les tampons est court, l'impact sur les performances peut être négligeable.

Après avoir chiffré ma base de données, j'ai effectué un petit test pour vérifier si le chiffrement affecte vraiment les performances et les résultats sont présentés ci-dessous.

Charge de travail Pas de cryptage Avec chiffrement Coût des performances
Opération d'insertion en masse 26s 68s 161 %
Adaptation en lecture-écriture dans des tampons partagés (dans un rapport de 1:3) 3200TPS 3068TPS 4,13 %
Lecture seule à partir des tampons partagés 2234 TPS 2219 TPS 0,68 %
Lecture seule ne rentre pas dans les tampons partagés 1845 TP 1434 TPS 22,28 %
Lecture-écriture ne rentre pas dans les tampons partagés dans le rapport de 1:3 3422 TPS 2 545 TPS 25,6 %

Comme illustré dans le tableau ci-dessus, nous pouvons voir que la performance est non linéaire puisqu'elle passe parfois de 161 % à 0,7 %. Il s'agit d'une simple indication que les performances de chiffrement sont spécifiques à la charge de travail en plus d'être sensibles au nombre de pages déplacées entre les tampons partagés et le disque. Cela peut également affecter la puissance du processeur en fonction de la charge de travail impliquée. Le chiffrement au niveau de l'instance est une option tout à fait viable et l'approche la plus simple pour un certain nombre d'environnements.

Conclusion

Le cryptage des données est une entreprise importante, en particulier pour les informations sensibles dans la gestion des bases de données. Il existe un certain nombre d'options disponibles pour le chiffrement des données en ce qui concerne PostgreSQL. Lors de la détermination de l'approche à utiliser, il est important de comprendre les données, l'architecture de l'application et l'utilisation des données, car le chiffrement se fait au détriment des performances. De cette façon, vous pourrez comprendre :quand activer le chiffrement, où vos données sont-elles exposées et où sont-elles en sécurité, quelle est la meilleure approche de chiffrement à utiliser.