Co to są wpisy tajne i jak je obsługiwać w języku Java
Wpisy tajne to ciągi znaków, które nie powinny być udostępniane światu zewnętrznego: mogą to być hasła bazy danych, prywatne klucze szyfrowania, osobiste tokeny dostępu itd. W przypadku zwiększonych zabezpieczeń wiele osób uważa również, że wszystkie elementy, które mogą pomóc atakującemu, powinny być traktowane jako wpis tajny: na przykład adres URL produkcyjnej bazy danych może być postrzegany jako wpis tajny. Twoja baza danych nie powinna być publicznie dostępna. Uzasadnieniem jest to, że tego rodzaju informacje są poufne z natury, a mniej informacji jest dostępnych w kodzie, tym lepiej.
Co to jest Zero Trust i Zero Secrets?
Pojęcie zero trust polega na tym, że nikt nie powinien być ślepo zaufany i może uzyskiwać dostęp do zasobów firmy bez weryfikacji i autoryzacji.
Ta koncepcja dotyczy również aplikacji internetowych: nie powinny mieć wpisów tajnych przechowywanych w kodzie ani w końcowych plikach binarnych. To, co nazywamy Zero Secrets.
Wpisy tajne powinny być zarządzane przez system zewnętrzny z rygorystycznymi regułami dostępu i walidacją w celu zmniejszenia ryzyka ataku.
Nie umieszczaj wpisów tajnych w repozytoriach Git
Nawet jeśli repozytorium Git jest prywatne, umieszczenie dowolnego wpisu tajnego w kodzie źródłowym jest złym rozwiązaniem:
- Każda osoba mająca dostęp do repozytorium będzie wiedziała, że twoje poufne dane
- Każda osoba mająca dostęp do pliku binarnego aplikacji może wyodrębnić z niej wpisy tajne
Ponadto po zapisaniu wpisu tajnego w repozytorium Git osoby atakujące zawsze mogą je znaleźć, patrząc w historii repozytorium, gdzie można go zapomnieć po upływie długiego czasu.
Nawet jeśli wydaje się to praktyczne, nigdy nie należy przechowywać żadnych wpisów tajnych w repozytorium kodu źródłowego. Aby uniknąć tego problemu, możesz użyć narzędzi automatycznych, które regularnie sprawdzają repozytorium i wysyłają ostrzeżenia w przypadku znalezienia hasła lub adresu URL bazy danych przechowywanego przez pomyłkę.
Korzystanie ze zmiennych środowiskowych
Najprostszym rozwiązaniem do zarządzania wpisami tajnymi jest użycie zmiennych środowiskowych. Mają one kilka korzyści:
- Są łatwe w użyciu
- Działają one we wszystkich systemach (nawet w systemach lokalnych)
- Każdy je zna i rozumie, jak działają
Jednak nie są one wystarczająco bezpieczne: wszystkie procesy w systemie mogą je odczytać i są łatwo uwidocznione przy użyciu rozszerzeń zarządzania Java (JMX) w systemie Java.
W związku z tym zmienne środowiskowe są często postrzegane jako pierwszy krok w kierunku zero trust: są one bezpieczniejsze niż przechowywanie wpisów tajnych bezpośrednio w kodzie źródłowym, ale brakuje im możliwości zarządzania i są łatwe w dostępie dla osób atakujących.
Korzystanie z wpisów tajnych platformy Kubernetes
Platforma Kubernetes ma pojęcie secrets
, które jest kolejnym dobrym rozwiązaniem. Te wpisy tajne można załadować jako plik w systemie plików aplikacji: program Java może następnie odczytać ten plik podczas uruchamiania, aby uzyskać dostęp do tych wpisów tajnych. Narzędzia, takie jak struktury Spring Framework, mają nawet standardową obsługę tego mechanizmu, umożliwiając im używanie tych wpisów tajnych w łatwy i wydajny sposób.
Ten mechanizm jest bezpieczniejszy niż zmienne środowiskowe, ponieważ te pliki mogą być odczytywane tylko przez proces, który ich wymaga. Korzystają one również z rozbudowanego ekosystemu Kubernetes i mogą być zarządzane przez różne narzędzia do zarządzania, w tym narzędzia dostarczane przez dostawcę usług w chmurze.
Chociaż wpisy tajne platformy Kubernetes są dobrym rozwiązaniem dla platformy Kubernetes, są one również ograniczone do platformy Kubernetes i nie mają zaawansowanych możliwości zarządzania, w zależności od narzędzi używanych do zarządzania infrastrukturą Kubernetes.
Korzystanie z magazynu wpisów tajnych
Magazyn wpisów tajnych, taki jak Hashicorp Vault lub Azure Key Vault, to wyspecjalizowane oprogramowanie do zarządzania wpisami tajnymi. Oferuje rozbudowany system zarządzania umożliwiający autoryzowanie użytkowników, rotację kluczy zabezpieczeń i weryfikowanie, do którego wpisu tajnego może uzyskać dostęp aplikacja.
Zapewniają one również zewnętrzny interfejs API, dzięki czemu mogą być używane w dowolnym systemie. Możesz na przykład użyć usługi Azure Key Vault we wszystkich usługach platformy Azure, w tym usługi Virtual Machines, aplikacja systemu Azure Services, Azure Kubernetes Services lub Azure Spring Apps.
Magazyn wpisów tajnych to najbezpieczniejsze rozwiązanie do zarządzania wpisami tajnymi, ale wymaga użycia dedykowanego narzędzia.