Qu'est-ce que l'Isolation de Conteneur Améliorée ?
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.
NoteECI 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.
ImportantLa 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 :
- Assurez-vous que votre organisation a un abonnement Docker Business.
- 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.
- Arrêtez et supprimez tous les conteneurs existants.
- Naviguez vers Paramètres > Général dans Docker Desktop.
- À côté de Utiliser l'Isolation de Conteneur Améliorée, sélectionnez la case à cocher.
- Sélectionnez Appliquer et redémarrer pour sauvegarder vos paramètres.
ImportantL'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.
ImportantSé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 ?
TipVous 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.