⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Qu'est-ce que l'Isolation de Conteneur Améliorée ?

Subscription: Business
For: Administrators

L'Isolation de Conteneur Améliorée (ECI) fournit une couche supplémentaire de sécurité pour empêcher les charges de travail malveillantes s'exécutant dans les conteneurs de compromettre Docker Desktop ou l'hôte.

Elle utilise une variété de techniques avancées pour durcir l'isolation des conteneurs, mais sans impacter la productivité des développeurs.

L'Isolation de Conteneur Améliorée assure une isolation de conteneur plus forte et verrouille également toutes les configurations de sécurité qui ont été créées par les administrateurs, par exemple via les politiques de Gestion d'Accès de Registre ou avec la Gestion des Paramètres.

Note

ECI s'ajoute aux autres techniques de sécurité de conteneur utilisées par Docker. Par exemple, les Capacités Linux réduites, seccomp, et AppArmor.

À qui s'adresse-t-elle ?

  • Pour les organisations et développeurs qui veulent prévenir les attaques de conteneurs et réduire les vulnérabilités dans les environnements de développement.
  • Pour les organisations qui veulent assurer une isolation de conteneur plus forte qui est facile et intuitive à implémenter sur les machines des développeurs.

Que se passe-t-il quand l'Isolation de Conteneur Améliorée est activée ?

Quand l'Isolation de Conteneur Améliorée est activée, les fonctionnalités et techniques de sécurité suivantes sont activées :

  • Tous les conteneurs utilisateur sont automatiquement exécutés dans des espaces de noms utilisateur Linux qui assurent une isolation plus forte. Chaque conteneur s'exécute dans un espace de noms utilisateur Linux dédié.
  • L'utilisateur root dans le conteneur mappe vers un utilisateur non privilégié à l'intérieur de la VM Linux Docker Desktop.
  • Les conteneurs deviennent plus difficiles à compromettre. Par exemple, les appels système sensibles sont vérifiés et des portions de /proc et /sys sont émulées à l'intérieur du conteneur.
  • Les utilisateurs peuvent continuer à utiliser les conteneurs comme d'habitude, incluant le montage de répertoires hôte, volumes, etc.
  • Aucun changement dans la façon dont les développeurs exécutent les conteneurs, et aucune image de conteneur spéciale n'est requise.
  • Les conteneurs privilégiés (par ex., drapeau --privileged) fonctionnent, mais ils ne sont privilégiés que dans l'espace de noms utilisateur Linux du conteneur, pas dans la VM Docker Desktop. Par conséquent, ils ne peuvent pas être utilisés pour compromettre la VM Docker Desktop.
  • Docker-in-Docker et même Kubernetes-in-Docker fonctionnent, mais s'exécutent sans privilège à l'intérieur de la VM Linux Docker Desktop.

De plus, les restrictions suivantes sont imposées :

  • Les conteneurs ne peuvent plus partager d'espaces de noms avec la VM Docker Desktop (par ex., --network=host, --pid=host sont interdits).
  • Les conteneurs ne peuvent plus modifier les fichiers de configuration à l'intérieur de la VM Docker Desktop (par ex., monter tout répertoire VM dans le conteneur est interdit).
  • Les conteneurs ne peuvent plus accéder au Docker Engine. Par exemple, monter le socket du Docker Engine dans le conteneur est restreint ce qui empêche les conteneurs malveillants de prendre le contrôle du Docker Engine. Les administrateurs peuvent assouplir ceci pour les images de conteneur de confiance.
  • L'accès console à la VM Docker Desktop est interdit pour tous les utilisateurs.

Ces fonctionnalités et restrictions assurent que les conteneurs sont mieux sécurisés au runtime, avec un impact minimal sur l'expérience développeur et la productivité. Les développeurs peuvent continuer à utiliser Docker Desktop comme d'habitude, mais les conteneurs qu'ils lancent sont plus fortement isolés.

Pour plus d'informations sur comment fonctionne l'Isolation de Conteneur Améliorée, voir Comment cela fonctionne.

Important

La protection ECI pour les constructions Docker et Kubernetes dans Docker Desktop varie selon la version Docker Desktop. Les versions ultérieures incluent plus de protection que les versions antérieures. De plus, ECI ne protège pas encore les conteneurs d'extension. Pour plus d'informations sur les limitations connues et contournements, voir FAQ.

Comment activer l'Isolation de Conteneur Améliorée ?

En tant que développeur

