docker-security
permissions
proxy
reference
socket
socket-proxy
Socket Proxy Permissions Reference
Guide complet des permissions docker-socket-proxy pour sécuriser l'accès à l'API Docker.
Pourquoi utiliser Socket Proxy ?
Le socket Docker (/var/run/docker.sock) donne un accès root complet au système hôte. Le monter directement dans un conteneur est un risque de sécurité majeur.
Docker Socket Proxy filtre les requêtes API et n'autorise que les opérations explicitement permises.
Permissions GET (Lecture)
Variable
Default
Description
CONTAINERS
0
Lire informations containers
IMAGES
0
Lister et inspecter images
NETWORKS
0
Lire informations réseaux
VOLUMES
0
Lister volumes
SERVICES
0
Lire services Swarm
TASKS
0
Lire tasks Swarm
NODES
0
Lire nodes Swarm
INFO
0
Docker system info
EVENTS
0
Stream événements Docker
SECRETS
0
Lire secrets
CONFIGS
0
Lire configs
PLUGINS
0
Lire plugins
DISTRIBUTION
0
Distribution info
SWARM
0
Swarm info
SYSTEM
0
System info complet
SESSION
0
Sessions
VERSION
0
Version Docker
PING
0
Ping API
AUTH
0
Authentification registry
Permissions POST (Écriture)
Variable
Default
Description
POST
0
Autoriser TOUTES les requêtes POST
BUILD
0
Build images
COMMIT
0
Commit containers
EXEC
0
Exécuter commandes dans containers
ALLOW_START
0
Démarrer containers
ALLOW_STOP
0
Arrêter containers
ALLOW_RESTARTS
0
Redémarrer containers
GRPC
0
gRPC (BuildKit)
Configurations par Service
Traefik (Reverse Proxy)
environment :
- CONTAINERS=1 # Labels discovery
- NETWORKS=1 # Network routing
- SERVICES=1 # Swarm services
- TASKS=1 # Swarm tasks
- EVENTS=1 # Auto-discovery
- INFO=1 # System info
- VERSION=1 # Version check
- PING=1 # Health check
Portainer (Full Management)
environment :
- POST=1
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- SERVICES=1
- TASKS=1
- NODES=1
- INFO=1
- EXEC=1
- SYSTEM=1
- EVENTS=1
- BUILD=1
- COMMIT=1
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
- SECRETS=1
- CONFIGS=1
- VERSION=1
- PING=1
Coolify / Dokploy (PaaS)
environment :
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- EXEC=1
- TASKS=1
- BUILD=1
- COMMIT=1
- EVENTS=1
- INFO=1
- PING=1
- POST=1
- VERSION=1
# Disabled
- AUTH=0
- SECRETS=0
- SWARM=0
- CONFIGS=0
- NODES=0
- PLUGINS=0
- SERVICES=0
- SYSTEM=0
Arcane (Docker Manager)
environment :
- EVENTS=1
- PING=1
- VERSION=1
- CONTAINERS=1
- EXEC=1
- IMAGES=1
- INFO=1
- NETWORKS=1
- VOLUMES=1
- POST=1
# Disabled
- AUTH=0
- SECRETS=0
- BUILD=0
- COMMIT=0
- CONFIGS=0
- DISTRIBUTION=0
- GRPC=0
- NODES=0
- PLUGINS=0
- SERVICES=0
- SESSION=0
- SWARM=0
- SYSTEM=0
- TASKS=0
Gitea Actions Runner (CI/CD)
environment :
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- EXEC=1
- TASKS=1
- BUILD=1
- EVENTS=1
- INFO=1
- PING=1
- POST=1
- VERSION=1
# Disabled
- AUTH=0
- SECRETS=0
- SWARM=0
Glances (Monitoring)
environment :
- CONTAINERS=1
- INFO=1
- EVENTS=1
- VERSION=1
- PING=1
Ofelia (Cron Jobs)
environment :
- POST=1
- CONTAINERS=1
- EXEC=1
- ALLOW_START=1
- ALLOW_RESTARTS=1
Watchtower (Auto-update)
environment :
- POST=1
- CONTAINERS=1
- IMAGES=1
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
Prometheus/cAdvisor (Metrics)
environment :
- CONTAINERS=1
- INFO=1
- VERSION=1
Dozzle (Log Viewer)
environment :
- CONTAINERS=1
- EVENTS=1
NeuVector (Container Security)
environment :
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- INFO=1
- EVENTS=1
- VERSION=1
- PING=1
Template Complet
services :
socket-proxy :
image : tecnativa/docker-socket-proxy:latest
container_name : socket-proxy
restart : unless-stopped
volumes :
- /var/run/docker.sock:/var/run/docker.sock:ro
environment :
# Logging
- LOG_LEVEL=info
# Read permissions
- CONTAINERS=1
- IMAGES=0
- NETWORKS=1
- VOLUMES=0
- SERVICES=1
- TASKS=1
- NODES=0
- INFO=1
- EVENTS=1
- SECRETS=0
- CONFIGS=0
- PLUGINS=0
- DISTRIBUTION=0
- SWARM=0
- SYSTEM=0
- SESSION=0
- VERSION=1
- PING=1
- AUTH=0
# Write permissions
- POST=0
- BUILD=0
- COMMIT=0
- EXEC=0
- ALLOW_START=0
- ALLOW_STOP=0
- ALLOW_RESTARTS=0
- GRPC=0
networks :
- socket-proxy
# Security hardening
read_only : true
tmpfs :
- /run
security_opt :
- no-new-privileges:true
cap_drop :
- ALL
healthcheck :
test : [ "CMD" , "wget" , "--spider" , "-q" , "http://localhost:2375/version" ]
interval : 30s
timeout : 5s
retries : 3
networks :
socket-proxy :
driver : bridge
internal : true
Connexion depuis un conteneur
services :
my-app :
image : my-app:latest
environment :
- DOCKER_HOST=tcp://socket-proxy:2375
depends_on :
socket-proxy :
condition : service_healthy
networks :
- socket-proxy
Sécurité
Bonnes pratiques
Réseau interne : Toujours internal: true pour le réseau socket-proxy
Lecture seule : Monter le socket en :ro
POST désactivé : POST=0 par défaut, activer uniquement si nécessaire
Permissions minimales : N'activer que le strict nécessaire
Conteneur read-only : read_only: true sur le proxy
Capabilities : cap_drop: ALL et no-new-privileges: true
Health check : Vérifier que le proxy répond
Audit des permissions
# Lister les conteneurs avec accès au socket
docker ps --filter "volume=/var/run/docker.sock" --format "{{.Names}}"
# Vérifier les permissions d'un socket-proxy
docker exec socket-proxy env | grep -E "^(CONTAINERS|IMAGES|POST|EXEC)="
Risques à éviter
Permission
Risque si activé
POST=1
Création/suppression de conteneurs
EXEC=1
Exécution de commandes arbitraires
VOLUMES=1 + POST=1
Montage de volumes sensibles
AUTH=1
Accès aux credentials registry
SECRETS=1
Lecture des secrets Swarm
Projets utilisant Socket Proxy
Projet
Répertoire
Permissions
Traefik
compose/01-infrastructure/traefik/
Lecture seule
Portainer
compose/02-container-orchestration/portainer/
Full management
Coolify
compose/02-container-orchestration/coolify/
PaaS
Dokploy
compose/02-container-orchestration/dokploy/
PaaS
Arcane
compose/02-container-orchestration/arcane/
Docker Manager
Gitea Runner
compose/08-code-management/gitea/
CI/CD
Glances
compose/05-monitoring-reporting/observability/monitoring/glances/
Monitoring
Références