certhub

Ansible Роль: Certhub

Статус сборки

Устанавливает certhub и git-gau на серверах Linux, управляемых systemd.

Требования

  • Git
  • OpenSSL
  • Rsync, если целевая машина работает как сервер SSL/TLS.
  • Либо certbot, dehydrated или lego, если целевая машина работает как контроллер.

Переменные роли

Эта роль содержит несколько файлов task. Основной файл задач только импортирует некоторые из них:

  1. certhub-system-setup.yml: Создает пользователя и группу certhub, конфигурационную директорию и подготавливает домашнюю директорию.
  2. certhub-software-setup.yml: Загружает и устанавливает certhub и git-gau.
  3. certhub-git-setup.yml: Настраивает user.name и user.email в git.
  4. certhub-repo-setup.yml: Инициализирует локальный git репозиторий certs.

Следующие файлы задач содержат дополнительные шаги конфигурации:

  1. certbot-noroot-config.yml: Упрощает запуск certbot от имени неподдерживаемого пользователя certhub путем создания соответствующего файла cli.ini.

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

  1. Среда для единиц systemd: Переменные, содержащие пути к файлам окружающей среды, признаваемым всеми единицами certhub systemd.
  2. repo-push-units.yml: Настраивает единицы systemd для отправки репозитория сертификатов на SSL/TLS сервера при любых изменениях.
  3. certbot-run-units.yml: Настраивает единицы systemd для выдачи/обновления сертификата и контролирует его срок действия (контроллер).
  4. lego-run-units.yml: Настраивает единицы systemd для выдачи/обновления сертификата и контролирует его срок действия (контроллер).
  5. cert-export-units.yml: Настраивает единицы systemd, ответственные за развертывание сертификата на SSL/TLS сервере, перезагрузку затронутых сервисов и/или отправку сертификатов в указанные назначения.

Переменные для certhub-system-setup.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_user_group: certhub
certhub_user_name: certhub
certhub_user_shell: /usr/bin/git-shell

certhub_home_dir_path: /var/lib/certhub
certhub_home_dir_mode: 0755

certhub_config_dir_path: /etc/certhub
certhub_config_dir_owner: root
certhub_config_dir_group: root
certhub_config_dir_mode: 0755

certhub_status_dir_path: "{{ certhub_home_dir_path }}/status"
certhub_status_dir_owner: "{{ certhub_user_name }}"
certhub_status_dir_group: "{{ certhub_user_group }}"
certhub_status_dir_mode: 0755

certhub_certs_dir_path: "{{ certhub_home_dir_path }}/certs"
certhub_certs_dir_owner: "{{ certhub_user_name }}"
certhub_certs_dir_group: "{{ certhub_user_group }}"
certhub_certs_dir_mode: 0755

certhub_private_dir_path: "{{ certhub_home_dir_path }}/private"
certhub_private_dir_owner: "{{ certhub_user_name }}"
certhub_private_dir_group: "{{ certhub_user_group }}"
certhub_private_dir_mode: 0700

certhub_repo_path: "{{ certhub_home_dir_path}}/certs.git"

Переменные для certhub-software-setup.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_certhub_version: v1.0.0
certhub_certhub_checksum: "{{ certhub_certhub_releases[certhub_certhub_version]['checksum'] }}"
certhub_certhub_url: "{{ certhub_certhub_releases[certhub_certhub_version]['url'] }}"
certhub_certhub_prefix: /usr/local
certhub_certhub_archive_path: "{{ certhub_private_dir_path }}/certhub-dist-{{ certhub_certhub_version }}.tar.gz"

certhub_gitgau_version: v1.3.0
certhub_gitgau_checksum: "{{ certhub_gitgau_releases[certhub_gitgau_version]['checksum'] }}"
certhub_gitgau_url: "{{ certhub_gitgau_releases[certhub_gitgau_version]['url'] }}"
certhub_gitgau_prefix: /usr/local
certhub_gitgau_archive_path: "{{ certhub_private_dir_path }}/git-gau-dist-{{ certhub_gitgau_version }}.tar.gz"

Переменные certhub_certhub_releases и certhub_gitgau_releases содержат url и контрольные суммы всех публичных релизов. Установите certhub_certhub_version и certhub_gitgau_version, чтобы зафиксировать конкретную версию.

Переменные для certhub-git-setup.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_git_user_name: "{{ certhub_user_name }}"
certhub_git_user_email: "{{ certhub_user_name }}@{{ ansible_fqdn }}"

Переменные для certhub-repo-setup.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_repo_init_path: "{{ certhub_repo_path }}"
certhub_repo_init_message: Init

Настройка git репозитория пропускается, когда certhub_repo_init_path пустая строка.

Переменные для certbot-noroot-config.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_certbot_cli_ini_path: "{{ certhub_home_dir_path }}/.config/letsencrypt/cli.ini"
certhub_certbot_cli_ini_content: ""
certhub_certbot_work_dir: "{{ certhub_private_dir_path }}/certbot/work"
certhub_certbot_logs_dir: "{{ certhub_private_dir_path }}/certbot/logs"
certhub_certbot_config_dir: "{{ certhub_private_dir_path }}/certbot/config"

Переменная certhub_certbot_cli_ini_content может использоваться для добавления дополнительной конфигурации certbot. Например, staging=true, чтобы выбрать тестовую окружение во время оценки.

Среда для единиц systemd

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

# Дополнительный файл окружения, общий для всех экземпляров и сервисов certhub.
certhub_env_path: "{{ certhub_config_dir_path }}/env"
# Дополнительный файл окружения для каждого экземпляра, общий для всех служб certhub.
certhub_cert_env_path: "{{ certhub_config_dir_path}}/{{ certhub_cert_slug }}.env"
# Дополнительный файл окружения для каждого сервиса, общий для всех экземпляров сервиса certhub.
certhub_unit_env_path: "{{ certhub_config_dir_path}}/{{ certhub_unit_prefix }}.env"
# Дополнительный файл окружения для каждого экземпляра и каждого сервиса.
certhub_cert_unit_env_path: "{{ certhub_config_dir_path}}/{{ certhub_cert_slug }}.{{ certhub_unit_prefix }}.env"

certhub_env_owner: root
certhub_env_group: "{{ certhub_user_group }}"
certhub_env_mode: 0640

Используйте эти переменные в пользовательских задачах copy или template, чтобы заполнить файлы env с конфигурацией для сервисов certhub. Обратите внимание: для переменной certhub_unit_prefix нет значения по умолчанию. Эта переменная должна быть установлена в одно из префиксов сервисного модуля certhub. Следующие значения в настоящее время действительны:

  • certhub-cert-expiry
  • certhub-cert-export
  • certhub-cert-reload
  • certhub-cert-send
  • certhub-certbot-run
  • certhub-dehydrated-run
  • certhub-lego-run

Переменные для repo-push-units.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_repo_push_user: "{{ certhub_user_name }}"
certhub_repo_push_host: "{{ inventory_hostname }}"
certhub_repo_push_path: "{{ certhub_repo_path }}"
certhub_repo_push_remote: "{{ '{:s}@{:s}:{:s}'.format(certhub_repo_push_user, certhub_repo_push_host, certhub_repo_push_path) }}"
certhub_repo_push_path_unit: "{{ lookup('pipe', 'systemd-escape [email protected] ' + certhub_repo_push_remote | quote) }}"

Укажите certhub_repo_push_remote, чтобы полностью переопределить удаленный адрес.

Переменные для certbot-run-units.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_cert_slug: "{{ inventory_hostname }}"

certhub_cert_expiry_timer_unit: "certhub-cert-expiry@{{ certhub_cert_slug }}.timer"
certhub_certbot_run_path_unit: "certhub-certbot-run@{{ certhub_cert_slug }}.path"

Установите certhub_cert_slug, чтобы указать экземпляр сертификата.

Переменные для lego-run-units.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_cert_slug: "{{ inventory_hostname }}"

certhub_cert_expiry_timer_unit: "certhub-cert-expiry@{{ certhub_cert_slug }}.timer"
certhub_lego_run_path_unit: "certhub-lego-run@{{ certhub_cert_slug }}.path"

Установите certhub_cert_slug, чтобы указать экземпляр сертификата.

Переменные для cert-export-units.yml

Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml):

certhub_cert_slug: "{{ inventory_hostname }}"

certhub_cert_export_path_unit: "certhub-cert-export@{{ certhub_cert_slug }}.path"

certhub_cert_services: []

certhub_cert_reload_config_path: "{{ certhub_config_dir_path }}/{{ certhub_cert_slug }}.services-reload.txt"
certhub_cert_reload_path_unit: "certhub-cert-reload@{{ certhub_cert_slug }}.path"

