Kubernetes Secrets Management

Kubernetes Secrets Management
Środowisko Kubernetes, podobnie jak wiele innych systemów obliczeniowych, wymaga wykorzystania poufnych danych. Sekrety odnoszą się do poufnych danych grupy (takich jak hasła, klucze SSH i tokeny bezpieczeństwa). Przyjrzymy się możliwościom Kubernetes i innych tajnych systemów zarządzania w tym poście oraz na sposobie tworzenia i zarządzania tajemnicami w środowisku Kubernetes.

Jakie są sekrety w Kubernetes?

Sekret to informacje prywatne, takie jak hasło, klucz lub token. Takie informacje mogą być również umieszczone na obrazie kontenera lub specyfikacji POD. Jeśli zastosujesz sekret, nie musisz zawierać tajnych danych w kodzie aplikacji.

Ponieważ tajemnice mogą być instalowane niezależnie od kapsułów, które z nich korzystają, może istnieć znacznie mniej zagrożenia dla tajemnicy (i jego informacji) odkryty. Kubernetes i aplikacje, które uruchomione dla twojego klastra również wykorzystują sekrety i techniki, aby podejmować większe środki ostrożności, w tym odejść z pisania poufnych informacji do nielotnej pamięci.

Rodzaje tajemnic

Kubernetes zapewnia wiele wbudowanych typów dla niektórych wspólnych scenariuszy. Osiągnięte walidacje i ograniczenia egzekwowane przez kubernetes różnią się między tymi kategoriami.

Nieprzezroczyste sekrety

Domyślny tajny typ jest używany, gdy nie ma tajnego pliku konfiguracyjnego. Podczas tworzenia sekretu przez Kubectl użyj ogólnego podkomenda, aby określić ten typ.

Sekrety tokenu konta serwisowego

Ten sekret przechowuje token z konto serwisowym. Musisz ustawić Kubernetes.IO/Service-Containt.Nazwa adnotacja do bieżącej nazwy konta serwisowego podczas korzystania z tego tajnego typu.

Sekrety konfiguracji Docker

Ten typ służy do przechowywania serializowanego /.plik DOCKERCFG. Jest to tradycyjny format konfiguracji wiersza poleceń Docker. Po pierwsze, sprawdź, czy pole tajnych danych ma.klawisz DockerCfg, a jego wartość jest treść A /.plik DOCKERCFG kodowany w formacie Base64 podczas korzystania z tego tajnego typu.

Podstawowy sekret uwierzytelniania

Ten rodzaj służy do przechowywania fundamentalnych poświadczeń uwierzytelniania. Podczas korzystania z tego tajnego typu jeden z dwóch kluczy (nazwa użytkownika i hasło) musi być obecny w polu danych Secret:

Wartości tych klawiszy są oba sznurki kodowane Base64. Możesz użyć StringData do tajnego generowania, jeśli chcesz dostarczyć jasną zawartość tekstu.

Tajemnice uwierzytelniania SSH

Służy do obsługi danych uwierzytelniania SSH. Pomieniowanie SSH należy zaakceptować jako parę wartości klucza SSH-privateyey z osobami z podmiotem danych (lub StringData), jednocześnie egzekwując ten tajny typ.

TLS Secrets

Kubernetes ma wbudowany tajny typ Kubernetes.IO/TLS, które mogą przechowywać certyfikat i odpowiedni klucz, który jest powszechnie używany do TLS. Informacje te są wykorzystywane z zakończeniem TLS. Ale można go dodatkowo zastosować z różnymi aktywami lub bez opóźnienia poprzez obciążenie pracą. Podczas nakładania tego rodzaju tajemnicy TLS.Klucz i TLS.Klawisze CRT powinny być dostarczane w obszarze danych (lub StringData) tajnej konfiguracji, mimo że serwer API już nie analizuje po prostu wartości dla każdego klucza.

Tajemnice tokena bootstrap

Ta forma tajemnicy można stworzyć, chodząc na bootstrap.Kubernetes.IO/token i wybór tajnego typu. Ten rodzaj tajnego ma na celu przechowywanie tokenów. Te tokeny są używane przede wszystkim podczas procedury ładowania węzłowego. Śledzi tokeny podpisu dla dobrze znanych map konfiguracyjnych.

Sekrety tokena bootstrap są często tworzone w przestrzeni nazw Systemu Kube i nazwano Bootstrap-Token-Id>, gdzie token-id> to sześciokaradarzowy ciąg reprezentujący identyfikator token.

Jak stworzyć sekret w Kubernetes?

Do przechowywania poświadczeń użytkownika można użyć sekretu. PODS Używają tych poświadczeń, aby uzyskać dostęp do bazy danych. Identyfikator (nazwa użytkownika) plus hasło, na przykład składaj ciąg połączenia z bazą danych. Możesz zapisać nazwę użytkownika./nazwa użytkownika.txt i hasło w./hasło.TXT na lokalnym komputerze.

$ echo -n 'Alex'> ./nazwa użytkownika.tekst
$ echo -n '01trfg02'> ./hasło.tekst

Poniższy kawałek kodu pokazuje, w jaki sposób możesz utworzyć sekret za pomocą polecenia Utwórz.

$ kubectl stwórz tajne ogólne tajne MBPS \
--z pliku =./nazwa użytkownika.tekst \
--z pliku =./hasło.tekst

Below, the secret (named secret-mbps) is successfully created below.

Jak wspomniano powyżej, parametr -n w poleceń zapewnia, że ​​na końcu zawartości nie ma dodatkowej nowej linii. Jest to znaczące, ponieważ dodatkowa nowa postać jest kodowana, gdy Kubectl odczytuje plik i przekształca go w ciąg Base64.

Jak edytować sekret?

Następujące polecenie służy do wprowadzania zmian w istniejącym sekret:

$ kubectl edytuj tajemnice Secret-MBPS

To otworzy edytor z domyślną konfiguracją. Pozwoli ci dostosować kodowane tajne wartości Base64 pola danych:

Jak sprawdzić, czy istnieje tajemnica?

Aby zweryfikować sekret, wpisz polecenie GET Secret.

$ kubectl otrzymuj tajemnice

Załączony zrzut ekranu pokazuje szczegóły określonego tajnego.

Jak dekodować sekret?

Aby zdekodować sekret, możesz użyć poniższego polecenia.

$ kubectl zdobądź tajne mbps -o jsonpath = '.dane'

Poniżej możesz zobaczyć wyjściowy zrzut ekranu.

Możesz teraz zdekodować dane hasła w następujący sposób:

$ echo 'mwyyzdflmmu2n2rm' | Base64 - -Decode

Oto wynik.

Możesz użyć polecenia (jak widać poniżej), jeśli chcesz nie przechowywać tajnej kodowanej wartości w historii powłoki:

$ kubectl zdobądź tajne mbps -o jsonpath = '.dane.hasło '| base64 -DeCode

To polecenie da te same wyniki, co poprzedni.

Jak usunąć sekret?

Aby usunąć sekret, możesz użyć polecenia Usuń i wspomnieć o dokładnej nazwie sekretu.

$ kubectl usuń tajne tajne MBPS

Tutaj możesz zauważyć, że określony sekret został pomyślnie usunięty.

Wniosek:

Sekrety to tożsamości cyfrowe, które pozwalają użytkownikom weryfikować ich tożsamości i uzyskiwać dostęp do uprzywilejowanych kont, aplikacji i usług poprzez uwierzytelnianie ich tożsamości. W tym artykule szczegółowo wspomnialiśmy o zarządzaniu tajemnic Kubernetes.