vault
Ansible Роль: Установка и Конфигурация Hashicorp Vault Сервер
Эта роль устанавливает и настраивает Hashicorp Vault на Linux сервере.
Требования
Нет
Переменные Роли
Доступные переменные перечислены ниже с значениями по умолчанию (см. defaults\main.yaml
)
Детали установки сервера Vault
Пользователь/группа UNIX для Vault
vault_group: vault vault_user: vault
Пакет и версия Vault для установки
vault_version: 1.12.2
Пути установки Vault
vault_bin_path: /usr/local/bin vault_config_path: /etc/vault vault_tls_path: /etc/vault/tls vault_plugin_path: /usr/local/lib/vault/plugins vault_data_path: /var/lib/vault vault_log_path: /var/log/vault
Конфигурация TLS для Vault
vault_enable_tls: false vault_key: "" vault_cert: "" custom_ca: false vault_ca: "" # dns для сервиса vault vault_dns: ""
Чтобы включить конфигурацию TLS, установите
vault_enable_tls
в true и добавьте закрытый ключ и публичный сертификат в переменныеvault_key
иvault_cert
.Если для подписи TLS сертификатов используется собственный CA, установите
custom_ca
в true и добавьте сертификат CA в переменнуюvault_ca
.Установите
vault_dns
в FQDN сервиса vault, который используется для выдачи сертификата.Эти данные можно загрузить из файлов с помощью задания ansible, например:
- name: Загрузить tls ключ и сертификат из файлов set_fact: vault_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}" vault_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}" vault_ca: "{{ lookup('file','certificates/ca.crt') }}"
Инициализация Vault
vault_init: false vault_key_shares: 1 vault_key_threshold: 1 vault_keys_output: "{{ vault_config_path }}/unseal.json"
Чтобы автоматически инициализировать vault, установите
vault_init
в true и укажите переменныеvault_key_shares
иvault_key_threshold
, чтобы задать количество генерируемых ключей для разблокировки.Инициализация создаст json-файл
vault_keys_output
, содержащий ключи и корневой токен.Разблокировка и служба unseal Vault
vault_unseal: false vault_unseal_service: false
Чтобы автоматически разблокировать vault, установите
vault_unseal
в true. Процесс разблокировки будет использовать ключи из файлаvault_keys_output
.Можно создать службу systemd для автоматической разблокировки vault при каждом запуске или перезапуске сервиса vault. Для этого установите
vault_unseal_service
в true. Служба будет одноразовойvault-unseal
. Эта служба также использует файлvault_keys_output
.Движок секретов KV
Движок секретов KV версии 2 можно автоматически включить, указав следующие переменные
vault_kv_secrets: path: secret
KV версия 2 будет включена по пути
secret
.Политики
Политики ACL могут быть автоматически настроены, указывая имя и hcl-контент.
policies: - name: write hcl: | path "secret/*" { capabilities = [ "create", "read", "update", "delete", "list", "patch" ] } - name: read hcl: | path "secret/*" { capabilities = [ "read" ] }
Зависимости
Нет
Пример Playbook
Следующий playbook устанавливает и настраивает vault, включая TLS и генерируя SSL сертификаты, подписанные собственным CA. Он инициализирует и разблокирует Vault. Он также включает KV версии 2 по пути secret
и создает несколько политик (read
и write
).
---
- name: Установка и настройка Vault Сервер
hosts: vault-server
become: true
gather_facts: true
vars:
server_hostname: vault.ricsanfre.com
ssl_key_size: 4096
key_type: RSA
country_name: ES
email_address: [email protected]
organization_name: Ricsanfre
ansible_user: root
pre_tasks:
- name: Генерация собственного CA
include_tasks: tasks/generate_custom_ca.yml
args:
apply:
delegate_to: localhost
become: false
- name: Генерация SSL сертификатов, подписанных собственным CA
include_tasks: tasks/generate_ca_signed_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: Загрузка tls ключа и сертификата
set_fact:
vault_key: "{{ lookup('file', 'certificates/' + server_hostname + '.key') }}"
vault_cert: "{{ lookup('file', 'certificates/' + server_hostname + '.pem') }}"
vault_ca: "{{ lookup('file', 'certificates/CA.pem') }}"
roles:
- role: ricsanfre.vault
vault_enable_tls: true
custom_ca: true
vault_init: true
vault_unseal: true
vault_unseal_service: true
tls_skip_verify: true
display_init_response: true
# Настройка KV
vault_kv_secrets:
path: secret
# Политики
policies:
- name: write
hcl: |
path "secret/*" {
capabilities = [ "create", "read", "update", "delete", "list", "patch" ]
}
- name: read
hcl: |
path "secret/*" {
capabilities = [ "read" ]
}
Секция pre-tasks
включает задачи по генерации собственного CA и ключа/сертификата vault и загрузке их в переменные vault_key
, vault_cert
и vault-ca
.
Где generate_custom_ca.yml
содержит задачи для генерации собственного CA:
---
- name: Создание ключа CA
openssl_privatekey:
path: certificates/CA.key
size: "{{ ssl_key_size | int }}"
mode: 0644
register: ca_key
- name: Создание CSR для CA
openssl_csr:
privatekey_path: certificates/CA.key
common_name: Ricsanfre CA
use_common_name_for_san: false
basic_constraints:
- 'CA:TRUE'
basic_constraints_critical: true
key_usage:
- keyCertSign
key_usage_critical: true
path: certificates/CA.csr
register: ca_csr
- name: Подписка CSR CA
openssl_certificate:
path: certificates/CA.pem
csr_path: certificates/CA.csr
privatekey_path: certificates/CA.key
provider: selfsigned
register: ca_crt
А generate_ca_signed_certificate.yml
содержит задачи для генерации ключа и сертификата Vault, подписанного собственным CA:
---
- name: Создание закрытого ключа
openssl_privatekey:
path: "certificates/{{ server_hostname }}.key"
size: "{{ ssl_key_size | int }}"
type: "{{ key_type }}"
mode: 0644
- name: Создание CSR
openssl_csr:
path: "certificates/{{ server_hostname }}.csr"
privatekey_path: "certificates/{{ server_hostname }}.key"
country_name: "{{ country_name }}"
organization_name: "{{ organization_name }}"
email_address: "{{ email_address }}"
common_name: "{{ server_hostname }}"
subject_alt_name: "DNS:{{ server_hostname }},IP:{{ ansible_default_ipv4.address }},IP:127.0.0.1"
- name: CSR подписанный CA
openssl_certificate:
csr_path: "certificates/{{ server_hostname }}.csr"
path: "certificates/{{ server_hostname }}.pem"
provider: ownca
ownca_path: certificates/CA.pem
ownca_privatekey_path: certificates/CA.key
Лицензия
MIT
Информация об Авторе
Создано Рикардо Санчесом (ricsanfre)
ansible-galaxy install ricsanfre/ansible-role-vault