ricsanfre.vault
Rôle Ansible : Installation et Configuration du Serveur Hashicorp Vault
Ce rôle installe et configure Hashicorp Vault sur un serveur Linux.
Exigences
Aucune
Variables du Rôle
Les variables disponibles sont listées ci-dessous avec leurs valeurs par défaut (voir defaults\main.yaml
)
Détails de l'installation du serveur Vault
Utilisateur/groupe UNIX pour Vault
vault_group: vault vault_user: vault
Package et version de Vault à installer
vault_version: 1.12.2
Chemins d'installation de 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
Configuration TLS de Vault
vault_enable_tls: false vault_key: "" vault_cert: "" custom_ca: false vault_ca: "" # DNS du service Vault vault_dns: ""
Pour activer la configuration TLS, définissez
vault_enable_tls
sur true et fournissez la clé privée et le certificat public dans les variablesvault_key
etvault_cert
.Si une CA personnalisée a été utilisée pour signer les certificats TLS,
custom_ca
doit être défini sur true, et le certificat CA doit être chargé dans la variablevault_ca
.Définissez
vault_dns
sur le FQDN du service Vault utilisé pour émettre le certificat.Ils peuvent être chargés à partir de fichiers en utilisant une tâche ansible comme ceci :
- name: Charger la clé et le certificat TLS depuis des fichiers 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') }}"
Initialisation de Vault
vault_init: false vault_key_shares: 1 vault_key_threshold: 1 vault_keys_output: "{{ vault_config_path }}/unseal.json"
Pour initialiser automatiquement Vault, définissez
vault_init
sur true et fournissez les variablesvault_key_shares
etvault_key_threshold
pour spécifier le nombre de clés de déverrouillage à générer.L'initialisation générera un fichier json,
vault_keys_output
, contenant les clés et le jeton racine.Déverrouillage de Vault et service de déverrouillage
vault_unseal: false vault_unseal_service: false
Pour déverrouiller automatiquement Vault, définissez
vault_unseal
sur true. Le processus de déverrouillage utilisera les clés du fichiervault_keys_output
.Un service systemd peut être créé pour déverrouiller automatiquement Vault à chaque démarrage ou redémarrage du service Vault. Pour l'activer, définissez
vault_unseal_service
sur true. C'est un service de typeoneshot
nommévault-unseal
. Ce service utilise également le fichiervault_keys_output
.Moteur de secrets KV
L'engine de secrets KV version 2 peut être activé automatiquement en fournissant les variables suivantes :
vault_kv_secrets: path: secret
KV version 2 sera activé au chemin
secret
.Politiques
Les politiques ACL peuvent être configurées automatiquement, en fournissant un nom et le contenu HCL.
policies: - name: write hcl: | path "secret/*" { capabilities = [ "create", "read", "update", "delete", "list", "patch" ] } - name: read hcl: | path "secret/*" { capabilities = [ "read" ] }
Dépendances
Aucune
Exemple de Playbook
Le playbook suivant installe et configure Vault, en activant TLS et en générant des certificats SSL signés par une CA personnalisée.
Il initialise et déverrouille Vault. Il active également KV version 2 au chemin secret
et crée quelques politiques (read
et write
).
---
- name: Installer et configurer le serveur 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: Générer une CA personnalisée
include_tasks: tasks/generate_custom_ca.yml
args:
apply:
delegate_to: localhost
become: false
- name: Générer des certificats SSL signés par la CA personnalisée pour Minio
include_tasks: tasks/generate_ca_signed_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: Charger la clé et le certificat 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
# Configurer KV
vault_kv_secrets:
path: secret
# Politiques
policies:
- name: write
hcl: |
path "secret/*" {
capabilities = [ "create", "read", "update", "delete", "list", "patch" ]
}
- name: read
hcl: |
path "secret/*" {
capabilities = [ "read" ]
}
La section pre-tasks
inclut des tâches pour générer une CA personnalisée, ainsi que la clé privée et le certificat de Vault, et les charge dans les variables vault_key
, vault_cert
et vault_ca
.
Où generate_custom_ca.yml
contient les tâches pour générer une CA personnalisée :
---
- name: Créer la clé CA
openssl_privatekey:
path: certificates/CA.key
size: "{{ ssl_key_size | int }}"
mode: 0644
register: ca_key
- name: Créer la CSR de la CA
openssl_csr:
privatekey_path: certificates/CA.key
common_name: Ricsanfre CA
use_common_name_for_san: false # comme nous ne spécifions pas de SAN, ne pas utiliser CN comme SAN
basic_constraints:
- 'CA:TRUE'
basic_constraints_critical: true
key_usage:
- keyCertSign
key_usage_critical: true
path: certificates/CA.csr
register: ca_csr
- name: Signer la CSR de la CA
openssl_certificate:
path: certificates/CA.pem
csr_path: certificates/CA.csr
privatekey_path: certificates/CA.key
provider: selfsigned
register: ca_crt
Et generate_ca_signed_certificate.yml
contient les tâches pour générer la clé et le certificat de Vault signés par la CA personnalisée :
---
- name: Créer la clé privée
openssl_privatekey:
path: "certificates/{{ server_hostname }}.key"
size: "{{ ssl_key_size | int }}"
type: "{{ key_type }}"
mode: 0644
- name: Créer la 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 signée par la 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
Licence
MIT
Informations sur l'Auteur
Créé par Ricardo Sanchez (ricsanfre)
ansible-galaxy install ricsanfre.vault