Pour activer l'Isolation de Conteneur Améliorée en tant que développeur :

  1. Assurez-vous que votre organisation a un abonnement Docker Business.
  2. Connectez-vous à votre organisation dans Docker Desktop. Ceci assurera que la fonctionnalité ECI est disponible pour vous dans le menu Paramètres de Docker Desktop.
  3. Arrêtez et supprimez tous les conteneurs existants.
  4. Naviguez vers Paramètres > Général dans Docker Desktop.
  5. À côté de Utiliser l'Isolation de Conteneur Améliorée, sélectionnez la case à cocher.
  6. Sélectionnez Appliquer et redémarrer pour sauvegarder vos paramètres.
Important

L'Isolation de Conteneur Améliorée ne protège pas les conteneurs créés avant d'activer ECI. Pour plus d'informations sur les limitations connues et contournements, voir FAQ.

En tant qu'administrateur

Prérequis

Vous devez d'abord forcer la connexion pour vous assurer que tous les développeurs Docker Desktop s'authentifient avec votre organisation. Puisque la Gestion des Paramètres nécessite un abonnement Docker Business, la connexion forcée garantit que seuls les utilisateurs authentifiés ont accès et que la fonctionnalité prend effet de façon cohérente à travers tous les utilisateurs, même si elle peut encore fonctionner sans connexion forcée.

Configuration

Créez et configurez le fichier admin-settings.json et spécifiez :

{
  "configurationFileVersion": 2,
  "enhancedContainerIsolation": {
    "value": true,
    "locked": true
  }
}

Définir "value": true assure qu'ECI est activé par défaut. En définissant "locked": true, ECI ne peut pas être désactivé par les développeurs. Si vous voulez donner aux développeurs la capacité de désactiver la fonctionnalité, définissez "locked": false.

De plus, vous pouvez aussi configurer les permissions de montage de socket Docker pour les conteneurs.

Pour que ceci prenne effet :

  • Sur une nouvelle installation, les développeurs doivent lancer Docker Desktop et s'authentifier à leur organisation.
  • Sur une installation existante, les développeurs doivent quitter Docker Desktop via le menu Docker, puis relancer Docker Desktop. S'ils sont déjà connectés, ils n'ont pas besoin de se reconnecter pour que les changements prennent effet.
Important

Sélectionner Redémarrer depuis le menu Docker n'est pas suffisant car cela redémarre seulement certains composants de Docker Desktop.

Que voient les utilisateurs quand ce paramètre est appliqué par un administrateur ?

Tip

Vous pouvez maintenant aussi configurer ces paramètres dans la Console d'Administration Docker.

Quand l'Isolation de Conteneur Améliorée est activée, les utilisateurs voient :

  • Utiliser l'Isolation de Conteneur Améliorée activé dans Paramètres > Général.
  • Les conteneurs s'exécutent dans un espace de noms utilisateur Linux.

Pour vérifier, exécutez :

$ docker run --rm alpine cat /proc/self/uid_map

La sortie suivante s'affiche :

         0     100000      65536

Ceci indique que l'utilisateur root du conteneur (0) mappe vers un utilisateur non privilégié (100000) dans la VM Docker Desktop, et que le mappage s'étend pour une plage de 64K ID-utilisateur. Si un processus de conteneur devait échapper au conteneur, il se trouverait sans privilèges au niveau VM. Le mappage d'ID-utilisateur varie avec chaque nouveau conteneur, car chaque conteneur obtient une plage exclusive d'ID-Utilisateur hôte pour l'isolation. Le mappage d'ID-utilisateur est automatiquement géré par Docker Desktop. Pour plus de détails, voir Comment fonctionne l'Isolation de Conteneur Améliorée.

En contraste, sans ECI l'espace de noms utilisateur Linux n'est pas utilisé pour les conteneurs, ce qui affiche :

         0          0 4294967295

Ceci signifie que l'utilisateur root dans le conteneur (0) est en fait l'utilisateur root dans la VM Docker Desktop (0) ce qui réduit l'isolation du conteneur.

Puisque l'Isolation de Conteneur Améliorée utilise le runtime de conteneur Sysbox intégré dans la VM Linux Docker Desktop, une autre façon de déterminer si un conteneur s'exécute avec l'Isolation de Conteneur Améliorée est d'utiliser docker inspect :

$ docker inspect --format='{{.HostConfig.Runtime}}' my_container

Cela affiche :

sysbox-runc

Sans Isolation de Conteneur Améliorée, docker inspect affiche runc, qui est le runtime OCI standard.

Plus de ressources