Заблокируйте свой swarm, чтобы защитить его ключ шифрования

Журналы Raft, используемые менеджерами swarm, по умолчанию зашифрованы на диске. Это шифрование в состоянии покоя защищает конфигурацию и данные вашего сервиса от злоумышленников, которые получают доступ к зашифрованным журналам Raft. Одна из причин, по которой данная функция была введена, заключалась в поддержке функции Секреты Docker.

При перезапуске Docker в память каждого узла диспетчера загружаются как ключ TLS, используемый для шифрования связи между узлами swarm, так и ключ, используемый для шифрования и расшифровки журналов Raft на диске. Docker может защитить общий ключ шифрования TLS и ключ, используемый для шифрования и расшифровки журналов Raft в состоянии покоя, позволяя вам стать владельцем данных ключей и требовать ручной разблокировки ваших менеджеров. Данная функция называется автоблокировка.

Когда Docker перезапустится, вы должны сначала разблокировать swarm, используя ключ шифрования ключа, сгенерированный Docker, когда swarm был заблокирован. Вы можете изменяет данный ключ шифрования в любое время.

Примечание

Вам не нужно разблокировать swarm, когда новый узел присоединяется к swarm, потому что ключ распространяется на него по взаимному TLS.

Инициализировать swarm с включенной автоблокировкой

Когда вы инициализируете новый swarm, вы можете использовать флаг --autolock, чтобы включить автоматическую блокировку узлов менеджера swarm при перезапуске Docker.

$ 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

Храните ключ в надежном месте, например, в менеджере паролей.

Когда Docker перезапустится, вам нужно разблокировать swarm. Заблокированный swarm вызывает ошибку, подобную следующей, при попытке запускает или перезапустить службу:

$ 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.

Включает или отключает автоблокировку существующего swarm

Чтобы включить автоблокировку существующего swarm, устанавливает для флага 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.

Чтобы отключить автоблокировку, устанавливает для --autolock значение false. Взаимный ключ TLS и ключ шифрования, используемые для чтения и записи журналов Raft, хранятся на диске в незашифрованном виде. Существует компромисс между риском хранения ключа шифрования в незашифрованном виде и удобством перезапуска swarm без необходимости разблокировки каждого менеджера.

$ docker swarm update --autolock=false

Держите ключ разблокировки в течение короткого времени после отключения автоматической блокировки на случай, если менеджер выйдет из строя, пока он все ещё настроен на блокировку с использованием старого ключа.

Разблокируйте swarm

Чтобы разблокировать заблокированный swarm, используйте docker swarm unlock.

$ docker swarm unlock

Please enter unlock key:

Входит ключ шифрования, который был сгенерирован и показан в выводе команды, когда вы заблокировали swarm или поменяли ключ, и swarm разблокируется.

Просмотр текущего ключа разблокировки для работающего swarm

Рассмотрим ситуацию, когда ваш swarm работает должным образом, а узел менеджера становится недоступным. Вы устраняете проблему и возвращаете физический узел в оперативный режим, но вам необходимо разблокировать диспетчер, предоставив ключ разблокировки для чтения зашифрованных учетных данных и журналов Raft.

Если ключ не менялся с тех пор, как узел покинул swarm, и у вас есть кворум узлов функционального менеджера в swarm, вы можете просмотреть текущий ключ разблокировки, используя docker swarm unlock-key без каких-либо аргументов.

$ 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.

Если ключ был изменён после того, как узел swarm стал недоступен, и у вас нет записи предыдущего ключа, вам может потребоваться заставить менеджера оставить swarm и снова присоединить его к swarm в качестве нового менеджера.

Поверните ключ разблокировки

Вы должны регулярно менять ключ разблокировки заблокированного swarm.

$ docker swarm unlock-key --rotate

Ключ разблокировки менеджера успешно повернут.

Чтобы разблокировать диспетчер swarm после его перезапуска, запускает команду docker swarm unlock и указывает следующий ключ:

SWMKEY-1-8jDgbUNlJtUe5P/lcr9IXGVxqZpZUXPzd+qzcGp4ZYA

Пожалуйста, не забудьте сохраняет данный ключ в менеджере паролей, т. к. без него вы не сможете перезапустить менеджер.

Предупреждение

Когда вы меняете ключ разблокировки, сохраняйте запись старого ключа в течение нескольких минут, чтобы, если менеджер выйдет из строя до того, как получит новый ключ, он все ещё мог быть разблокирован старым.