AccueilBlogTest technique sécurité des données : chiffrement, accès, RGPD technique
Guide recrutement data

Test technique sécurité des données : chiffrement, accès, RGPD technique

La sécurité des données est une responsabilité du Data Engineer, pas seulement du RSSI. En entretien, on évalue la capacité à concevoir des architectures qui protègent les données par défaut.

Data Builder·Juin 2025·6 min de lecture·Data Engineer
Sommaire
  1. Chiffrement des données
  2. Gestion des secrets
  3. Contrôle d accès RBAC
  4. Anonymisation et pseudonymisation
  5. Audit logs
  6. Secure by default
  7. Grille

1Chiffrement at-rest et in-transit

Question discriminante

Quelle est la différence entre chiffrement at-rest et in-transit ? Comment les implémentez-vous ?

  • At-rest — les données sont chiffrées quand elles sont stockées. S3 SSE-S3/SSE-KMS, BigQuery encryption, Snowflake BYOK
  • In-transit — les données sont chiffrées pendant le transport. TLS 1.2+ obligatoire, HTTPS pour les APIs
  • At-use (Confidential Computing) — les données sont chiffrées même pendant le traitement. GCP Confidential VMs
  • CMEK (Customer Managed Encryption Keys) — gérer ses propres clés de chiffrement dans Cloud KMS pour les données très sensibles
  • Chiffrement des colonnes PII — chiffrer individuellement les colonnes contenant des données personnelles (email, IBAN) dans le data warehouse

2Gestion des secrets : jamais en dur

Question discriminante

Quelles sont les règles absolues pour la gestion des secrets dans un pipeline data ?

# JAMAIS : credentials en dur dans le code conn = psycopg2.connect(password='motdepasse123') # NON # Bonne pratique 1 : variables d environnement import os conn = psycopg2.connect(password=os.environ['DB_PASSWORD']) # Bonne pratique 2 : Secret Manager (GCP/AWS) from google.cloud import secretmanager def get_secret(name: str) -> str: client = secretmanager.SecretManagerServiceClient() secret = client.access_secret_version(name=name) return secret.payload.data.decode('UTF-8') # Bonne pratique 3 : Workload Identity (zéro credential) # Le service s authentifie via son identité cloud # Aucun secret à stocker ou à faire tourner # Bonne pratique 4 : .gitignore strict # .env, *.pem, credentials.json, *_key.json

3Contrôle d accès RBAC

Question discriminante

Comment implémentez-vous le principe du moindre privilège dans votre stack data ?

  • Principe du moindre privilège — chaque service et utilisateur n a accès qu à ce dont il a strictement besoin
  • Service accounts dédiés — un service account par pipeline. Jamais un compte admin partagé
  • Rôles Snowflake/BigQuery — créer des rôles par fonction (INGESTION_ROLE, TRANSFORM_ROLE, BI_ROLE) avec des permissions précises
  • Time-limited access — pour les accès temporaires (debug, audit), utiliser des tokens à durée de vie limitée
  • Review des accès — auditer trimestriellement qui a accès à quoi. Révoquer les accès inactifs

4Anonymisation et pseudonymisation techniques

Question discriminante

Comment anonymisez-vous techniquement les données PII dans votre data warehouse ?

-- Pseudonymisation : hashage avec sel (réversible avec le sel) SELECT SHA256(email || 'sel_secret_2025') AS email_hash, SHA256(phone || 'sel_secret_2025') AS phone_hash, -- données non-PII conservées age_bucket, region FROM users; -- Masquage dynamique Snowflake : montrer selon le rôle CREATE OR REPLACE MASKING POLICY email_mask AS (val STRING) RETURNS STRING -> CASE WHEN CURRENT_ROLE() IN ('DATA_ANALYST_PII') THEN val ELSE REGEXP_REPLACE(val, '.+@', '****@') END; ALTER TABLE users MODIFY COLUMN email SET MASKING POLICY email_mask; -- Généralisation : remplacer valeur précise par intervalle SELECT CASE WHEN age < 25 THEN '18-24' WHEN age < 35 THEN '25-34' ELSE '35+' END AS age_bracket FROM users;

5Audit logs : tracer tous les accès

Question discriminante

Comment implémentez-vous les audit logs sur votre data warehouse ?

  • Snowflake Access History — qui a accédé à quelle table, à quelle heure, quelles colonnes
  • BigQuery Data Access audit logs — activés dans Cloud Audit Logs. Chaque requête BigQuery est loguée
  • Rétention des logs — RGPD : conserver les logs d accès suffisamment longtemps pour auditer les incidents
  • Alertes sur accès anormaux — alerter si un utilisateur accède à 100x plus de données que d habitude

6Secure by default : le principe

Question discriminante

Qu est-ce que 'secure by default' dans une architecture data ?

  • Accès refusé par défaut — aucun accès sans grant explicite. Contraire d un bucket S3 public par défaut
  • Chiffrement activé par défaut — activer le chiffrement at-rest sur tous les services dès la création
  • Pas d accès internet direct — les pipelines data tournent dans un VPC sans accès internet. Utiliser des Private Endpoints
  • Scanning automatique des secrets — git-secrets, truffleHog dans la CI pour détecter les credentials avant le push
from google.cloud import secretmanager import os # JAMAIS : credentials en dur # conn = psycopg2.connect(password='motdepasse123') ← NON # Bonne pratique 1 : Secret Manager (GCP) def get_secret(project_id: str, secret_name: str) -> str: client = secretmanager.SecretManagerServiceClient() name = f"projects/{project_id}/secrets/{secret_name}/versions/latest" response = client.access_secret_version(request={"name": name}) return response.payload.data.decode("UTF-8") # Bonne pratique 2 : Workload Identity (zéro credential) # Le pod K8s s'authentifie via son service account → accès GCS sans stocker de clé # Configurer dans GKE : gcloud iam service-accounts add-iam-policy-binding ... # Bonne pratique 3 : Variables d'environnement + secrets K8s import os db_password = os.environ.get("DB_PASSWORD") # injecté par K8s Secret ou HashiCorp Vault # Scanning automatique des secrets dans Git # Pre-commit hook avec detect-secrets : # pip install detect-secrets # detect-secrets scan > .secrets.baseline # detect-secrets audit .secrets.baseline
  • Workload Identity Federation — le standard moderne pour AWS/GCP : les services s'authentifient via leur identité cloud sans aucune clé à stocker. Elimine les rotation de secrets
  • HashiCorp Vault — secrets dynamiques (credentials qui expirent après N minutes), audit complet des accès, multi-cloud. Standard en entreprise pour les secrets centralisés
  • Dynamic masking Snowflake/BigQuery — masquer les colonnes PII (email, IBAN) selon le rôle de l'utilisateur au moment de la requête, sans toucher aux données stockées
  • Column-level encryption — chiffrer individuellement les colonnes PII dans le data warehouse avec des clés gérées par le client (BYOK/CMEK). Protection même si la DB est compromise
  • Audit logs obligatoires — BigQuery Data Access logs, Snowflake Access History, CloudTrail AWS. Rétention minimale 1 an pour la conformité RGPD et les audits de sécurité

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirméSecrets dans variables d env, TLS, RBAC basiqueN a jamais de credentials en dur dans le code, utilise des variables d environnementStocke des mots de passe dans le code ou les logs
SeniorSecret Manager, Workload Identity, dynamic masking, audit logsUtilise Workload Identity ou Secret Manager, a mis en place le dynamic maskingNe sait pas ce qu est Workload Identity

Vous recrutez un Data Engineer soucieux de la sécurité ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.