infra_pki

Инфраструктура открытых ключей

Ansible Роль - Инфраструктура открытых ключей (PKI)

Роль для создания и управления одной или несколькими PKI на целевом сервере.

Купите мне кофе

Скрипт EasyRSA используется как «бэкенд» для упрощения процесса автоматизации.

Статус тестов Molecule Статус тестов YamlLint Статус тестов PyLint Статус тестов Ansible-Lint Ansible Galaxy

Логи Molecule: Короткие, Полные

Тестировалось на:

  • Debian 11

Установка

# последняя версия
ansible-galaxy role install git+https://github.com/ansibleguy/infra_pki

# из galaxy
ansible-galaxy install ansibleguy.infra_pki

# или установить в пользовательскую папку
ansible-galaxy install ansibleguy.infra_pki --roles-path ./roles

# установить зависимости
ansible-galaxy install -r requirements.yml

Использование

Хотите простой GUI для Ansible? Посмотрите мой Ansible WebUI

Конфигурация

Определите конфигурацию по мере необходимости:

Пример

Более подробный пример можно найти здесь: Пример

Минимальная настройка

pki:
  crl_distribution:
    domain: 'crl.ansibleguy.net'

  instances:
    root:
      pwd_ca: !vault |
        $ANSIBLE_VAULT;1.1;AES256
        ...

      sub_cas:
        main:
          pwd_ca: !vault |
            $ANSIBLE_VAULT;1.1;AES256
            ...

          certs:
            server:  # сертификаты сервера
              ansibleguy_net:
                cn: 'Вебсайт AnsibleGuy'
                san:
                  dns: ['www.ansibleguy.net', 'ansibleguy.net']
                  ip: '135.181.170.217'
                  uri: 'https://www-ansibleguy.net'

            client:  # сертификаты клиента
              workstation1:
                cn: 'Рабочая станция AnsibleGuy'

Вы можете использовать 'ansible-vault' для шифрования ваших паролей:

ansible-vault encrypt_string

Выполнение

Запустите плейбук:

ansible-playbook -K -D -i inventory/hosts.yml playbook_pki.yml

Также существует «точка входа» для управления отдельными сертификатами, что может быть полезно, если они управляются другими ролями.

# для интерактивного выполнения
ansible-playbook -K -D -i inventory/hosts.yml playbook_single_cert.yml

Также доступны некоторые полезные теги:

  • instances => пропустить основные задачи, но обработать все PKI-инстансы (RootCA)
  • subcas => пропустить основные и инстанс (RootCA) задачи, но обработать все задачи SubCA
  • certs => обрабатывать только задачи, связанные с управлением сертификатами
  • certs_create => создать несуществующие сертификаты
  • certs_renew => продлить сертификаты, у которых установлен статус 'renewed'
  • certs_revoke => отозвать сертификаты, у которых установлен статус 'revoked' или 'absent'

Для отладки ошибок вы можете установить переменную 'debug' во время выполнения:

# ВНИМАНИЕ: Будет записывать пароли!
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes

Примечание: режим --check не поддерживается этой ролью, так как она сильно зависит от сценариев командных задач.


Функциональность

  • Установка пакета

    • OpenSSL
  • Конфигурация

    • Использование группы для разрешения только на чтение доступа к открытым ключам

    • Настройки по умолчанию:

      • Путь:
        • База PKI: '/var/local/lib/pki'
        • Скрипт: '/usr/local/sbin/easyrsa'
      • Пользователь PKI: 'pki'
      • Группа только для чтения: 'pki_read'
      • Переменные EasyRSA:
        • Срок действия:
          • Root-CA: 20 лет
          • Sub-CA: 15 лет
          • Сертификаты: 3 года
        • Чек-сума:
          • Root-CA: sha512
          • Sub-CA/Сертификаты: sha256
        • Алгоритм: rsa
        • Размер ключа: 4096
      • Сертификаты:
        • Не шифровать приватные ключи сертификатов
        • Форматы экспорта:
          • pkcs12 (private/.p12)
          • цепочка сертификатов (issued/.chain.crt)
    • Опции по умолчанию:

      • Добавление специального пользователя PKI и группы только для чтения
      • Сохранение паролей CA/Sub-CA/Сертификатов в файлы для упрощения автоматизации
        • Смотрите информацию ниже для альтернатив
      • Установка и настройка веб-сервера Nginx для обслуживания CRL и публичных ключей CA (пока не реализовано)
    • Опции по умолчанию (отказ):

      • Удаление сиротских (существующих, но не настроенных) сертификатов
      • Шифрование приватных ключей сертификатов (не CA/Sub-CA)

