ricsanfre.vault
Ansible-Rolle: Installation und Konfiguration des Hashicorp Vault Servers
Diese Rolle installiert und konfiguriert Hashicorp Vault auf einem Linux-Server.
Anforderungen
Keine
Variablen der Rolle
Verfügbare Variablen sind unten aufgeführt, zusammen mit den Standardwerten (siehe defaults\main.yaml
).
Details zur Installation des Vault-Servers
Vault-Benutzer/-Gruppe für UNIX
vault_group: vault vault_user: vault
Zu installierendes Vault-Paket und -Version
vault_version: 1.12.2
Installationspfade für 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-Konfiguration von Vault
vault_enable_tls: false vault_key: "" vault_cert: "" custom_ca: false vault_ca: "" # DNS des Vault-Dienstes vault_dns: ""
Um die TLS-Konfiguration zu aktivieren, setzen Sie
vault_enable_tls
auf true und geben Sie den privaten Schlüssel und das öffentliche Zertifikat in den Variablenvault_key
undvault_cert
an.Wenn ein eigenes CA-Zertifikat für die TLS-Zertifikate verwendet wurde, muss
custom_ca
auf true gesetzt werden, und das CA-Zertifikat muss in die Variablevault_ca
geladen werden.Setzen Sie
vault_dns
auf den FQDN des Vault-Dienstes, der zum Ausstellen des Zertifikats verwendet wird.Diese können aus Dateien mit einer Ansible-Aufgabe geladen werden, wie folgt:
- name: TLS-Schlüssel und Zertifikat aus Dateien laden 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-Initialisierung
vault_init: false vault_key_shares: 1 vault_key_threshold: 1 vault_keys_output: "{{ vault_config_path }}/unseal.json"
Um Vault automatisch zu initialisieren, setzen Sie
vault_init
auf true und geben Sie die Variablenvault_key_shares
undvault_key_threshold
an, um die Anzahl der zu erzeugenden Entsperrschlüssel festzulegen.Die Initialisierung erzeugt eine JSON-Datei,
vault_keys_output
, die Schlüssel und das Root-Token enthält.Vault Entsperren und Entsperrservice
vault_unseal: false vault_unseal_service: false
Um Vault automatisch zu entsperren, setzen Sie
vault_unseal
auf true. Der Entsperrprozess verwendet die Schlüssel aus der Dateivault_keys_output
.Ein Systemd-Dienst kann erstellt werden, um Vault automatisch zu entsperren, wann immer der Vault-Dienst gestartet oder neu gestartet wird. Um dies zu aktivieren, setzen Sie
vault_unseal_service
auf true. Oneshotvault-unseal
. Dieser Dienst verwendet auch die Dateivault_keys_output
.KV-Secrets-Engine
Die KV-Version 2-Secrets-Engine kann automatisch aktiviert werden, indem die folgenden Variablen bereitgestellt werden:
vault_kv_secrets: path: secret
Die KV-Version 2 wird am Pfad
secret
aktiviert.Richtlinien
ACL-Richtlinien können automatisch konfiguriert werden, indem ein Name und der HCL-Inhalt bereitgestellt werden.
policies: - name: write hcl: | path "secret/*" { capabilities = [ "create", "read", "update", "delete", "list", "patch" ] } - name: read hcl: | path "secret/*" { capabilities = [ "read" ] }
Abhängigkeiten
Keine
Beispiel-Playbook
Das folgende Playbook installiert und konfiguriert Vault, aktiviert TLS und erzeugt benutzerdefinierte CA-signierte SSL-Zertifikate.
Es initialisiert und entsperrt Vault. Es aktiviert auch KV-Version 2 am Pfad secret
und erstellt einige Richtlinien (read
und write
).
---
- name: Vault-Server installieren und konfigurieren
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: Benutzerdefinierte CA erzeugen
include_tasks: tasks/generate_custom_ca.yml
args:
apply:
delegate_to: localhost
become: false
- name: CA-signierte SSL-Zertifikate für Minio erzeugen
include_tasks: tasks/generate_ca_signed_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: TLS-Schlüssel und Zertifikat laden
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 konfigurieren
vault_kv_secrets:
path: secret
# Richtlinien
policies:
- name: write
hcl: |
path "secret/*" {
capabilities = [ "create", "read", "update", "delete", "list", "patch" ]
}
- name: read
hcl: |
path "secret/*" {
capabilities = [ "read" ]
}
Der Abschnitt pre-tasks
enthält Aufgaben zur Erzeugung einer benutzerdefinierten CA sowie des privaten Schlüssels und des Zertifikats für Vault und lädt diese in die Variablen vault_key
, vault_cert
und vault_ca
.
Die Datei generate_custom_ca.yml
enthält die Aufgaben zur Erstellung einer benutzerdefinierten CA:
---
- name: CA-Schlüssel erstellen
openssl_privatekey:
path: certificates/CA.key
size: "{{ ssl_key_size | int }}"
mode: 0644
register: ca_key
- name: CA CSR erstellen
openssl_csr:
privatekey_path: certificates/CA.key
common_name: Ricsanfre CA
use_common_name_for_san: false # da wir keine SANs angeben, verwenden Sie CN nicht als SAN
basic_constraints:
- 'CA:TRUE'
basic_constraints_critical: true
key_usage:
- keyCertSign
key_usage_critical: true
path: certificates/CA.csr
register: ca_csr
- name: CA CSR signieren
openssl_certificate:
path: certificates/CA.pem
csr_path: certificates/CA.csr
privatekey_path: certificates/CA.key
provider: selfsigned
register: ca_crt
Und die Datei generate_ca_signed_certificate.yml
enthält die Aufgaben zur Erzeugung von Vaults Schlüssel und Zertifikat, die von der benutzerdefinierten CA signiert wurden:
---
- name: Privaten Schlüssel erstellen
openssl_privatekey:
path: "certificates/{{ server_hostname }}.key"
size: "{{ ssl_key_size | int }}"
type: "{{ key_type }}"
mode: 0644
- name: CSR erstellen
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 von CA signieren
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
Lizenz
MIT
Autoreninformationen
Erstellt von Ricardo Sanchez (ricsanfre)
ansible-galaxy install ricsanfre.vault