Aller au contenu
Culture DevOps high
🚧 Section en cours de réécriture — Le contenu est en cours de restructuration et peut évoluer.

Responsabilités partagées : comprendre qui fait quoi en sécurité

16 min de lecture

Quand un incident de sécurité survient, la première question est souvent : « C’est la faute de qui ? » Dans les architectures modernes — cloud, conteneurs, services managés — la réponse n’est jamais simple. La sécurité est une responsabilité partagée entre plusieurs acteurs. Comprendre cette répartition est essentiel pour éviter les angles morts où personne ne se sent responsable.

Une erreur fréquente consiste à croire que l’utilisation d’un service externe transfère la responsabilité de sécurité. C’est l’un des mythes les plus dangereux du cloud et des services managés.

On entend souvent : « On est dans le cloud, c’est le fournisseur qui gère la sécurité. » Ou encore : « On utilise un service managé, on n’a plus à s’en occuper. » Certains pensent même : « Le prestataire est certifié ISO 27001, on est couverts » ou « C’est un logiciel open source maintenu par une grande communauté, c’est sûr. »

Ces croyances créent des zones grises où personne ne protège réellement les actifs critiques. Le fournisseur sécurise son périmètre, pas le vôtre.

La responsabilité partagée (shared responsibility) définit une frontière claire entre ce que le fournisseur sécurise et ce que le client doit sécuriser.

Imaginez un immeuble en location. Le propriétaire (le fournisseur) est responsable de la structure : murs porteurs, toiture, parties communes, ascenseurs. Le locataire (le client) est responsable de son appartement : serrures, alarme, ce qu’il stocke à l’intérieur.

Si quelqu’un entre par une fenêtre que le locataire a laissée ouverte, ce n’est pas la faute du propriétaire — même si l’immeuble est « sécurisé ».

Le fournisseur gère l’infrastructure physique (datacenters, serveurs, réseau) et la virtualisation (hyperviseur, isolation). Pour le système d’exploitation, cela dépend du service : en IaaS c’est le client, en PaaS c’est partagé. Les applications (code, dépendances, configuration) et les données (classification, chiffrement, accès) sont toujours de la responsabilité du client. Pour les identités, le fournisseur propose le service d’authentification, mais la gestion des comptes, le MFA et les mots de passe restent côté client.

Le fournisseur gère le matériel et la virtualisation. Le client gère tout le reste : système d’exploitation, middleware, applications, données. C’est le modèle qui laisse le plus de contrôle au client — mais aussi le plus de responsabilités.

Ce que le client doit faire : Patcher le système d’exploitation. Configurer les pare-feux et groupes de sécurité. Durcir les services exposés. Gérer les accès et les identités. Chiffrer les données sensibles. Sauvegarder et restaurer.

Ce que le fournisseur NE fait PAS : Mettre à jour vos serveurs. Fermer les ports que vous avez ouverts. Supprimer les comptes que vous avez créés. Détecter les intrusions dans vos applications.

Avec les conteneurs, les responsabilités se fragmentent davantage sur plusieurs couches. L’image de base est de la responsabilité de l’éditeur (par exemple la distribution Linux). L’image applicative est construite par l’équipe de développement. Le runtime conteneur est géré par l’équipe plateforme ou ops. L’orchestrateur (Kubernetes) est configuré par l’équipe plateforme. La configuration du workload revient à l’équipe applicative.

Une vulnérabilité dans l’image de base n’est pas de la responsabilité de l’équipe applicative — mais c’est son problème si elle n’est pas corrigée.

L’utilisation de composants open source crée une responsabilité implicite souvent mal comprise. La communauté développe et maintient le code. L’utilisateur choisit de l’intégrer et assume les conséquences. Personne n’est contractuellement responsable des failles.

Si une vulnérabilité est découverte dans une bibliothèque que vous utilisez, c’est votre responsabilité de la mettre à jour ou de l’atténuer — pas celle du mainteneur bénévole.

Externaliser une fonction ne supprime pas la responsabilité — c’est un principe fondamental souvent ignoré. Le prestataire est responsable de l’exécution du service. Le client reste responsable du choix du prestataire et de la supervision. En cas d’incident, les deux peuvent être impliqués.

Un hébergeur compromis peut être fautif techniquement, mais le client qui n’a pas vérifié les pratiques de sécurité ou qui n’avait pas de plan B partage la responsabilité du résultat.

Une entreprise stocke des données clients dans un service de stockage cloud. Un jour, ces données sont accessibles publiquement sur Internet.

Investigation : Le bucket de stockage était configuré en accès public. Aucune alerte n’était configurée sur les changements de permissions. Le fournisseur cloud avait averti de la configuration risquée (notification ignorée).

Qui est responsable ? Le fournisseur a fourni un service sécurisable et a alerté. Le client a mal configuré et ignoré l’avertissement. Verdict : responsabilité client.

Le fournisseur n’a pas à empêcher ses clients de faire des choix (légitimes dans certains cas, comme l’hébergement public).

  1. Cartographier les acteurs

    Pour chaque système, identifier : Qui développe le code ? Qui opère l’infrastructure ? Qui configure les accès ? Qui supervise la sécurité ? Qui répond aux incidents ?

  2. Documenter les frontières

    Formaliser explicitement : Ce que le fournisseur garantit (SLA, certifications). Ce que le client doit faire (configuration, surveillance). Les zones grises à clarifier.

  3. Éviter les hypothèses

    Ne jamais supposer que « quelqu’un d’autre s’en occupe ». Si ce n’est pas écrit et validé, c’est probablement une zone grise non couverte.

  4. Tester les frontières

    Valider régulièrement que chaque partie assume ses responsabilités : audit des configurations client, revue des SLA et engagements fournisseur, exercices de réponse à incident impliquant tous les acteurs.

Les trois grands fournisseurs cloud (AWS, Azure, GCP) partagent le même principe de responsabilité partagée, mais avec des nuances importantes.

AWS utilise le terme “Security OF the cloud” (leur responsabilité) vs “Security IN the cloud” (votre responsabilité).

CoucheAWSClient
Datacenters physiques✅ Sécurité physique, alimentation, refroidissement
Réseau global✅ Backbone, edge locations, DDoS L3/L4
Hyperviseur✅ Isolation des instances
EC2 (IaaS)Infrastructure matérielle✅ OS, patching, firewall, données
RDS (PaaS)✅ Patching DB, backups (si activés)✅ Configuration, utilisateurs, données
S3 (Stockage)✅ Durabilité, disponibilité✅ Bucket policies, ACLs, chiffrement
Lambda (Serverless)✅ Runtime, scaling, infra✅ Code, dépendances, permissions IAM
IAM✅ Service disponible et sécurisé✅ Politiques, utilisateurs, MFA

Azure distingue les responsabilités selon le modèle de service :

ResponsabilitéSaaSPaaSIaaSOn-prem
Information et donnéesClientClientClientClient
Appareils (mobile/PC)ClientClientClientClient
Comptes et identitésClientClientClientClient
Infrastructure d’identitéPartagéPartagéClientClient
ApplicationsMicrosoftClientClientClient
Contrôles réseauMicrosoftPartagéClientClient
Système d’exploitationMicrosoftMicrosoftClientClient
Hôtes physiquesMicrosoftMicrosoftMicrosoftClient
Réseau physiqueMicrosoftMicrosoftMicrosoftClient
Datacenter physiqueMicrosoftMicrosoftMicrosoftClient

Google Cloud va plus loin avec le concept de “Shared Fate” : Google s’engage à aider les clients à réussir leur sécurité, pas seulement à délimiter les responsabilités.

ServiceGoogle CloudClient
Compute EngineInfra, hyperviseurOS, applications, données
GKE (Kubernetes)Control plane, upgradesWorkloads, RBAC, network policies
Cloud RunRuntime, scalingCode, dépendances, secrets
Cloud StorageDurabilité, chiffrement au reposIAM, ACLs, classification données
BigQueryInfrastructure, chiffrementAccès, requêtes, données

Modèle Kubernetes — 5 couches de responsabilité

Section intitulée « Modèle Kubernetes — 5 couches de responsabilité »

Avec Kubernetes, les responsabilités se fragmentent sur 5 couches distinctes. La répartition dépend de si vous utilisez un service managé ou un cluster auto-géré.

