Управляйте безопасностью swarm с помощью инфраструктуры открытых ключей (PKI)

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

Когда вы создаёте swarm, запустив docker swarm init, Docker назначает себя узлом менеджера. По умолчанию узел менеджера создаёт новый корневой центр сертификации (CA) вместе с парой ключей, которые используются для защиты связи с другими узлами, которые присоединяются к swarm. При желании вы можете указывает свой собственный внешний корень CA, используя флаг --external-ca команды docker swarm инициализация.

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

Каждый раз, когда новый узел присоединяется к swarm, менеджер вызывает узлу сертификат. Сертификат содержит случайно сгенерированный идентификатор узла для идентификации узла по общему имени сертификата (CN) и роли в организационном подразделении (OU). Идентификатор узла служит криптографически безопасным идентификатором узла на протяжении всего срока службы узла в текущем swarm.

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

tls diagram

В приведённом далее примере показана информация из сертификата рабочего узла:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3b:1c:06:91:73:fb:16:ff:69:c3:f7:a2:fe:96:c1:73:e2:80:97:3b
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN=swarm-ca
        Validity
            Not Before: Aug 30 02:39:00 2016 GMT
            Not After : Nov 28 03:39:00 2016 GMT
        Subject: O=ec2adilxf4ngv7ev8fwsi61i7, OU=swarm-worker, CN=dw02poa4vqvzxi5c10gm4pq2g
...snip...

По умолчанию каждый узел в swarm обновляет свой сертификат каждые три месяца. Вы можете настроить данный интервал, выполнив команду docker swarm update --cert-expiry <TIME PERIOD>. Минимальное значение вращения составляет 1 час. Дополнительные сведения см. в справке по интерфейсу командной строки docker swarm update.

Ротация сертификата CA

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

Запускает docker swarm ca --rotate, чтобы сгенерировать новый сертификат и ключ CA. При желании вы можете передать флаги --ca-cert и --external-ca, чтобы указывает корневой сертификат и использовать корневой сертификат CA, внешний по отношению к swarm. В качестве альтернативы вы можете передать флаги --ca-cert и --ca-key, чтобы указывает точный сертификат и ключ, которые вы хотели бы использовать для swarm.

Когда вы вводите команду docker swarm ca --rotate, последовательно происходят следующие вещи:

  1. Docker генерирует сертификат с перекрестной подписью. Это означает, что версия нового корневого сертификата CA подписана старым корневым сертификатом CA. Данный сертификат с перекрестной подписью используется в качестве промежуточного сертификата для всех новых сертификатов узла. Это гарантирует, что узлы, которые все ещё доверяют старому корневому CA, могут по-прежнему проверять сертификат, подписанный новым CA.

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

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

    Это также приводит к изменению токенов присоединения swarm. Предыдущие токены присоединения больше недействительны.

С этого момента все новые выпущенные сертификаты узлов подписываются новым корнем CA и не содержат никаких промежуточных звеньев.

Узнать больше

  • Читает о том, как работает узлы.

  • Узнайте, как работает режим swarm услуги.