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.