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 Variablen vault_key und vault_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 Variable vault_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 Variablen vault_key_shares und vault_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 Datei vault_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. Oneshot vault-unseal. Dieser Dienst verwendet auch die Datei vault_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)

Über das Projekt

Vault hashicorp installation and configuration role

Installieren
ansible-galaxy install ricsanfre.vault
GitHub Repository
Lizenz
mit
Downloads
6.2k
Besitzer
Telecom engineer.