Vault

Narzędzie HashiCorp do bezpiecznego przechowywania sekretów: kluczy SSH, tokenów, haseł i kluczy API. Zarządza dostępem do wrażliwych danych w infrastrukturze.

Vault to narzędzie open source od HashiCorp do bezpiecznego przechowywania i kontrolowania dostępu do sekretów, czyli wrażliwych danych, których nie chcesz trzymać w kodzie ani w pliku .env na GitHubie. Pod pojęciem sekretów kryją się hasła do baz danych, tokeny API, klucze SSH, certyfikaty TLS i klucze szyfrujące. Zamiast rozsiewać te dane po dziesiątkach plików konfiguracyjnych, trzymasz je w jednym miejscu, które szyfruje wszystko w spoczynku i wydaje dostęp tylko po uwierzytelnieniu.

Jak to działa

Vault działa jako serwer z API. Po starcie jest zapieczętowany (sealed) i nic z niego nie wyciągniesz, dopóki go nie odpieczętujesz kluczami z procedury unseal. Aplikacja albo człowiek najpierw się uwierzytelnia (tokenem, kontem AppRole, tożsamością z Kubernetes, AWS IAM itp.), dostaje token z konkretnymi uprawnieniami opisanymi w politykach, i dopiero wtedy może czytać przypisane mu sekrety. Zasada jest prosta: każdy widzi tylko to, co musi.

Najmocniejszą funkcją są dynamiczne sekrety. Vault potrafi wygenerować login i hasło do bazy danych na żądanie, z ważnością na przykład godzinę, a potem sam je unieważnić. Dzięki temu nie krąży po firmie jedno stałe hasło do produkcyjnego Postgresa, które wyciekło trzy lata temu i nikt nie ma odwagi go zmienić. Dochodzi do tego szyfrowanie jako usługa (transit) i pełny audyt, kto i kiedy po co sięgnął.

Przykład z praktyki

Załóżmy, że potrzebujesz hasła do bazy w skrypcie deploya. Zamiast wklejać je na sztywno, robisz tak:

  • logujesz się: vault login -method=approle role_id=... secret_id=...
  • zapisujesz sekret: vault kv put secret/myapp/db password=s3kret
  • odczytujesz w pipelinie: vault kv get -field=password secret/myapp/db

W CI/CD (np. GitLab albo GitHub Actions) runner uwierzytelnia się do Vaulta swoją tożsamością i pobiera sekrety w locie, więc nigdzie nie lądują w repozytorium ani w logach.

Częste błędy

Najczęstsza wpadka to traktowanie Vaulta jak zwykłej bazy z hasłami i uruchamianie go w trybie -dev na produkcji. Tryb dev trzyma wszystko w pamięci, jest automatycznie odpieczętowany i ginie po restarcie. Pamiętaj też, że Vault szyfruje sekrety, ale aplikacja, która je odczyta, ma je w pamięci jak każdą inną zmienną. Nie zapomnij o backupie kluczy unseal i tokenu root, bo bez nich po awarii zostajesz z zaszyfrowanym pudłem, którego nie otworzysz.

Pojęcia powiązane: secrets management, dynamic secrets, AppRole, HashiCorp, KMS, klucze SSH, DevOps, CI/CD.