Модуль 19 / 24
Безпека та certificate rotation
Зміст
1. Цілі та результат модуля
Після модуля ви перевірите mTLS identity вузлів, зміните join tokens, випробуєте manager autolock і виконаєте CA rotation без втрати quorum та доступності.
- читати subject, issuer та expiry
- не розкривати tokens і unlock key
- розрізняти transport identity та data-at-rest protection
- перевіряти cluster після rotation
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.
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.
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 лабораторної мережі.
5. Методичні вказівки
- Перевірте три Ready managers
- Не друкуйте join token
- Створюйте unlock file з umask 077
- Restart лише одного manager
- Спочатку unlock і quorum, потім CA rotation
- Видаліть temporary key
6. Лабораторна робота: identity baseline
Зніміть CA config і поля node certificates. OU показує manager role, CN — node ID, issuer — swarm-ca.
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; done7. Лабораторна робота: join token rotation
Змініть обидва tokens із прихованим sensitive output. Наявні nodes залишаються Ready.
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 ls8. Лабораторна робота: autolock та unlock
Увімкніть autolock, збережіть key у temporary file mode 0600, restart один manager і спостерігайте locked. Передайте key через stdin, видаліть файл і перевірте Reachable.
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 ls9. Лабораторна робота: CA rotation та діагностика
Порівняйте fingerprint і serial до та після rotation, перевірте quorum, replicas і HTTPS.
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. Контроль, критерії засвоєння та cleanup
- Що посвідчує node certificate?
- Що інвалідує token rotation?
- Що захищає autolock?
- Чому key не зберігають на manager?
- Навіщо cross-signing?
- Які перевірки доводять успіх?
Модуль засвоєно, якщо ви побачили locked, відновили manager, отримали нові CA fingerprint і node serial зі збереженням 3/3. Cleanup видаляє key та вимикає навчальний autolock; нова CA залишається штатною.
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