infra_pki
Ansible Роль - Инфраструктура открытых ключей (PKI)
Роль для создания и управления одной или несколькими PKI на целевом сервере.
Скрипт EasyRSA используется как «бэкенд» для упрощения процесса автоматизации.
Логи 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 )
- pkcs12 (private/
- Путь:
Опции по умолчанию:
- Добавление специального пользователя 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 вам следует:
Убедиться, что все необходимые Sub-CA созданы ролью
Скопировать приватный ключ CA (${path_base}/ca/private/ca.key) на оффлайн носитель (учитывайте резервирование)
Сохранить пароль, который вы использовали для инициализации CA (не на том же носителе)
Удалить файл 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