Рубрики
Uncategorized

Автоматическое обновление марионеточных сертификатов

Каждый, кто использует марионетку с самоподтвержденным CA более 5 лет, знают, что страшное время: время, когда CA должно быть обновлено. Tagged с куколкой, DevOps, OpenSource, Security.

Каждый, кто использовал Кукол С самоподнешенным CA в течение более 5 лет знает страшное время: время, когда CA должно быть обновлено.

Традиционный подход заключается в создании нового CA, а затем используйте другое среднее значение для обновления сертификатов для всех узлов (SSH, McOlcective, Ansible и т. Д.).

Другая возможность состоит в том, чтобы сохранить те же клавиши CA и генерировать новый сертификат CA. На самом деле Официальный модуль для этого Анкет Этот модуль позволяет легко оживить CA, который собирается истекать таким образом, чтобы новый сертификат CA действителен для текущих сертификатов узлов. В результате вам не нужно сразу же обновлять сертификаты узла; Вам нужно только распространять новый сертификат CA, чтобы гарантировать, что кэшированная версия не истекает!

Однако есть следствие: срок действия сертификатов узлов начнут. Узлы старше 5 лет истекают, как только срок действия СА. И поэтому они тоже должны быть обновлены.

Что, если сам агент марионеток может гарантировать, что его сертификат всегда действителен? Это может быть достигнуто с помощью двух вещей:

  • автоматическая политика;
  • Puppet_certificate Тип ресурса.

Autosign

Первый — Стандартная кукольная функция , с простым принципом: отправьте секрет в кукол CSR, который будет проверен сценарием на ок.

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

Самая простая форма использует общий пароль в csr_attributes.yaml Файл в кукольном узле.

Управление сертификатами

После того, как вы собрали способ автоматического сертификатов, давайте посмотрим, как автоматически обновить эти сертификаты. Мы будем использовать Puppet_certificate Puppet Module для этого. Вот тот код, который вы могли бы использовать:

class profile::puppet::certificate (
  String $psk,
) {
  file { '/etc/puppetlabs/puppet/csr_attributes.yaml':
    ensure  => file,
    owner   => 'root',
    group   => 'root',
    mode    => '0440',
    content => "---\ncustom_attributes:\n  1.2.840.113549.1.9.7: '${psk}'\n",
  }
  ~> puppet_certificate { $::trusted['certname']:
    ensure               => valid,
    onrefresh            => 'regenerate',
    waitforcert          => 60,
    renewal_grace_period => 20,
    clean                => true,
  }
}

Этот код будет:

  • Управление csr_attributes.yaml Файл, чтобы ввести в него PSK;
  • Управление марионеточным сертификатом узла.

Кроме того:

  • Если PSK изменен, сертификат будет воссоздан;
  • Сертификат будет автоматически продлен за 20 дней до истечения срока его действия (используя are => value );

Обратите внимание, что это работает только в том случае, если сертификат очищается из марионетки Ca, прежде чем он будет регенерирован. Это точка Clean => true атрибут. По умолчанию, однако, марионетка CA не принимает удаленную очистку сертификатов. Вы можете позволить узлам чистить свои собственные сертификаты (и никаких других), добавив это в ваш кукольный Puppetserver auth.conf файл:

{
    name: "Allow nodes to delete their own certificates",
    match-request: {
        path: "^/puppet-ca/v1/certificate(_status|_request)?/([^/]+)$",
        type: regex,
        method: [delete]
    },
    allow: "$2",
    sort-order: 500
}

Лучшая безопасность

Хотя можно использовать простой общий пароль в csr_attributes.yaml Для автоматической деятельности это означает, что все ваши узлы будут содержать PSK, который действителен для создания новых сертификатов на марионеточной стойке. Это не очень безопасно, и это можно улучшить, используя уникальные токены для каждого узла, чтобы токен можно использовать только для генерации сертификата для определенного узла.

Вы можете достичь этого с помощью таких инструментов, как хранилище. Другая идея состоит в том, чтобы сгенерировать композитный секрет на марионеточном мастере путем смешивания PSK с сертификатом и, возможно, любого расширения сертификата, которое вы хотите применять. Затем вам необходимо адаптировать свой сценарий Autosign Policy, чтобы генерировать тот же составный секрет, который гарантирует, что каждый узел может генерировать только свой собственный сертификат, не изменяя его расширения.

Этот пост был первоначально опубликован camptocamp.com

Оригинал: «https://dev.to/camptocamp-ops/automatic-renewal-of-puppet-certificates-28pm»