Compartir comentarios
Las respuestas se generan en base a la documentación.

Contenedores en entornos aislados (Air-Gapped)

Suscripción: Business
Para: Administradores

Los contenedores en entornos aislados (Air-gapped containers) te permiten restringir el acceso a la red de los contenedores controlando dónde pueden enviar y recibir datos. Esta característica aplica reglas de proxy personalizadas al tráfico de red de los contenedores, lo que ayuda a proteger entornos donde los contenedores no deben tener un acceso ilimitado a Internet.

Docker Desktop puede configurar el tráfico de red de los contenedores para aceptar conexiones, rechazar conexiones o canalizar el tráfico a través de proxies HTTP o SOCKS. Tú controlas a qué puertos TCP se aplica la política y si se debe utilizar un único proxy o políticas por destino a través de archivos de Autoconfiguración de Proxy (Proxy Auto-Configuration - PAC).

¿Quién debería usar contenedores en entornos aislados?

Utiliza contenedores en entornos aislados si:

  • Tu organización requiere que los contenedores se comuniquen únicamente con servicios internos aprobados.
  • Necesitas cumplir con estándares de conformidad que exigen aislamiento de red (como SOC 2, ISO 27001 o PCI DSS).
  • Deseas evitar que los contenedores filtren datos o accedan a puntos finales externos no aprobados durante las compilaciones o en el tiempo de ejecución.

Cómo funcionan los contenedores en entornos aislados

Los contenedores en entornos aislados interceptan el tráfico de red del contenedor y aplican reglas de proxy:

  1. Intercepción del tráfico: Docker Desktop intercepta todas las conexiones de red salientes de los contenedores.
  2. Filtrado de puertos: Solo el tráfico en los puertos especificados (transparentPorts) está sujeto a las reglas del proxy.
  3. Evaluación de reglas: Las reglas del archivo PAC o las configuraciones de proxy estáticas determinan cómo manejar cada conexión.
  4. Gestión de conexiones: El tráfico se permite directamente, se enruta a través de un proxy o se bloquea según las reglas.

Algunas consideraciones importantes son:

  • El ajuste de proxy existente sigue aplicándose al tráfico de la aplicación Docker Desktop en el host.
  • Si falla la descarga del archivo PAC, los contenedores bloquean las solicitudes a las URL de destino.
  • El nombre de host está disponible para los puertos 80 y 443, pero solo se dispone de direcciones IP para otros puertos.

Requisitos previos

Antes de configurar contenedores en entornos aislados, debes tener:

  • La imposición del inicio de sesión habilitada para asegurar que los usuarios se autentiquen en tu organización.
  • Una suscripción de Docker Business.
  • Configurada la Gestión de Ajustes con el archivo admin-settings.json para administrar las políticas de la organización.

Configurar contenedores en entornos aislados

Agrega el proxy de contenedores a tu archivo admin-settings.json. Por ejemplo:

{
  "configurationFileVersion": 2,
  "containersProxy": {
    "locked": true,
    "mode": "manual",
    "http": "",
    "https": "",
    "exclude": [],
    "pac": "http://192.168.1.16:62039/proxy.pac",
    "transparentPorts": "*"
  }
}

Parámetros de configuración

El ajuste containersProxy controla las políticas de red aplicadas al tráfico de contenedores:

ParámetroDescripciónValor
lockedEvita que los desarrolladores anulen los ajustestrue (bloqueado), false (por defecto)
modeMétodo de configuración de proxysystem (usar proxy del sistema), manual (personalizado)
httpServidor proxy HTTPURL (ej., "http://proxy.company.com:8080")
httpsServidor proxy HTTPSURL (ej., "https://proxy.company.com:8080")
excludeOmitir proxy para estas direccionesMatriz de nombres de host/IPs
pacURL del archivo de Autoconfiguración de ProxyURL al archivo PAC
transparentPortsPuertos sujetos a las reglas de proxyPuertos separados por comas o comodín ("*")

Ejemplos de configuración

Bloquear todo el acceso externo:

"containersProxy": {
  "locked": true,
  "mode": "manual",
  "http": "",
  "https": "",
  "exclude": [],
  "transparentPorts": "*"
}

Permitir servicios internos específicos:

"containersProxy": {
  "locked": true,
  "mode": "manual",
  "http": "",
  "https": "",
  "exclude": ["internal.company.com", "10.0.0.0/8"],
  "transparentPorts": "80,443"
}

Enrutar a través del proxy corporativo:

"containersProxy": {
  "locked": true,
  "mode": "manual",
  "http": "http://corporate-proxy.company.com:8080",
  "https": "http://corporate-proxy.company.com:8080",
  "exclude": ["localhost", "*.company.local"],
  "transparentPorts": "*"
}

