← К программе курса

Модуль 19 / 24

Безопасность и certificate rotation

DOCKER SWARM

Содержание
01

1. Цели и результат модуля

После модуля вы проверите mTLS identity узлов, безопасно смените join tokens, испытаете manager autolock и выполните CA rotation без потери quorum и доступности.

  • читать subject, issuer и expiry
  • не раскрывать tokens и unlock key
  • различать transport identity и data-at-rest protection
  • проверять кластер после ротации
02

2. Теория: PKI и mTLS

Встроенная CA выдаёт каждому node сертификат с cluster ID, role и node ID. Managers и workers взаимно аутентифицируют control-plane соединения через mTLS; сертификаты автоматически обновляются до истечения NodeCertExpiry.

Join token нужен только для присоединения и содержит CA digest и секрет роли. Его ротация блокирует новые join со старым token, но не отзывает сертификаты уже присоединённых nodes.

03

3. Autolock и ключи на диске

Managers хранят Raft state, включая configs и secrets. Autolock шифрует ключ, которым Engine открывает это состояние после рестарта. Пока operator не введёт unlock key, node показывает locked и не участвует в manager duties.

Unlock key должен храниться вне кластера в secret manager с резервной копией и контролем доступа. Потеря ключа при остановке всех managers означает потерю возможности открыть Raft state.

04

4. CA rotation и границы защиты

CA rotation создаёт новый root, временно использует cross-signing и перевыпускает node certificates. Изменение CA fingerprint и serial подтверждает ротацию. Операция меняет доверительную основу кластера и не является обычным cleanup.

mTLS не заменяет firewall, host hardening, image provenance и минимальные privileges. Swarm control и overlay ports доступны только между nodes выделенной сети.

05

5. Методические указания

  • Перед изменением проверьте три Ready managers
  • Не печатайте join token в журнал
  • Создавайте unlock file с umask 077
  • Перезапускайте один manager
  • Сначала unlock и quorum, затем CA rotation
  • После проверки удалите временный ключ
06

6. Лабораторная работа: identity baseline

Снимите CA config и поля node certificates. OU показывает manager role, CN — node ID, issuer — swarm-ca.

terminal
ssh swarm-manager-3 docker info --format 'swarm={{.Swarm.LocalNodeState}} control={{.Swarm.ControlAvailable}} node={{.Swarm.NodeID}}'
ssh swarm-manager-3 docker swarm inspect --format '{{json .Spec.CAConfig}}'
ssh swarm-manager-3 docker node ls
for host in swarm-manager-1 swarm-manager-2 swarm-manager-3; do ssh "$host" sudo openssl x509 -in /var/lib/docker/swarm/certificates/swarm-node.crt -noout -subject -issuer -serial -dates; done
07

7. Лабораторная работа: join token rotation

Смените оба токена, перенаправив чувствительный вывод. Существующие nodes должны остаться Ready.

terminal
ssh swarm-manager-3 docker swarm join-token --rotate manager >/dev/null
ssh swarm-manager-3 docker swarm join-token --rotate worker >/dev/null
ssh swarm-manager-3 docker node ls
08

8. Лабораторная работа: autolock и unlock

Включите autolock, сохраните ключ во временный файл mode 0600, перезапустите один manager и наблюдайте locked. Передайте ключ через stdin, удалите файл и подтвердите Reachable.

terminal
umask 077
ssh swarm-manager-3 docker swarm update --autolock=true >/dev/null
ssh swarm-manager-3 docker swarm unlock-key -q > /tmp/swarm-m19-unlock
ssh swarm-manager-1 sudo systemctl restart docker
sleep 8
ssh swarm-manager-1 docker info --format '{{.Swarm.LocalNodeState}}'
cat /tmp/swarm-m19-unlock | ssh swarm-manager-1 sudo docker swarm unlock
rm -f /tmp/swarm-m19-unlock
sleep 12
ssh swarm-manager-3 docker node ls
09

9. Лабораторная работа: CA rotation и диагностика

Сравните fingerprint и serial до и после ротации, затем проверьте quorum, replicas и HTTPS.

terminal
ssh swarm-manager-3 docker swarm ca | openssl x509 -noout -fingerprint -sha256
ssh swarm-manager-1 sudo openssl x509 -in /var/lib/docker/swarm/certificates/swarm-node.crt -noout -serial
ssh swarm-manager-3 docker swarm ca --rotate >/dev/null
sleep 20
ssh swarm-manager-3 docker swarm ca | openssl x509 -noout -fingerprint -sha256
ssh swarm-manager-1 sudo openssl x509 -in /var/lib/docker/swarm/certificates/swarm-node.crt -noout -serial
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/
  • node locked — нужен действующий unlock key
  • Down после unlock — проверяйте Engine и manager traffic
  • сертификат не обновился — проверьте CA rotation status и время
  • service 3/3, но HTTPS недоступен — проверяйте ingress path отдельно
10

10. Контроль, критерии освоения и cleanup

  • Что удостоверяет node certificate?
  • Что инвалидирует token rotation?
  • Что защищает autolock?
  • Почему unlock key нельзя хранить на manager?
  • Зачем cross-signing при CA rotation?
  • Какие проверки подтверждают успех?

Модуль освоен, если вы наблюдали locked, восстановили manager, получили новые CA fingerprint и node serial при сохранении 3/3. Cleanup удаляет временный ключ и отключает учебный autolock; новая CA остаётся штатной CA кластера.

terminal
rm -f /tmp/swarm-m19-unlock
ssh swarm-manager-3 docker swarm update --autolock=false >/dev/null
ssh swarm-manager-3 docker info --format 'autolock={{.Swarm.Cluster.Spec.EncryptionConfig.AutoLockManagers}} rotation={{.Swarm.Cluster.Spec.CAConfig.NodeCertExpiry}}'
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls