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 variables vault_key et vault_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 variable vault_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 variables vault_key_shares et vault_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 fichier vault_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 type oneshot nommé vault-unseal. Ce service utilise également le fichier vault_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.

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)

À propos du projet

Vault hashicorp installation and configuration role

Installer
ansible-galaxy install ricsanfre.vault
Licence
mit
Téléchargements
6.2k
Propriétaire
Telecom engineer.