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

Bloquear el swarm para proteger su clave de cifrado

Los registros de Raft utilizados por los administradores de swarm están cifrados en disco por defecto. Este cifrado en reposo protege la configuración y los datos de tus servicios de los atacantes que obtengan acceso a los registros de Raft cifrados. Una de las razones por las que se introdujo esta característica fue para dar soporte a la funcionalidad de secretos de Docker.

Cuando Docker se reinicia, tanto la clave TLS utilizada para cifrar la comunicación entre los nodos del swarm como la clave utilizada para cifrar y descifrar los registros de Raft en disco se cargan en la memoria de cada nodo administrador. Docker tiene la capacidad de proteger la clave de cifrado TLS mutua y la clave utilizada para cifrar y descifrar los registros de Raft en reposo, lo que te permite tomar el control de estas claves y requerir el desbloqueo manual de tus administradores. Esta característica se denomina bloqueo automático (autolock).

Cuando Docker se reinicia, primero debes desbloquear el swarm, utilizando una clave de cifrado de clave (KEK) generada por Docker cuando se bloqueó el swarm. Puedes rotar esta clave de cifrado de clave en cualquier momento.

Note

No necesitas desbloquear el swarm cuando un nuevo nodo se une a él, ya que la clave se le propaga a través de TLS mutuo.

Inicializar un swarm con el bloqueo automático habilitado

Cuando inicializas un nuevo swarm, puedes utilizar la opción --autolock para habilitar el bloqueo automático de los nodos administradores del swarm cuando Docker se reinicia.

$ docker swarm init --autolock

Swarm initialized: current node (k1q27tfyx9rncpixhk69sa61v) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-0j52ln6hxjpxk2wgk917abcnxywj3xed0y8vi1e5m9t3uttrtu-7bnxvvlz2mrcpfonjuztmtts9 \
    172.31.46.109:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:

    SWMKEY-1-WuYH/IX284+lRcXuoVf38viIDK3HJEKY13MIHX+tTt8

Guarda la clave en un lugar seguro, por ejemplo, en un gestor de contraseñas.

Cuando Docker se reinicia, debes desbloquear el swarm. Un swarm bloqueado provoca un error como el siguiente cuando intentas iniciar o reiniciar un servicio:

$ sudo service docker restart

$ docker service ls

Error response from daemon: Swarm is encrypted and needs to be unlocked before it can be used. Use "docker swarm unlock" to unlock it.

Habilitar o deshabilitar el bloqueo automático en un swarm existente

Para habilitar el bloqueo automático en un swarm existente, establece la opción --autolock en true.

$ docker swarm update --autolock=true

Swarm updated.
To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:

    SWMKEY-1-+MrE8NgAyKj5r3NcR4FiQMdgu+7W72urH0EZeSmP/0Y

Please remember to store this key in a password manager, since without it you
will not be able to restart the manager.

Para deshabilitar el bloqueo automático, establece --autolock en false. La clave TLS mutua y la clave de cifrado utilizada para leer y escribir los registros de Raft se almacenarán sin cifrar en el disco. Existe un compromiso entre el riesgo de almacenar la clave de cifrado sin cifrar en reposo y la comodidad de reiniciar un swarm sin necesidad de desbloquear cada administrador.

$ docker swarm update --autolock=false

Conserva la clave de desbloqueo durante un breve período después de deshabilitar el bloqueo automático, en caso de que un administrador falle mientras todavía está configurado para bloquearse utilizando la clave anterior.

Desbloquear un swarm

Para desbloquear un swarm bloqueado, utiliza docker swarm unlock.

$ docker swarm unlock

Please enter unlock key:

Introduce la clave de cifrado que se generó y se mostró en la salida del comando cuando bloqueaste el swarm o rotaste la clave, y el swarm se desbloqueará.

Ver la clave de desbloqueo actual para un swarm en ejecución

Considera una situación donde tu swarm se está ejecutando como se espera y luego un nodo administrador deja de estar disponible. Solucionas el problema y vuelves a conectar el nodo físico, pero necesitas desbloquear el administrador proporcionando la clave de desbloqueo para leer las credenciales cifradas y los registros de Raft.

Si la clave no se ha rotado desde que el nodo abandonó el swarm, y tienes un quórum de nodos administradores funcionales en el swarm, puedes ver la clave de desbloqueo actual utilizando docker swarm unlock-key sin ningún argumento.

$ docker swarm unlock-key

To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:

    SWMKEY-1-8jDgbUNlJtUe5P/lcr9IXGVxqZpZUXPzd+qzcGp4ZYA

Please remember to store this key in a password manager, since without it you
will not be able to restart the manager.

Si la clave fue rotada después de que el nodo de swarm dejara de estar disponible y no tienes registro de la clave anterior, es posible que debas forzar al administrador a abandonar el swarm y volver a unirlo como un nuevo administrador.

Rotar la clave de desbloqueo

Debes rotar la clave de desbloqueo del swarm bloqueado de forma periódica.

$ docker swarm unlock-key --rotate

Successfully rotated manager unlock key.

To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:

    SWMKEY-1-8jDgbUNlJtUe5P/lcr9IXGVxqZpZUXPzd+qzcGp4ZYA

Please remember to store this key in a password manager, since without it you
will not be able to restart the manager.
Warning

Al rotar la clave de desbloqueo, conserva un registro de la clave anterior durante unos minutos, de modo que si un administrador se cae antes de recibir la nueva clave, todavía se pueda desbloquear con la anterior.