Перейти к основному содержимому

Генерация сертификатов с помощью Ansible-роли certs

Для генерации самоподписанных CA и сертификатов для всех модулей продукта CopyWala используется роль certs.

Предусловия​

Использование роли certs является одним из шагов в сценариях по установке компонентов продукта CopyWala. Если генерация сертификатов выполняется отдельно от установки компонентов, убедитесь, что выполняются следующие предусловия:

Подготовка среды Ansible​

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

к сведению

Данный шаг выполняется на управляющем узле Ansible (control node) — машине, с которой запускаются Ansible-плейбуки.

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

  1. Создайте виртуальное окружение. Рекомендуется использовать Python 3.9:

    python3 -m venv .pbr
  2. Активируйте виртуальное окружение:

    source .pbr/bin/activate
  3. Установите необходимые пакеты:

    python3.9 -m pip install 'ansible==8.7.0'
  4. Проверьте, что установка Ansible прошла успешно: ansible --version. В результате вывод не должен содержать ошибок. Команда pip list должна вывести зависимости:

    ansible 8.7.0
    ansible-core 2.15.13
к сведению

После завершения установки компонентов виртуальную среду можно отключить. Выполните консольную команду: deactivate.

Установка Ansible-коллекций​

к сведению

Данный шаг выполняется на управляющем узле Ansible (control node) — машине, с которой запускаются Ansible-плейбуки.

Установите или обновите Ansible-коллекции с помощью ansible-galaxy. Необходимые зависимости:

Название Ansible-коллекции

Версия

Установка

sbt-pbr (поставляется в составе дистрибутива продукта CopyWala)

1.0.0

Перейдите в директорию с распакованным дистрибутивом любого компонента CopyWala и запустите команду:

ansible-galaxy collection install package/scripts/Ansible/collections/sbt-pbr-1.0.0.tar.gz

Community.Postgresql (устанавливается из внешнего репозитория Ansible Galaxy)

3.9.1

ansible-galaxy collection install community.postgresql:3.9.1

Community.Library_Inventory_Filtering_V1 (устанавливается из внешнего репозитория Ansible Galaxy)

1.0.2

ansible-galaxy collection install community.library_inventory_filtering_v1:1.0.2

Последовательность действий​

  1. Перейдите в директорию с ролью certs, например, cd pbr/owned/dbbr/package/scripts/Ansible/.

    к сведению

    Роль certs также дублируется в архивах pbra и pbss.

  2. Создайте inventory-файл для генерации сертификатов, например inventory-cert.yml со структурой:

    cert:
    hosts:
    cert-host:
    ansible_host: <IP_ADDRESS>

    Где <IP_ADDRESS> – IP-адрес виртуальной машины, на которой будут генерироваться сертификаты. Указать можно любой IP-адрес из числа тех виртуальных машин, на которые будут устанавливаться компоненты продукта CopyWala.

  3. Создайте плейбук-файл для генерации сертификатов, например playbook-cert.yml. Задайте в нем все переменные, у которых в таблице ниже в столбце «Обязательность заполнения» – Да, а также при необходимости задайте другие (не обязательные) переменные.

    примечание
    • Если переменная не задана явно в плейбуке, для нее используется значение по умолчанию, определенное в файле defaults/main.yml роли.

    • Из необязательных переменных рекомендуется заполнять секцию *_tls, где * — это префикс с именем модуля. Например, для Storage Manager секция будет выглядеть так:

      storage_manager_tls:
      rootca:
      local_path: /path/to/certs/certificates/rootCA.crt
      cert:
      local_path: /path/to/certs/certificates/storage-manager.crt
      key:
      local_path: /path/to/certs/certificates/storage-manager.key
Переменные Ansible-роли certs

Название переменной

Описание

Значение по умолчанию

Обязательность заполнения

certs_components

Словарь с переменными для выполнения роли. Если заполнен явно, файл certs_var_file игнорируется.

{}

Да (или certs_var_file)

certs_var_file

Путь к файлу с переменными. Используется, когда certs_components равен {}.

vars/components.yml

Да (или certs_components)

certs_dir

Директория для временного сохранения сертификатов на удаленном узле

/tmp/certificates

Нет

certs_archive_format

Формат архива с сертификатами

tar

Нет

certs_local_dir

Директория для сохранения сертификатов на Ansible-узле

'./'

Нет

certs_ca_path

Путь к корневому сертификату. Если передать пустую строку, будет сгенерирован новый RootCA.

''

Нет

certs_ca_key_path

Путь к ключу корневого сертификата. Используется вместе с certs_ca_path для подключения существующего RootCA.

''

Нет

certs_country

Код страны регистрации организации

RU

Нет

certs_state_or_province_name

Область, регион регистрации организации

Moscow

Нет

certs_organization

Организация, для которой выпускается сертификат

'myCompany'

Нет

certs_email

Почта администратора организации

''

Нет

certs_common_name

Доменное имя, для которого заказывается сертификат

''

Нет

Генерация сертификатов выполняется исходя из переменной certs_components или файла, указанного в переменной certs_var_file, который служит для объединения следующих файлов:

  • pbr/owned/dbbr/package/scripts/Ansible/vars/components.yml
  • pbr/owned/pbra/package/scripts/Ansible/vars/components.yml
  • pbr/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 при запуске плейбука.

- 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
  1. Запустите генерацию сертификатов командой:

    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 со всеми созданными сертификатами.