← До програми курсу

Модуль 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
  • перевіряти cluster після rotation
02

2. Теорія: PKI та mTLS

Вбудована CA видає node certificate з cluster ID, role і node ID. Managers та workers взаємно автентифікують control-plane connections через mTLS; certificates оновлюються до NodeCertExpiry.

Join token потрібен для приєднання і містить CA digest та role secret. Rotation блокує нові join зі старим token, але не відкликає certificates наявних nodes.

03

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

Managers зберігають Raft state, configs і secrets. Autolock шифрує ключ відкриття state після restart. До введення unlock key node має locked і не виконує manager duties.

Unlock key зберігають поза cluster у secret manager з backup і access control. Його втрата після зупинки всіх managers унеможливлює відкриття Raft state.

04

4. CA rotation та межі захисту

CA rotation створює новий root, застосовує cross-signing і перевидає node certificates. Нові CA fingerprint і serial підтверджують rotation. Це зміна trust root, а не звичайний cleanup.

mTLS не замінює firewall, host hardening, image provenance і least privilege. Control та overlay ports доступні лише між nodes лабораторної мережі.

05

5. Методичні вказівки

  • Перевірте три Ready managers
  • Не друкуйте join token
  • Створюйте unlock file з umask 077
  • Restart лише одного manager
  • Спочатку unlock і quorum, потім CA rotation
  • Видаліть temporary key
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

Змініть обидва tokens із прихованим sensitive output. Наявні 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, збережіть key у temporary file mode 0600, restart один manager і спостерігайте locked. Передайте key через 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 до та після rotation, перевірте 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
  • certificate не оновився — CA status і time sync
  • 3/3 без HTTPS — перевіряйте ingress path
10

10. Контроль, критерії засвоєння та cleanup

  • Що посвідчує node certificate?
  • Що інвалідує token rotation?
  • Що захищає autolock?
  • Чому key не зберігають на manager?
  • Навіщо cross-signing?
  • Які перевірки доводять успіх?

Модуль засвоєно, якщо ви побачили locked, відновили manager, отримали нові CA fingerprint і node serial зі збереженням 3/3. Cleanup видаляє key та вимикає навчальний autolock; нова 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