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

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

[comment]: # ({8d9b38bd-fdcfe831})
#### Przegląd

Ta sekcja wyjaśnia, jak skonfigurować Zabbix do pobierania sekretów z silnika sekretów HashiCorp Vault KV - wersja 2.

Vault powinien zostać wdrożony i skonfigurowany zgodnie z opisem w oficjalnej [dokumentacji HashiCorp](https://www.vaultproject.io/docs/secrets/kv/kv-v2).

Aby dowiedzieć się więcej o konfigurowaniu TLS w Zabbix, zobacz [*Przechowywanie sekretów*](/manual/config/secrets#configuring-tls).

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

[comment]: # ({4abbcd52-9c0ce526})
#### Pobieranie poświadczeń bazy danych

Aby pomyślnie pobrać sekret z poświadczeniami bazy danych, należy skonfigurować oba elementy:

-   Zabbix server/proxy
-   Zabbix frontend

##### Server/proxy

Aby skonfigurować Zabbix [server](/manual/concepts/server/server_params) lub [proxy](/manual/concepts/proxy/proxy_params),
należy określić następujące parametry konfiguracyjne w pliku konfiguracyjnym:

-   `Vault` - który dostawca vault ma być używany;
-   `VaultToken` - token uwierzytelniania vault (szczegóły znajdują się w pliku konfiguracyjnym Zabbix server/proxy);
-   `VaultURL` - adres URL HTTP\[S\] serwera vault;
-   `VaultDBPath` - ścieżka do sekretu vault zawierającego poświadczenia bazy danych (tej opcji można użyć tylko wtedy, gdy nie są określone DBUser i DBPassword); Zabbix server lub proxy pobierze poświadczenia według kluczy "password" i "username";
-   `VaultPrefix` - niestandardowy prefiks dla ścieżki lub zapytania vault, zależnie od vault; jeśli nie zostanie określony, zostanie użyta najbardziej odpowiednia wartość domyślna.

:::noteimportant
Parametry konfiguracyjne `Vault`, `VaultToken`, `VaultURL` i `VaultPrefix` są również używane do uwierzytelniania w vault podczas przetwarzania makr secret vault przez Zabbix server (oraz Zabbix proxy, jeśli jest [skonfigurowany](/manual/web_interface/frontend_sections/administration/general#other)). Zabbix server i proxy nie otworzą makr secret vault, które zawierają poświadczenia DB z VaultDBPath.<br><br>Zdecydowanie zaleca się używanie różnych tokenów dla różnych proxy.
:::

Zabbix server i Zabbix proxy odczytują parametry konfiguracyjne związane z vault z plików *zabbix_server.conf* i *zabbix_proxy.conf* podczas uruchamiania.
Dodatkowo Zabbix server i Zabbix proxy odczytają zmienną środowiskową `VAULT_TOKEN` tylko raz podczas uruchamiania i następnie ją usuną, aby nie była dostępna dla skryptów uruchamianych przez fork; wystąpi błąd, jeśli zarówno parametr `VaultToken`, jak i `VAULT_TOKEN` zawierają wartość.

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

[comment]: # ({901bf5bb-19842818})
**Przykład**

1. W pliku *zabbix_server.conf* określ następujące parametry:

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

2. Uruchom następujące polecenia CLI, aby utworzyć wymagany sekret w vault:

```bash
# Włącz punkt montowania "secret/", jeśli nie jest jeszcze włączony; zwróć uwagę, że musi być użyte "kv-v2".
vault secrets enable -path=secret/ kv-v2

# Dodaj nowe sekrety z kluczami username i password w punkcie montowania "secret/" oraz pod ścieżką "zabbix/database".
vault kv put -mount=secret zabbix/database username=zabbix password=<password>

# Sprawdź, czy sekret został pomyślnie dodany.
vault kv get secret/zabbix/database

# Na koniec przetestuj za pomocą Curl; zwróć uwagę, że "data" należy dodać ręcznie po punkcie montowania, a "/v1" przed punktem montowania; zobacz także parametr --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
```

3. W rezultacie serwer Zabbix pobierze następujące dane uwierzytelniające do uwierzytelniania bazy danych:

-   Nazwa użytkownika: zabbix
-   Hasło: <password>

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

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

Frontend Zabbix może być skonfigurowany do pobierania poświadczeń bazy danych z vault 
podczas [instalacji](/manual/installation/frontend) frontendu lub przez aktualizację 
pliku konfiguracyjnego frontendu (`zabbix.conf.php`). 

:::noteimportant
Jeśli poświadczenia vault zostały zmienione od czasu poprzedniej instalacji frontendu, uruchom ponownie instalację frontendu 
lub zaktualizuj `zabbix.conf.php`. Zobacz także: [Aktualizacja istniejącej konfiguracji](#updating-existing-configuration).
:::
  
Podczas **instalacji frontendu** parametry konfiguracyjne muszą zostać określone na etapie *Configure DB Connection*:

![](../../../../assets/en/manual/config/hashicorp_setup.png){width="600"}
  
-   Ustaw parametr *Store credentials in* na „HashiCorp Vault”.
-   Określ parametry połączenia:

|Parametr|Obowiązkowy|Wartość domyślna|Opis|
|---|-|---|------|
|*Vault API endpoint*|tak|https://localhost:8200|Określ URL połączenia z vault w formacie `scheme://host:port`|
|*Vault prefix*|nie|/v1/secret/data/|Podaj niestandardowy prefiks dla ścieżki lub zapytania vault. Jeśli nie zostanie podany, użyta zostanie wartość domyślna.<br>Przykład: `/v1/secret/data/zabbix/`|
|*Vault secret path*|nie| |Ścieżka do sekretu, z którego poświadczenia bazy danych będą pobierane przy użyciu kluczy „password” i „username”.<br>Przykład: `database`|
|*Vault authentication token*|nie| |Podaj token uwierzytelniający do dostępu tylko do odczytu do ścieżki sekretu.<br>Informacje o tworzeniu tokenów i polityk vault można znaleźć w [dokumentacji HashiCorp](https://learn.hashicorp.com/tutorials/vault/tokens).|

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

[comment]: # ({9d96212b-2e69e703})
#### Pobieranie wartości makr użytkownika

Aby używać HashiCorp Vault do przechowywania wartości makr użytkownika typu *Vault secret*, upewnij się, że:

- serwer/proxy Zabbix jest [skonfigurowany](/manual/config/secrets/hashicorp#serverproxy) do pracy z HashiCorp Vault;
- parametr *Vault provider* w [*Administracja → Ogólne → Inne*](/manual/web_interface/frontend_sections/administration/general#other) jest ustawiony na „HashiCorp Vault” (domyślnie);

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

:::noteclassic
Serwer Zabbix (oraz proxy Zabbix, jeśli jest [skonfigurowany](/manual/web_interface/frontend_sections/administration/general#other)) wymaga dostępu do wartości makr typu *Vault secret* z sejfu.
Frontend Zabbix nie wymaga takiego dostępu.
:::

Wartość makra powinna zawierać ścieżkę referencyjną (w postaci `path:key`, na przykład `macros:password`).
Token uwierzytelniający określony podczas konfiguracji serwera/proxy Zabbix (parametrem `VaultToken`) musi zapewniać dostęp tylko do odczytu do tej ścieżki.

Szczegółowe informacje o przetwarzaniu wartości makr przez Zabbix można znaleźć w sekcji [*Makra typu Vault secret*](/manual/config/macros/secret_macros#vault-secret).

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

[comment]: # ({0481f8ba-b5cf890a})
**Składnia ścieżki**

Symbole ukośnika ("/") i dwukropka (":") są zastrzeżone.

Ukośnik może być używany wyłącznie do oddzielania punktu montowania od ścieżki (np. *secret/zabbix*, gdzie punkt montowania to "secret", a ścieżka to "zabbix"). W przypadku makr Vault dwukropek może być używany wyłącznie do oddzielania ścieżki/zapytania od klucza.

Możliwe jest zakodowanie symboli ukośnika i dwukropka w formacie URL, jeśli istnieje potrzeba utworzenia punktu montowania o nazwie rozdzielonej ukośnikiem (np. *foo/bar/zabbix*, gdzie punkt montowania to "foo/bar", a ścieżka to "zabbix", można zakodować jako "foo%2Fbar/zabbix"), a także jeśli nazwa punktu montowania lub ścieżka muszą zawierać dwukropek.

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

[comment]: # ({9f72277f-0c64c650})
**Przykład**

1. W Zabbix dodaj makro użytkownika {$PASSWORD} typu "Vault secret" o wartości `macros:password`

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

2. Uruchom następujące polecenia CLI, aby utworzyć wymagany sekret w vault:

```bash
# Włącz punkt montowania "secret/", jeśli nie jest jeszcze włączony; zwróć uwagę, że musi zostać użyte "kv-v2".
vault secrets enable -path=secret/ kv-v2

# Umieść nowy sekret z kluczem "password" w punkcie montowania "secret/" i pod ścieżką "zabbix/macros".
vault kv put -mount=secret zabbix/macros password=<password>

# Sprawdź, czy sekret został pomyślnie dodany.
vault kv get secret/zabbix/macros

# Na koniec przetestuj za pomocą Curl; zwróć uwagę, że "data" należy dodać ręcznie po punkcie montowania, a "/v1" przed punktem montowania; zobacz także parametr --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/macros
```

3. W rezultacie Zabbix rozwiąże makro {$PASSWORD} do wartości: <password>

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

[comment]: # ({e1678ca3-d8c23996})
#### Aktualizacja istniejącej konfiguracji

Aby zaktualizować istniejącą konfigurację pobierania sekretów z HashiCorp Vault:

1. Zaktualizuj parametry pliku konfiguracyjnego serwera Zabbix lub proxy zgodnie z opisem w sekcji [*Dane uwierzytelniające bazy danych*](#retrieving-database-credentials).

2. Zaktualizuj ustawienia połączenia z DB, rekonfigurując frontend Zabbix i podając wymagane parametry zgodnie z opisem w sekcji [*Frontend*](#frontend).
Aby ponownie skonfigurować frontend Zabbix, otwórz w przeglądarce URL konfiguracji frontend:

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

Alternatywnie parametry te można ustawić w [pliku konfiguracyjnym 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. W razie potrzeby skonfiguruj makra użytkownika zgodnie z opisem w sekcji [*Wartości makr użytkownika*](#frontend).

Aby zaktualizować istniejącą konfigurację pobierania sekretów z CyberArk Vault, zobacz [*Konfiguracja CyberArk*](/manual/config/secrets/cyberark#update-existing-configuration).

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