Jak przechowywać poświadczenia wymagane przez aplikację?

13

Wszyscy mówią, że przechowywanie poświadczeń w kontroli wersji (git) jest złą rzeczą. Dlatego muszą istnieć inne sposoby przechowywania poświadczeń, które są znacznie lepsze.

Aplikacja musi skądś uzyskać poświadczenia, aby móc korzystać z usług, od których zależy. Poświadczenia te są zwykle przechowywane w plikach konfiguracyjnych. Ręczne wprowadzanie każdego serwera w celu utworzenia tego pliku nie wchodzi w rachubę, ponieważ serwery przychodzą i odchodzą bez ludzkiej interwencji.

Jak zarządzać poświadczeniami aplikacji?

Evgeny
źródło
4
Jest to również prawdopodobnie zbyt szeroki na jedną odpowiedź, która nie jest wielkości książki.
coderanger
1
@coderanger Oglądając prezentację, kategoryzacja różnych rodzajów tajemnic jest świetna. I widzę, jak myślisz, że to książka ... ale powyższe pytanie nie wymaga klasyfikacji, tylko rozwiązanie konkretnego problemu.
Evgeny
2
Jeśli masz konkretną sytuację, edytuj pytanie, aby uwzględnić więcej szczegółów, takich jak rodzaj używanego tajnego klucza (hasło do bazy danych, klucze TLS itp.).
coderanger
1
To jest zbyt szerokie. Dostępnych jest co najmniej 14 narzędzi, w tym niestandardowe skrypty i szablony: gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd Wymagane są dodatkowe szczegóły (podobnie jak wymagany jest interfejs CLI, czy jest to rozwiązanie dla chmury lub duże aplikacje monolityczne itp.)
Alexandre
1
@Alexandre Hah, otworzyłem to i pomyślałem „dobra lista kompilacji”, a potem zobaczyłem siebie cytowanego na dole :)
programista

Odpowiedzi:

5

Właściwe zarządzanie tajemnicami aplikacji zawsze było wyzwaniem. Wraz z przyjęciem chmury pojawiły się nowe wyzwania. Jest świetna prezentacja OWASP na temat rzeczywistości i wyzwań związanych z przechowywaniem sekretów w chmurze.

Możesz być zaskoczony słysząc, że przechowywanie sekretów w kodzie źródłowym jest jednym z przedstawionych rozwiązań (lub „architektury”). To dlatego, że obecnie nie ma idealnej architektury ani sposobu na zrobienie tego. W końcu twoje sekrety mogą być szyfrowane ... ale co chroni klucz szyfrujący? „Żółwie do samego końca”, powiedzieli.

Każdy rodzaj tajnego zarządzania ma swoje mocne i słabe strony, a prezentacja już to obejmuje. Zamiast tego postaram się omówić niektóre funkcje, których możesz szukać w tajnym rozwiązaniu (poświadczeniu):

  • Kontrola dostępu: czy możesz przyznać administratorom prawo do zapisu i dostęp do aplikacji? Czy możesz ograniczyć aplikacje, które potrafią czytać (aplikacja A ma dostęp tylko do tych tajemnic)?
  • Dzienniki kontroli: wymagane do wielu raportów zgodności i dobry sposób na stwierdzenie, czy coś jest nie tak
  • Bezpieczne przechowywanie tajemnic: jak rozwiązanie przechowuje tajemnice? Zaszyfrowana baza danych? Szyfrowane FS? Kto / co posiada klucz szyfrujący, jeśli taki istnieje? W jaki sposób używany jest ten klucz - raz przy starcie, a następnie bezpiecznie odrzucony?
  • Obracanie lub odnawianie kluczy / haseł: czy w przypadku naruszenia tajemnicy możesz je odwołać i wysłać zaktualizowany klucz do aplikacji? Czy aplikacje mogą / powinny łączyć tajne usługi zarządzania?
  • Kompatybilność: Niektóre z tych rozwiązań zapewniają ścisłą integrację z niektórymi językami lub strukturą. Niektóre oferują interfejs API REST. Czy jesteś tym zainteresowany?

Patrząc na te elementy, w jaki sposób są one dla Ciebie ważne i jak są wdrażane przez rozwiązanie, będziesz mógł wybrać jedną z tajnych usług zarządzania .

Alexandre
źródło
3

W przypadku środowiska opartego wyłącznie na EC2 najłatwiejszym rozwiązaniem jest użycie ról AWS IAM i zasad segmentu S3. Niektóre sformułowania tego wzorca obejmują także KMS do szyfrowania i DynamoDB zamiast S3 do przechowywania, ale nie znalazłem żadnego bardzo ważnego powodu, aby użyć jednego z nich. Sprawdź https://github.com/poise/citadel , jest on specjalnie skierowany do użytkowników Chef, ale podstawowy wzór działa na wszystko, po prostu być może będziesz musiał stworzyć własnego pomocnika do faktycznego pobierania z S3.

koderanger
źródło
1
W przyszłości odpowiada to na wcześniejszą i bardziej szczegółową wersję pytania.
coderanger
2
AWS oferuje teraz dedykowaną usługę przechowywania kluczy i wartości, w tym szyfrowania za pomocą KMS: aws.amazon.com/ec2/systems-manager/parameter-store .
bnzmnzhnz