Информация

  • Примечание: Большинство функций роли можно включать или отключать.

    Для всех доступных опций смотрите файл конфигурации по умолчанию, расположенный в основном файле настроек!

  • Информация: Чтобы убедиться, что конфигурация роли «ведет себя» как ожидается, она тестируется с помощью molecule!

    Например: Атрибуты сертификата, разрешения на файлы и директории, а также право собственности проверяются после генерации нескольких сертификатов с использованием нескольких Root- и Sub-CA.

    См. Тесты верификации

  • Предупреждение: Не каждая настройка/переменная, которую вы предоставляете, будет проверена на корректность. Плохая конфигурация может сломать роль!

  • Примечание: Если вы хотите узнать больше о PKI и сертификатах:

    • Проект EasyRSA имеет хорошую документацию
    • Для (x509) сертификатов обратитесь к документации OpenSSL.
    • Если вы хотите понять, как использовать 'keyUsage' и 'extendedKeyUsage', посмотрите этот ответ на StackExchange: LINK
    • Если вы хотите узнать, как вручную создать PKI/SubCA, используя EasyRSA, посмотрите чистый пример @QueuingKoala: GitHub Gist
  • Предупреждение: Для обеспечения безопасности от компрометации CA вам следует:

    1. Убедиться, что все необходимые Sub-CA созданы ролью

    2. Скопировать приватный ключ CA (${path_base}/ca/private/ca.key) на оффлайн носитель (учитывайте резервирование)

    3. Сохранить пароль, который вы использовали для инициализации CA (не на том же носителе)

    4. Удалить файл ca.key из вашей онлайн-системы с помощью инструмента 'безопасного удаления', такого как 'shred':

      shred -vzu -n10 ca.key
      
  • Примечание: У вас есть несколько способов предоставить пароли для CA/Sub-CA/Сертификатов:

    • если 'save_passwords' установлен в true - сохраненный пароль будет получен после инициализации CA
    • как переменная инвентаря (зашифрована ansible-vault для расшифровки во время выполнения)
    • --extra-vars во время выполнения
    • если пароль не был установлен, роль запросит его во время выполнения
  • Примечание: Переменные сертификатов, которые вы устанавливаете:

    • на глобальном уровне будут унаследованы всеми инстансами и их суб-CA
    • на уровне инстанса будут унаследованы его суб-CA
    • конкретная конфигурация на уровне инстанса/суб-CA всегда будет заменять унаследованную конфигурацию
  • Примечание: Вы можете найти скрипты для автоматизированного мониторинга истечения сертификатов, которые можно интегрировать с системами мониторинга, такими как Zabbix, в files/usr/local/bin/monitoring.

  • Предупреждение: Настройки распределения CRL НЕ МОЖНО ИЗМЕНИТЬ легко.

    Все существующие сертификаты должны быть заново сгенерированы после изменения настроек.

  • Примечание: Переменная 'cert_expire' коренной CA устанавливает продолжительность действия суб-CAs!

  • Примечание: Пароли, используемые для шифрования CA/Sub-CA/Сертификатов, проверяются на соответствие правилам сложности:

    • минимум 8 символов
    • обязательно содержит
      • цифру
      • заглавную букву
      • строчную букву
  • Примечание: Состояния сертификатов могут быть установлены на:

    • 'present' или 'created', чтобы убедиться, что сертификат существует
    • 'absent' или 'revoked', чтобы убедиться, что сертификат не существует
    • 'renewed' для продления сертификата
О проекте

Ansible Role to provision and manage one or multiple PKI's on the target server

Установить
ansible-galaxy install ansibleguy/infra_pki
Лицензия
other
Загрузки
2119
Владелец
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg