Verrouiller votre swarm pour protéger sa clé de chiffrement
Les logs Raft utilisés par les gestionnaires swarm sont chiffrés sur disque par défaut. Ce chiffrement au repos protège la configuration et les données de votre service contre les attaquants qui obtiennent l'accès aux logs Raft chiffrés. L'une des raisons pour lesquelles cette fonctionnalité a été introduite était pour supporter la fonctionnalité Docker secrets.
Lorsque Docker redémarre, à la fois la clé TLS utilisée pour chiffrer les communications entre les nœuds swarm et la clé utilisée pour chiffrer et déchiffrer les logs Raft sur disque sont chargées dans la mémoire de chaque nœud gestionnaire. Docker a la capacité de protéger la clé de chiffrement TLS mutuel et la clé utilisée pour chiffrer et déchiffrer les logs Raft au repos, en vous permettant de prendre possession de ces clés et d'exiger le déverrouillage manuel de vos gestionnaires. Cette fonctionnalité s'appelle autolock.
Lorsque Docker redémarre, vous devez déverrouiller le swarm d'abord, en utilisant une clé de chiffrement de clé générée par Docker lorsque le swarm a été verrouillé. Vous pouvez faire tourner cette clé de chiffrement de clé à tout moment.
NoteVous n'avez pas besoin de déverrouiller le swarm lorsqu'un nouveau nœud rejoint le swarm, car la clé lui est propagée via TLS mutuel.
Initialiser un swarm avec autolock activé
Lorsque vous initialisez un nouveau swarm, vous pouvez utiliser le flag --autolock
pour
activer le verrouillage automatique des nœuds gestionnaires swarm lorsque Docker redémarre.
$ 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
Stockez la clé dans un endroit sûr, comme dans un gestionnaire de mots de passe.
Lorsque Docker redémarre, vous devez déverrouiller le swarm. Un swarm verrouillé cause une erreur comme la suivante lorsque vous essayez de démarrer ou redémarrer un service :
$ 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.
Activer ou désactiver autolock sur un swarm existant
Pour activer autolock sur un swarm existant, définissez le flag autolock
à 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.
Pour désactiver autolock, définissez --autolock
à false
. La clé TLS mutuel et la
clé de chiffrement utilisée pour lire et écrire les logs Raft sont stockées non chiffrées sur
disque. Il y a un compromis entre le risque de stocker la clé de chiffrement
non chiffrée au repos et la commodité de redémarrer un swarm sans
avoir besoin de déverrouiller chaque gestionnaire.
$ docker swarm update --autolock=false
Gardez la clé de déverrouillage à portée de main pendant un court moment après avoir désactivé autolock, au cas où un gestionnaire tombe en panne alors qu'il est encore configuré pour se verrouiller en utilisant l'ancienne clé.
Déverrouiller un swarm
Pour déverrouiller un swarm verrouillé, utilisez docker swarm unlock
.
$ docker swarm unlock
Please enter unlock key:
Entrez la clé de chiffrement qui a été générée et montrée dans la sortie de commande lorsque vous avez verrouillé le swarm ou fait tourner la clé, et le swarm se déverrouille.
Voir la clé de déverrouillage actuelle pour un swarm en cours d'exécution
Considérez une situation où votre swarm fonctionne comme prévu, puis un nœud gestionnaire devient indisponible. Vous dépannez le problème et remettez le nœud physique en ligne, mais vous devez déverrouiller le gestionnaire en fournissant la clé de déverrouillage pour lire les identifiants chiffrés et les logs Raft.
Si la clé n'a pas été tournée depuis que le nœud a quitté le swarm, et que vous avez un
quorum de nœuds gestionnaires fonctionnels dans le swarm, vous pouvez voir la clé de déverrouillage
actuelle en utilisant docker swarm unlock-key
sans aucun argument.
$ 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 clé a été tournée après que le nœud swarm soit devenu indisponible et que vous n'avez pas d'enregistrement de la clé précédente, vous devrez peut-être forcer le gestionnaire à quitter le swarm et le rejoindre au swarm comme un nouveau gestionnaire.
Faire tourner la clé de déverrouillage
Vous devriez faire tourner la clé de déverrouillage du swarm verrouillé selon un calendrier régulier.
$ 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.
WarningLorsque vous faites tourner la clé de déverrouillage, gardez un enregistrement de l'ancienne clé à portée de main pendant quelques minutes, afin que si un gestionnaire tombe en panne avant d'obtenir la nouvelle clé, il puisse encore être déverrouillé avec l'ancienne.