Генерация сертификатов с помощью Ansible-роли certs
Для генерации самоподписанных CA и сертификатов для всех модулей продукта CopyWala используется роль certs.
Предусловия
Использование роли certs является одним из шагов в сценариях по установке компонентов продукта CopyWala. Если генерация сертификатов выполняется отдельно от установки компонентов, убедитесь, что выполняются следующие предусловия:
Подготовка среды Ansible
Рекомендуется запускать установку модуля Copywala в виртуальной среде Python.
Данный шаг выполняется на управляющем узле Ansible (control node) — машине, с которой запускаются Ansible-плейбуки.
Создание виртуальной среды позволяет избежать конфликтов с уже предустановленными пакетами и не затрагивать существующую среду на текущей машине. Для подготовки виртуального окружения выполните следующие шаги:
-
Создайте виртуальное окружение. Рекомендуется использовать Python 3.9:
python3 -m venv .pbr -
Активируйте виртуальное окружение:
source .pbr/bin/activate -
Установите необходимые пакеты:
python3.9 -m pip install 'ansible==8.7.0' -
Проверьте, что установка Ansible прошла успешно:
ansible --version. В результате вывод не должен содержать ошибок. Командаpip listдолжна вывести зависимости:ansible 8.7.0ansible-core 2.15.13
После завершения установки компонентов виртуальную среду можно отключить. Выполните консольную команду: deactivate.
Установка Ansible-коллекций
Данный шаг выполняется на управляющем узле Ansible (control node) — машине, с которой запускаются Ansible-плейбуки.
Установите или обновите Ansible-коллекции с помощью ansible-galaxy. Необходимые зависимости:
Название Ansible-коллекции | Версия | Установка |
|---|---|---|
| 1.0.0 | Перейдите в директорию с распакованным дистрибутивом любого компонента CopyWala и запустите команду: |
| 3.9.1 | |
| 1.0.2 | |
Последовательность действий
-
Перейдите в директорию с ролью certs, например,
cd pbr/owned/dbbr/package/scripts/Ansible/.к сведениюРоль certs также дублируется в архивах
pbraиpbss. -
Создайте inventory-файл для генерации сертификатов, например
inventory-cert.ymlсо структурой:cert:hosts:cert-host:ansible_host: <IP_ADDRESS>Где
<IP_ADDRESS>– IP-адрес виртуальной машины, на которой будут генерироваться сертификаты. Указать можно любой IP-адрес из числа тех виртуальных машин, на которые будут устанавливаться компоненты продукта CopyWala. -
Создайте плейбук-файл для генерации сертификатов, например
playbook-cert.yml. Задайте в нем все переменные, у которых в таблице ниже в столбце «Обязательность заполнения» – Да, а также при необходимости задайте другие (не обязательные) переменные.примечание-
Если переменная не задана явно в плейбуке, для нее используется значение по умолчанию, определенное в файле
defaults/main.ymlроли. -
Из необязательных переменных рекомендуется заполнять секцию
*_tls, где*— это префикс с именем модуля. Например, для Storage Manager секция будет выглядеть так:storage_manager_tls:rootca:local_path: /path/to/certs/certificates/rootCA.crtcert:local_path: /path/to/certs/certificates/storage-manager.crtkey:local_path: /path/to/certs/certificates/storage-manager.key
-
Название переменной | Описание | Значение по умолчанию | Обязательность заполнения |
|---|---|---|---|
| Словарь с переменными для выполнения роли. Если заполнен явно, файл |
| Да (или |
| Путь к файлу с переменными. Используется, когда |
| Да (или |
| Директория для временного сохранения сертификатов на удаленном узле |
| Нет |
| Формат архива с сертификатами |
| Нет |
| Директория для сохранения сертификатов на Ansible-узле |
| Нет |
| Путь к корневому сертификату. Если передать пустую строку, будет сгенерирован новый RootCA. |
| Нет |
| Путь к ключу корневого сертификата. Используется вместе с |
| Нет |
| Код страны регистрации организации |
| Нет |
| Область, регион регистрации организации |
| Нет |
| Организация, для которой выпускается сертификат |
| Нет |
| Почта администратора организации |
| Нет |
| Доменное имя, для которого заказывается сертификат |
| Нет |
Генерация сертификатов выполняется исходя из переменной certs_components или файла, указанного в переменной certs_var_file, который служит для объединения следующих файлов:
pbr/owned/dbbr/package/scripts/Ansible/vars/components.ymlpbr/owned/pbra/package/scripts/Ansible/vars/components.ymlpbr/owned/pbss/package/scripts/Ansible/vars/components.yml
Помимо обязательных переменных certs_components (или certs_var_file) также для каждого компонента обязательно задайте параметр san. В san для каждого компонента обязательно укажите:
- DNS-имена и IP-адреса, целевых хостов компонентов;
- DNS и IP для
localhost(DNS:localhostиIP:127.0.0.1).
Пример заполненного плейбук-файла playbook-cert.yml
- name: Certs
hosts: cert-host
become: true
roles:
- roles/certs
vars:
certs_organization: Sbertech
certs_email: Sbertech@sbertech.ru
# certs_var_file: components.yml
ansible_python_interpreter: /usr/bin/python3.9
certs_components:
storage-manager:
san:
- DNS:localhost
- DNS:<DNS_NAME_DBBR>
- IP:127.0.0.1
- IP:<IP_ADDRESS_DBBR>
task-manager:
san:
- DNS:localhost
- DNS:<DNS_NAME_DBBR>
- IP:127.0.0.1
- IP:<IP_ADDRESS_DBBR>
agent-manager:
san:
- DNS:localhost
- DNS:<DNS_NAME_DBBR>
- IP:127.0.0.1
- IP:<IP_ADDRESS_DBBR>
api-gateway:
san:
- DNS:localhost
- DNS:<DNS_NAME_DBBR>
- IP:127.0.0.1
- IP:<IP_ADDRESS_DBBR>
recovery-manager:
san:
- DNS:localhost
- DNS:<DNS_NAME_DBBR>
- IP:127.0.0.1
- IP:<IP_ADDRESS_DBBR>
copywala:
san:
- DNS:localhost
- DNS:<DNS_NAME_PBRA>
- IP:127.0.0.1
- IP:<IP_ADDRESS_PBRA>
pbr-agent:
san:
- DNS:localhost
- DNS:<DNS_NAME_PBRA>
- IP:127.0.0.1
- IP:<IP_ADDRESS_PBRA>
storage-service:
san:
- DNS:localhost
- DNS:<DNS_NAME_PBSS>
- IP:127.0.0.1
- IP:<IP_ADDRESS_PBSS>
Использование готового RootCA
Роль certs создает RootCA автоматически. Если корневой сертификат и ключ уже есть, укажите пути в переменных certs_ca_path и certs_ca_key_path. Добавьте переменные в раздел vars плейбука или передайте через флаг -e при запуске плейбука.
- Вариант 1: создать новый RootCA
- Вариант 2: использовать существующий RootCA
- name: Certs
hosts: cert-host
become: true
roles:
- roles/certs
vars:
certs_organization: Sbertech
certs_email: Sbertech@sbertech.ru
certs_var_file: components.yml
ansible_python_interpreter: /usr/bin/python3.9
Добавьте переменные certs_ca_path и certs_ca_key_path с путями к файлам rootCA.crt и rootCA.key.
- name: Certs
hosts: cert-host
become: true
roles:
- roles/certs
vars:
certs_organization: Sbertech
certs_email: Sbertech@sbertech.ru
certs_var_file: components.yml
certs_ca_path: /tmp/rootCA.crt
certs_ca_key_path: /tmp/rootCA.key
ansible_python_interpreter: /usr/bin/python3.9
-
Запустите генерацию сертификатов командой:
ansible-playbook -i inventory-cert.yml playbook-cert.ymlРоль генерирует сертификаты на удаленном узле, создает архив и скачивает его на Ansible-узел (control node) в директорию, указанную в переменной
certs_local_dir(значение по умолчанию –./).Внимание!Убедитесь, что у пользователя, запускающего плейбук, есть права на запись в директорию, указанную в
certs_local_dir. Если прав на запись в текущую директорию недостаточно, измените значение переменнойcerts_local_dirна директорию, доступную для записи.
Проверка результата
Перейдите в директорию, указанную в certs_local_dir. В ней будет находиться архив certificates.tar со всеми созданными сертификатами.