Archivos de Autoconfiguración de Proxy (PAC)

Los archivos PAC proporcionan un control detallado sobre el acceso a la red de los contenedores al definir reglas para diferentes destinos.

Estructura básica de un archivo PAC

function FindProxyForURL(url, host) {
	if (localHostOrDomainIs(host, 'internal.corp')) {
		return "PROXY 10.0.0.1:3128";
	}
	if (isInNet(host, "192.168.0.0", "255.255.255.0")) {
	    return "DIRECT";
	}
    return "PROXY reject.docker.internal:1234";
}

Consideraciones generales

  • El formato del parámetro URL en la función FindProxyForURL es http://host_o_ip:puerto o https://host_o_ip:puerto.

  • Si tienes un contenedor interno que intenta acceder a https://docs-docker.esdocu.com/enterprise/security/hardened-desktop/air-gapped-containers, el servicio proxy de Docker enviará docs-docker.esdocu.com para el valor del host y https://docs-docker.esdocu.com:443 para el valor de la URL a FindProxyForURL. Si utilizas la función shExpMatch en tu archivo PAC de la siguiente manera:

    if(shExpMatch(url, "https://docs-docker.esdocu.com:443/enterprise/security/*")) return "DIRECT";
    

    La función shExpMatch fallará; en su lugar, utiliza:

    if (host == docs-docker.esdocu.com && url.indexOf(":443") > 0) return "DIRECT";
    

Valores de retorno de un archivo PAC

Valor de retornoAcción
PROXY host:portEnrutar a través del proxy HTTP en el host y puerto especificados
SOCKS5 host:portEnrutar a través del proxy SOCKS5 en el host y puerto especificados
DIRECTPermitir conexión directa sin proxy
PROXY reject.docker.internal:any_portBloquear la solicitud por completo

Ejemplo avanzado de archivo PAC

function FindProxyForURL(url, host) {
  // Permitir el acceso a Docker Hub para imágenes base aprobadas
  if (dnsDomainIs(host, ".docker.io") || host === "docker.io") {
    return "PROXY corporate-proxy.company.com:8080";
  }

  // Permitir repositorios de paquetes internos
  if (localHostOrDomainIs(host, 'nexus.company.com') ||
      localHostOrDomainIs(host, 'artifactory.company.com')) {
    return "DIRECT";
  }

  // Permitir herramientas de desarrollo en puertos específicos
  if (url.indexOf(":3000") > 0 || url.indexOf(":8080") > 0) {
    if (isInNet(host, "10.0.0.0", "255.0.0.0")) {
      return "DIRECT";
    }
  }

  // Bloquear el acceso al localhost del desarrollador
  if (host === "host.docker.internal" || host === "localhost") {
    return "PROXY reject.docker.internal:1234";
  }

  // Bloquear todo el demás acceso externo
  return "PROXY reject.docker.internal:1234";
}

Verificar la configuración de contenedores en entornos aislados

Después de aplicar la configuración, comprueba que las restricciones de red del contenedor funcionen:

Probar acceso bloqueado:

$ docker run --rm alpine wget -O- https://www.google.com
# Debería fallar o agotar el tiempo de espera (timeout) según tus reglas de proxy

Probar acceso permitido:

$ docker run --rm alpine wget -O- https://internal.company.com
# Debería completarse correctamente si internal.company.com está en tu lista de exclusión o reglas de PAC

Probar enrutamiento de proxy:

$ docker run --rm alpine wget -O- https://docker.io
# Debería completarse correctamente si se enruta a través del proxy aprobado

Consideraciones de seguridad

  • Apicación de políticas de red: Los contenedores en entornos aislados funcionan a nivel de Docker Desktop. Los usuarios avanzados podrían eludir las restricciones a través de diversos medios, por lo que debes considerar controles adicionales a nivel de red para entornos de alta seguridad.
  • Impacto en el flujo de trabajo de desarrollo: Las políticas excesivamente restrictivas pueden interrumpir los flujos de trabajo de desarrollo legítimos. Realiza pruebas exhaustivas y proporciona excepciones claras para los servicios necesarios.
  • Gestión de archivos PAC: Aloja los archivos PAC en una infraestructura interna confiable. Las descargas fallidas de PAC resultan en un bloqueo del acceso a la red de los contenedores.
  • Consideraciones de rendimiento: Los archivos PAC complejos con muchas reglas pueden afectar el rendimiento de red del contenedor. Mantén las reglas simples y eficientes.

Siguientes pasos