Ta strona wygląda najlepiej z włączoną obsługą JavaScript
Bezproblemowe uruchamianie HashiCorp Vault - przewodnik krok po kroku przy użyciu usług systemd
· ☕ 9 min czytania
· 🐧 sysadmin
Wprowadzenie
Vault od HashiCorp wymaga odblokowania po każdym restarcie, aby zapewnić bezpieczeństwo przechowywanych sekretów. Ten poradnik przeprowadzi Cię przez automatyzację procesu odblokowywania za pomocą usługi systemd w systemie Linux.
Wymagania wstępne
Vault zainstalowany i skonfigurowany w Twoim systemie
1.Zaloguj się przez SSH: Połącz się ze swoim serwerem jako standardowy użytkownik i przełącz się na root.
1
sudo -i
2.Rozpocznij nową sesję bash: Uruchom nową powłokę bash i wyłącz historię.
Wyjaśnienie: Dla najwyższego bezpieczeństwa, uruchom komendę w nowej sesji powłoki, gdzie historia jest wyłączona, i upewnij się, że żadne wrażliwe informacje nie są przechowywane.
1
2
bash
set +o history
3.Utwórz plik do przechowywania hasła GPG: Upewnij się, że plik jest dostępny tylko dla użytkownika root.
1
echo"your-passphrase" > /root/.gpg_passphrase
4.Ustaw uprawnienia, aby plik był czytelny tylko dla użytkownika root.
1
chmod 400 /root/.gpg_passphrase
Krok 2: Szyfrowanie kluczy odblokowujących
1.Utwórz zaszyfrowany plik do przechowywania kluczy odblokowujących:
[Unit]Description=HashiCorp VaultDocumentation=https://www.vaultproject.io/docs/Requires=network-online.targetAfter=network-online.targetRequires=vault-unseal.service[Service]User=vaultGroup=vaultEnvironmentFile=/etc/vault.d/vault.envExecStart=/usr/bin/vault server -config=/etc/vault.d/vault.hclExecReload=/bin/kill --signal HUP $MAINPIDKillMode=processKillSignal=SIGINTRestart=on-failureRestartSec=5LimitNOFILE=65536LimitMEMLOCK=infinity[Install]WantedBy=multi-user.target
Krok 5: Utwórz usługę Vault Unseal
Utwórz nowy plik usługi w /etc/systemd/system/vault-unseal.service z następującą zawartością:
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]Description=Unseal VaultAfter=vault.serviceRequires=vault.service[Service]Type=oneshotExecStart=/usr/local/bin/unseal_vault.shEnvironment=VAULT_ADDR=https://<vault IP address>:8200Environment=DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus[Install]WantedBy=multi-user.target
Krok 6: Stwórz plik vault.env
1
2
3
4
cat << 'EOF' > /etc/vault.d/vault.env
VAULT_ADDR=https://<vault IP address>:8200
DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus
EOF
Krok 7: wyeksportuj zmienne do to .bashrc
1
2
3
4
BASHRC_PATH="$HOME/.bashrc"echo"export VAULT_ADDR='https://<vault IP address>:8200'" >> $BASHRC_PATHecho"export DBUS_SESSION_BUS_ADDRESS=\$XDG_RUNTIME_DIR/bus" >> $BASHRC_PATHsource$BASHRC_PATH
Dzięki tym modyfikacjom, usługa vault-unseal.service będzie uważana za część procesu vault.service. Restart vault.service będzie teraz także uruchamiał vault-unseal.service.
Krok 6: Przeładuj systemd i uruchom usługi
Przeładuj systemd, aby zastosować zmiany i uruchom usługi:
Wyjaśnienie: Co się dzieje podczas procesu rozruchu
Kiedy Twój system uruchamia się, dzieje się następująca sekwencja:
vault.service startuje: Jest to główna usługa dla Vault. Startuje zgodnie z jej konfiguracją.
vault-unseal.service startuje: Ta usługa jest skonfigurowana do uruchamiania po vault.service z powodu dyrektywy After=vault.service. Oznacza to, że vault-unseal.service nie uruchomi się, dopóki vault.service nie zostanie w pełni uruchomiona.
Usługa vault-unseal.service zależy od vault.service i będzie uruchamiać skrypt odblokowujący klucze dopiero po uruchomieniu usługi Vault.
Zachowanie przy ręcznym restarcie
Ręczny restart vault.service
Kiedy ręcznie restartujesz vault.service używając komendy:
1
systemctl restart vault.service
Oto co się dzieje:
vault.service zatrzymuje się: Usługa Vault zatrzymuje się, a następnie ponownie uruchamia.
vault-unseal.service uruchamia się automatycznie: Usługa vault-unseal.service uruchamia się automatycznie, ponieważ vault.service został zrestartowany. vault-unseal.service jest ustawiona do uruchamiania po vault.service podczas procesu rozruchu.
Sprawdzenie logu
Aby sprawdzić, czy faktycznie vault-unseal.service uruchomi się za każdym razem, gdy usługa vault.service jest restartowana, uruchom poniższą komendę:
1
tail -f /var/log/unseal_vault.log
W innej sesji SSH, zrestartuj vault.service:
1
systemctl restart vault.service
Następnie sprawdź status obu usług, aby upewnić się, że działają zgodnie z oczekiwaniami:
1
2
systemctl status vault.service
systemctl status vault-unseal.service
Podsumowanie
Ta konfiguracja zapewnia bezpieczną metodę odblokowywania Vault poprzez szyfrowanie kluczy odblokowujących za pomocą GPG i bezpieczne przechowywanie hasła. Skrypt pobiera hasło i odszyfrowuje klucze podczas działania, zwiększając bezpieczeństwo Twojej konfiguracji.
Postępując zgodnie z tym przewodnikiem, zapewniasz, że wrażliwe klucze odblokowujące nie są narażone na widok w postaci zwykłego tekstu, a dostęp do hasła jest ograniczony do użytkownika root, zapewniając dodatkową warstwę bezpieczeństwa.
vault-unseal.service będzie uruchamiana zarówno podczas procesu rozruchu, jak i podczas ręcznych restartów vault.service, powodując, że Vault automatycznie będzie odblokowany i operacyjny.