CoucheManaged K8s (EKS/GKE/AKS)Self-managed
1. Cluster (control plane)✅ ProviderClient
2. Nodes (workers)Partagé (AMI/images)Client
3. Réseau (CNI, policies)PartagéClient
4. Workloads (pods, deployments)ClientClient
5. Images conteneursClientClient

Couche 1 — Control Plane :

  • En managé : le provider gère etcd, API server, scheduler, controller-manager
  • Vous gardez la responsabilité de la configuration RBAC

Couche 2 — Nodes :

  • En managé : le provider fournit des AMI/images sécurisées
  • Vous devez activer les mises à jour automatiques et surveiller les CVE

Couche 3 — Réseau :

  • Network Policies sont de VOTRE responsabilité (désactivées par défaut !)
  • Le provider gère le CNI sous-jacent mais pas vos règles

Couche 4 — Workloads :

  • SecurityContext, PodSecurityPolicy/Standards : votre responsabilité
  • Secrets : votre responsabilité (même si stockés dans etcd managé)

Couche 5 — Images :

  • Scanner les images : votre responsabilité
  • Corriger les CVE dans vos images : votre responsabilité
  • Le runtime est sécurisé par le provider, pas le contenu

Serverless — Moins de responsabilités, pas zéro

Section intitulée « Serverless — Moins de responsabilités, pas zéro »

Le Serverless (Lambda, Cloud Functions, Azure Functions) réduit drastiquement le périmètre client, mais ne l’élimine pas. C’est le modèle où le fournisseur prend en charge le plus de responsabilités — mais attention, « moins de responsabilités » ne signifie pas « zéro responsabilité ». Le tableau ci-dessous détaille précisément ce qui reste à votre charge.

AspectProviderClient
Infrastructure✅ Serveurs, scaling, disponibilité
Runtime✅ Patching, sécurité du runtime
Code✅ Logique, vulnérabilités
Dépendances✅ Librairies, CVE
Permissions✅ IAM roles (souvent trop permissifs)
SecretsService disponible✅ Gestion, rotation
Données✅ Chiffrement, classification

Anti-pattern Serverless : donner *:* (toutes permissions) à une Lambda “parce que c’est plus simple”. Le moindre privilège s’applique encore plus en Serverless car les fonctions sont souvent exposées publiquement.

La matrice RACI pour clarifier les responsabilités

Section intitulée « La matrice RACI pour clarifier les responsabilités »

Quand plusieurs équipes interviennent sur un même système, les responsabilités deviennent floues. La matrice RACI est un outil simple mais puissant pour formaliser qui fait quoi et éviter que des tâches critiques tombent entre les mailles du filet.

LettreSignificationDescription
RResponsibleFait le travail
AAccountableResponsable final (1 seul par tâche)
CConsultedDonne un avis avant
IInformedInformé après

Exemple : Gestion d’une vulnérabilité dans une image conteneur

Section intitulée « Exemple : Gestion d’une vulnérabilité dans une image conteneur »

Prenons un cas concret : une CVE critique est découverte dans une image conteneur utilisée en production. Qui doit faire quoi ? Sans matrice RACI, chaque équipe attend que « l’autre » s’en occupe, et la faille reste ouverte pendant des semaines.

ActionDevOpsSécuritéManagement
Détecter la CVEIRAI
Évaluer l’impactCRAI
Corriger l’imageRCII
Valider le correctifCRAI
Décider du déploiementICCA
DéployerRAII

Sans cette clarification, la CVE reste dans les limbes pendant que chaque équipe attend que “l’autre” s’en occupe.

Toujours partagée

Aucun fournisseur ne prend en charge 100% de la sécurité. Il reste toujours une part client.

Pas de transfert automatique

Utiliser un service externe ne transfère pas la responsabilité. Le client reste responsable de ses données, accès et configurations.

Frontières variables

IaaS laisse plus de responsabilités au client que PaaS, qui en laisse plus que SaaS.

Zones grises = vulnérabilités

Si personne ne sait qui est responsable d’un aspect, personne ne s’en occupe.

Documenter et tester

Les hypothèses implicites sont la source des incidents les plus graves. Formaliser les frontières.