certhub_cert_destinations: []

certhub_cert_send_config_path: "{{ certhub_config_dir_path }}/{{ certhub_cert_slug }}.destinations-send.txt"
certhub_cert_send_path_unit: "certhub-cert-send@{{ certhub_cert_slug }}.path"

Установите certhub_cert_slug, чтобы указать экземпляр сертификата. Список системных единиц сервиса, которые должны быть перезагружены всякий раз, когда экземпляр сертификата изменяется, можно указать с помощью certhub_cert_services. Список назначений, куда сертификат должен быть отправлен, может быть указан в certhub_cert_destinations.

Зависимости

Нет.

Пример плейбука

- name: Настройка контроллера Certhub
  hosts: certhub-controller
  tasks:
    - name: Убедитесь, что зависимости Certhub установлены
      package:
        name:
          - certbot
          - git
          - lexicon
          - openssl
        state: present

    - name: Установка Certhub
      import_role:
        name: znerol.certhub

- name: Настройка TLS сервера
  hosts: tls-server
  tasks:
    - name: Убедитесь, что зависимости Certhub установлены
      package:
        name:
          - git
          - openssl
        state: present

    - name: Установка Certhub
      import_role:
        name: znerol.certhub

    - name: Настройка единиц для отправки репозитория
      delegate_to: name-of-certhub-controller
      import_role:
        name: znerol.certhub
        tasks_from: repo-push-units.yml

- name: Конфигурация TLS сертификата
  hosts: tls-server
  tasks:
    - vars:
        certhub_cert_services:
          - nginx
      import_role:
        name: znerol.certhub
        tasks_from: cert-export-units.yml

    - name: Настройка единиц для запуска Certbot
      delegate_to: name-of-certhub-controller
      import_role:
        name: znerol.certhub
        tasks_from: certbot-run-units.yml

    - name: Установка CSR для Certbot
      delegate_to: name-of-certhub-controller
      become: yes
      become_user: root
      copy:
        dest: "{{ certhub_cert_csr_path }}"
        owner: root
        group: root
        mode: 0644
        content: |
          -----BEGIN CERTIFICATE REQUEST-----
          MIH6MIGhAgEAMBYxFDASBgNVBAMMC2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
          KoZIzj0DAQcDQgAE1XubF1Uc4T595zSzikHAJTkXRlV5Fn5MhVUhr/18bm++5z2j
          759NpRh/gbEieCT4sKZ0fUcPWBrLp5zf0CFaYqApMCcGCSqGSIb3DQEJDjEaMBgw
          FgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwIDSAAwRQIhANwIuwCc
          45XooSB4bleXURLDGuChxcdFYYSHnnQjArizAiBYefMa83Kk1AJUIArnJ0Rk162D
          Fw3tPbiEVAmmvl0/5A==
          -----END CERTIFICATE REQUEST-----

    - name: Установка конфигурации для Certbot
      delegate_to: name-of-certhub-controller
      become: yes
      become_user: root
      copy:
        dest: "{{ certhub_certbot_config_path }}"
        owner: root
        group: root
        mode: 0644
        content: |
          staging=true
          agree-tos=true
          register-unsafely-without-email=true
          manual-public-ip-logging-ok=true
          preferred-challenges=dns
          manual=true
          manual-auth-hook=/usr/local/lib/certhub/certbot-hooks/hook-lexicon-auth
          manual-cleanup-hook=/usr/local/lib/certhub/certbot-hooks/hook-lexicon-cleanup

    - name: Настройка окружения для единицы Certbot
      delegate_to: name-of-certhub-controller
      become: yes
      become_user: root
      vars:
        certhub_unit_prefix: certhub-certbot-run
      copy:
        dest: "{{ certhub_cert_unit_env_path }}"
        owner: "{{ certhub_env_owner }}"
        group: "{{ certhub_env_group }}"
        mode: "{{ certhub_env_mode }}"
        content: |
          CERTHUB_LEXICON_PROVIDER=cloudflare
          LEXICON_CLOUDFLARE_USERNAME="[email protected]"
          LEXICON_CLOUDFLARE_TOKEN="cloudflare-api-token"

Лицензия

BSD

О проекте

Certhub - centralized certificate management the unix way

Установить
ansible-galaxy install znerol/ansible-role-certhub
Лицензия
Unknown
Загрузки
266
Владелец