[comment]: # ({4dc10e58-317d63e9})
# 2 Configurazione di HashiCorp

[comment]: # ({/4dc10e58-317d63e9})

[comment]: # ({8d9b38bd-fdcfe831})
#### Panoramica

Questa sezione spiega come configurare Zabbix per recuperare i segreti da HashiCorp Vault KV Secrets Engine - Version 2.

Il vault deve essere distribuito e configurato come descritto nella [documentazione ufficiale di HashiCorp](https://www.vaultproject.io/docs/secrets/kv/kv-v2).

Per informazioni sulla configurazione di TLS in Zabbix, vedere [*Archiviazione dei segreti*](/manual/config/secrets#configuring-tls).

[comment]: # ({/8d9b38bd-fdcfe831})

[comment]: # ({4abbcd52-9c0ce526})
#### Recupero delle credenziali del database

Per recuperare correttamente un secret con le credenziali del database, è necessario configurare entrambi: 

-   Zabbix server/proxy
-   Zabbix frontend

##### Server/proxy

Per configurare Zabbix [server](/manual/concepts/server/server_params) o [proxy](/manual/concepts/proxy/proxy_params), 
specificare i seguenti parametri di configurazione nel file di configurazione:

-   `Vault` - quale provider vault deve essere utilizzato;
-   `VaultToken` - token di autenticazione del vault (vedere il file di configurazione di Zabbix server/proxy per i dettagli);
-   `VaultURL` - URL HTTP\[S\] del server vault;
-   `VaultDBPath` - percorso del secret del vault contenente le credenziali del database (questa opzione può essere usata solo se DBUser e DBPassword non sono specificati); Zabbix server o proxy recupererà le credenziali tramite le chiavi "password" e "username";
-   `VaultPrefix` - prefisso personalizzato per il percorso o la query del vault, a seconda del vault; se non specificato, verrà usato il valore predefinito più adatto.

:::noteimportant
I parametri di configurazione `Vault`, `VaultToken`, `VaultURL` e `VaultPrefix` sono utilizzati anche per l'autenticazione al vault durante l'elaborazione delle macro del secret vault da parte di Zabbix server (e di Zabbix proxy, se [configurato](/manual/web_interface/frontend_sections/administration/general#other)). Zabbix server e i proxy non apriranno le macro del secret vault che contengono credenziali DB da VaultDBPath.<br><br>Si raccomanda vivamente di usare token diversi per proxy diversi.
:::

Zabbix server e Zabbix proxy leggono i parametri di configurazione relativi al vault da *zabbix_server.conf* e *zabbix_proxy.conf* all'avvio.
Inoltre, Zabbix server e Zabbix proxy leggeranno la variabile di ambiente `VAULT_TOKEN` una sola volta all'avvio e la annulleranno in modo che non sia disponibile tramite script forked; si verifica un errore se entrambi i parametri `VaultToken` e `VAULT_TOKEN` contengono un valore.

[comment]: # ({/4abbcd52-9c0ce526})

[comment]: # ({901bf5bb-19842818})
**Esempio**

1. In *zabbix_server.conf*, specificare i seguenti parametri:

```ini
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
```

2. Eseguire i seguenti comandi CLI per creare il secret richiesto nel vault:

```bash
# Abilitare il punto di mount "secret/" se non è già abilitato; notare che deve essere usato "kv-v2".
vault secrets enable -path=secret/ kv-v2

# Inserire nuovi secret con le chiavi username e password sotto il punto di mount "secret/" e il percorso "zabbix/database".
vault kv put -mount=secret zabbix/database username=zabbix password=<password>

# Verificare che il secret sia stato aggiunto correttamente.
vault kv get secret/zabbix/database

# Infine verificare con Curl; notare che "data" deve essere aggiunto manualmente dopo il punto di mount e "/v1" prima del punto di mount, vedere anche il parametro --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
```

3. Di conseguenza, Zabbix server recupererà le seguenti credenziali per l'autenticazione al database:

-   Nome utente: zabbix
-   Password: <password>

[comment]: # ({/901bf5bb-19842818})

[comment]: # ({26ba1bdc-0cae9564})
##### Frontend

Il frontend di Zabbix può essere configurato per recuperare le credenziali del database dal vault 
sia durante l'[installazione](/manual/installation/frontend) del frontend sia aggiornando il 
file di configurazione del frontend (`zabbix.conf.php`). 

:::noteimportant
Se le credenziali del vault sono state modificate dopo la precedente installazione del frontend, eseguire nuovamente l'installazione del frontend 
oppure aggiornare `zabbix.conf.php`. Vedere anche: [Aggiornamento della configurazione esistente](#updating-existing-configuration).
:::
  
Durante l'**installazione del frontend** i parametri di configurazione devono essere specificati nel passaggio *Configure DB Connection*:

![](../../../../assets/en/manual/config/hashicorp_setup.png){width="600"}
  
-   Impostare il parametro *Store credentials in* su "HashiCorp Vault".
-   Specificare i parametri di connessione:

|Parametro|Obbligatorio|Valore predefinito|Descrizione|
|---|-|---|------|
|*Vault API endpoint*|sì|https://localhost:8200|Specificare l'URL per la connessione al vault nel formato `scheme://host:port`|
|*Vault prefix*|no|/v1/secret/data/|Fornire un prefisso personalizzato per il percorso o la query del vault. Se non specificato, viene utilizzato quello predefinito.<br>Esempio: `/v1/secret/data/zabbix/`|
|*Vault secret path*|no| |Un percorso del segreto da cui recuperare le credenziali del database tramite le chiavi "password" e "username".<br>Esempio: `database`|
|*Vault authentication token*|no| |Fornire un token di autenticazione con accesso in sola lettura al percorso del segreto.<br>Consultare la [documentazione di HashiCorp](https://learn.hashicorp.com/tutorials/vault/tokens) per informazioni sulla creazione di token e policy del vault.|

[comment]: # ({/26ba1bdc-0cae9564})

[comment]: # ({9d96212b-2e69e703})
#### Recupero dei valori delle macro utente

Per utilizzare HashiCorp Vault per memorizzare i valori delle macro utente *Vault secret*, assicurati che:

- Zabbix server/proxy sia [configurato](/manual/config/secrets/hashicorp#serverproxy) per funzionare con HashiCorp Vault;
- il parametro *Vault provider* in [*Administration → General → Other*](/manual/web_interface/frontend_sections/administration/general#other) sia impostato su "HashiCorp Vault" (predefinito);

![](../../../../assets/en/manual/config/provider_hashicorp.png)

:::noteclassic
Zabbix server (e Zabbix proxy, se [configurato](/manual/web_interface/frontend_sections/administration/general#other)) richiedono l'accesso ai valori delle macro *Vault secret* dal vault.
Zabbix frontend non necessita di tale accesso.
:::

Il valore della macro deve contenere un percorso di riferimento (come `path:key`, ad esempio `macros:password`).
Il token di autenticazione specificato durante la configurazione di Zabbix server/proxy (tramite il parametro `VaultToken`) deve fornire accesso in sola lettura a questo percorso.

Per informazioni dettagliate sull'elaborazione dei valori delle macro da parte di Zabbix, vedi [*Vault secret macros*](/manual/config/macros/secret_macros#vault-secret).

[comment]: # ({/9d96212b-2e69e703})

[comment]: # ({0481f8ba-b5cf890a})
**Sintassi del percorso**

I simboli barra obliqua ("/") e due punti (":") sono riservati.

Una barra obliqua può essere utilizzata solo per separare un punto di mount da un percorso (ad esempio, *secret/zabbix*, dove il punto di mount è "secret" e il percorso è "zabbix"). Nel caso delle macro Vault, i due punti possono essere utilizzati solo per separare un percorso/query da una chiave.

È possibile codificare in URL i simboli barra obliqua e due punti se è necessario creare un punto di mount con un nome separato da una barra obliqua (ad esempio, *foo/bar/zabbix*, dove il punto di mount è "foo/bar" e il percorso è "zabbix", può essere codificato come "foo%2Fbar/zabbix") e se un nome di punto di mount o un percorso devono contenere i due punti.

[comment]: # ({/0481f8ba-b5cf890a})

[comment]: # ({9f72277f-0c64c650})
**Esempio**

1. In Zabbix, aggiungere una macro utente {$PASSWORD} di tipo "Vault secret" e con il valore `macros:password`

![](../../../../assets/en/manual/config/hashi_macro.png)

2. Eseguire i seguenti comandi CLI per creare il secret richiesto nel vault:

```bash
# Abilitare il punto di mount "secret/" se non è già abilitato; notare che deve essere usato "kv-v2".
vault secrets enable -path=secret/ kv-v2

# Inserire un nuovo secret con chiave "password" sotto il punto di mount "secret/" e il percorso "zabbix/macros".
vault kv put -mount=secret zabbix/macros password=<password>

# Verificare che il secret sia stato aggiunto correttamente.
vault kv get secret/zabbix/macros

# Infine verificare con Curl; notare che "data" deve essere aggiunto manualmente dopo il punto di mount e "/v1" prima del punto di mount, vedere anche il parametro --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/macros
```

3. Di conseguenza, Zabbix risolverà la macro {$PASSWORD} nel valore: <password>

[comment]: # ({/9f72277f-0c64c650})

[comment]: # ({e1678ca3-d8c23996})
#### Aggiornamento di una configurazione esistente

Per aggiornare una configurazione esistente per il recupero dei segreti da un HashiCorp Vault:

1. Aggiornare i parametri del file di configurazione di Zabbix server o proxy come descritto nella sezione [*Credenziali del database*](#retrieving-database-credentials).

2. Aggiornare le impostazioni di connessione al DB riconfigurando Zabbix frontend e specificando i parametri richiesti come descritto nella sezione [*Frontend*](#frontend).
Per riconfigurare Zabbix frontend, aprire nel browser l'URL di configurazione del frontend:

-   per Apache: http://<server_ip_or_name>/zabbix/setup.php
-   per Nginx: http://<server_ip_or_name>/setup.php

In alternativa, questi parametri possono essere impostati nel [file di configurazione del frontend](/manual/installation/frontend#install) (*zabbix.conf.php*):

```ini
$DB['VAULT']                    = 'HashiCorp';
$DB['VAULT_URL']                = 'https://localhost:8200';
$DB['VAULT_DB_PATH']            = 'database';
$DB['VAULT_TOKEN']              = '<mytoken>';
$DB['VAULT_CERT_FILE']          = '';
$DB['VAULT_KEY_FILE']           = '';
$DB['VAULT_PREFIX']             = '/v1/secret/data/zabbix/';
```

3. Configurare le macro utente come descritto nella sezione [*Valori delle macro utente*](#frontend), se necessario.

Per aggiornare una configurazione esistente per il recupero dei segreti da un CyberArk Vault, vedere [*Configurazione di CyberArk*](/manual/config/secrets/cyberark#update-existing-configuration).

[comment]: # ({/e1678ca3-d8c23996})
