Skip to main content

Hébergement

Chiffrement données Drupal 11 : API Field Encrypt & KMS

EN BREF

  • Le chiffrement classique des disques par l'hébergeur ne protège pas les bases de données contre les vols de données si le serveur est en cours d'exécution.
  • L'utilisation du module Field Encrypt permet de chiffrer les données sensibles (PII) directement dans Drupal avant leur stockage dans la base MySQL ou MariaDB.
  • La sécurité optimale est atteinte en externalisant les clés de chiffrement vers un service KMS (Key Management Service) externe tel que AWS KMS ou HashiCorp Vault, empêchant tout accès en cas de compromission du serveur web.

La sécurisation des systèmes d'information n'est plus une simple bonne pratique, c'est une obligation légale. Avec le renforcement des exigences réglementaires telles que le RGPD et l'entrée en vigueur de la directive NIS 2, les responsables de la sécurité des systèmes d'information (RSSI) doivent garantir l'intégrité et la confidentialité des données à caractère personnel (PII). Dans l'écosystème Drupal 11, s'appuyer uniquement sur les mécanismes de sécurité de l'infrastructure ne suffit plus pour contrer les menaces modernes.

La vulnérabilité des bases de données compromises : les limites du chiffrement disque

Pourquoi le chiffrement de l'hébergeur ne suffit pas

Une fois le serveur démarré et le volume monté, le système d'exploitation accède aux données en clair. Par conséquent, pour le moteur de base de données MySQL ou MariaDB, et pour l'application Drupal qui s'y connecte, les données ne sont absolument pas protégées par ce mécanisme.

Voici une comparaison des approches de chiffrement pour bien comprendre les enjeux :

  • Chiffrement du disque (infrastructure) : protège contre le vol physique du disque, mais laisse les données vulnérables si le système d'exploitation est compromis en cours d'exécution.
  • Chiffrement applicatif (Drupal Field Encrypt) : chiffre la donnée avant son envoi au serveur de base de données, rendant toute extraction illicite de la base totalement inexploitable sans la clé d'application.

Les vecteurs d'attaque courants : injections sql et vols de dumps

Les attaques ciblant les bases de données visent souvent à exfiltrer un export complet (dump) ou à exploiter des failles de type injection SQL pour lire les données. Si les champs contenant des informations personnelles sont stockés en clair, l'impact d'une telle compromission est désastreux et entraîne des sanctions sévères en cas de non-respect du RGPD ou de la directive NIS 2.

Mise en œuvre du module field encrypt dans Drupal 11

Pour pallier ces vulnérabilités, l'architecture de Drupal 11 permet d'intercepter la sauvegarde des entités pour chiffrer certains champs spécifiques.

Installation et configuration des dépendances

Pour commencer, installez les modules via Composer :

composer require drupal/field_encrypt drupal/key drupal/encrypt

Paramétrage du chiffrement symétrique sur la couche entité

Une fois les modules activés, il est impératif de configurer un profil de chiffrement (encryption profile). Ce profil liera une méthode de chiffrement (par exemple AES-256) à une clé spécifique gérée par le module Key.

$$PLACEHOLDER_IMAGE: capture d'écran de l'interface d'administration de Drupal montrant la configuration d'un profil de chiffrement AES-256$$

Attention : une fois un champ chiffré, il devient impossible d'effectuer des recherches SQL directes (opérateurs LIKE) ou des tris natifs sur celui-ci, car MySQL ne voit qu'une chaîne de caractères cryptée en base 64. Il est donc crucial d'inclure cette contrainte technique dès la phase de conception logicielle.

Déportation des secrets : interfaçage avec un KMS externe

Le maillon faible de toute stratégie de chiffrement reste la gestion de la clé. Si la clé de déchiffrement est stockée dans le code source de Drupal (settings.php) ou dans une variable d'environnement sur le même serveur, un attaquant obtenant un accès au serveur web via une faille d'exécution de code à distance (RCE) récupérera à la fois la base de données et la clé.

Connecter Drupal à AWS KMS ou HashiCorp Vault

Voici un exemple simplifié de l'architecture d'un plugin Drupal interrogeant un coffre-fort externe pour récupérer une clé de chiffrement :

<?php

namespace Drupal\my_kms_provider\Plugin\KeyProvider;

use Drupal\key\Plugin\KeyProviderBase;

/**
 * Fournit une clé depuis un gestionnaire KMS externe.
 *
 * @KeyProvider(
 *   id = "external_kms",
 *   label = @Translation("Service KMS externe (Vault/AWS)"),
 *   description = @Translation("Récupère la clé via une API sécurisée.")
 * )
 */
class ExternalKmsProvider extends KeyProviderBase {

  /**
   * {@inheritdoc}
   */
  public function getKeyValue($key) {
    // Exemple conceptuel d'appel à une API sécurisée
    // En production, utilisez les SDK officiels (ex: aws-sdk-php)
    $client = \Drupal::httpClient();
    try {
      $response = $client->request('GET', 'https://vault.internal/v1/secret/data/drupal_encryption', [
        'headers' => [
          'X-Vault-Token' => getenv('VAULT_TOKEN'),
        ],
      ]);
      $data = json_decode($response->getBody(), TRUE);
      return $data['data']['data']['key_value'];
    }
    catch (\Exception $e) {
      \Drupal::logger('my_kms_provider')->error('Erreur KMS: @msg', ['@msg' => $e->getMessage()]);
      return NULL;
    }
  }
}

Stratégie de rotation des clés et résilience de l'architecture

Il est recommandé de planifier des audits réguliers des politiques d'accès (IAM) qui autorisent le serveur web à interroger le KMS, afin de garantir que seul l'utilisateur système légitime de Drupal possède les droits de lecture sur la clé.

FAQ : vos questions sur le chiffrement dans Drupal

  • Le chiffrement des champs impacte-t-il les performances globales du site Drupal ? Oui, le processus de chiffrement et déchiffrement à la volée consomme des ressources CPU. De plus, l'impossibilité d'utiliser les index de la base de données sur les champs chiffrés peut ralentir certaines vues ou requêtes complexes. Il est conseillé de limiter le chiffrement aux seules données critiques (PII).
  • Que se passe-t-il si je perds l'accès à mon KMS externe ? Si Drupal ne parvient plus à récupérer la clé depuis le KMS, le déchiffrement échouera. Les entités s'afficheront vides ou généreront des erreurs, bloquant ainsi l'accès aux données. Il est indispensable de prévoir une architecture KMS hautement disponible et de maintenir des sauvegardes ultra-sécurisées de la clé maître hors ligne (froid).
  • Est-ce que Field Encrypt est compatible avec le module Search API ? Le chiffrement intervient au niveau du stockage en base. Si vous indexez vos contenus avec Search API (par exemple vers Apache Solr ou Elasticsearch), les données peuvent être envoyées en clair à l'indexeur si l'interception n'est pas correctement configurée. Il faut veiller à auditer le flux de données vers le moteur de recherche pour éviter de contourner la politique de sécurité.
Cyprien Prouvot

Cyprien Prouvot

Associé & Directeur Technique

Associé de l'agence, Cyprien pilote la vision technique et garantit la qualité des développements web. Il encadre les équipes internes et conseille les clients sur les choix d'architecture ou d'outils digitaux les plus pertinents. Il intervient également sur ce blog pour décrypter l'écosystème web, les tendances tech et les bonnes pratiques de conception.


Prêt ? Partez.

Que ce soit pour vous aider à faire le point sur vos besoins ou vous présenter les avantages et fonctionnalités de nos solutions, nous sommes là.
 

Back to top