0Pricing
DevOps Bootcamp · Lekcja

Zarządzanie sekretami i RBAC

Poznaj zaawansowane strategie zarządzania poufnymi danymi i wdrażania kontroli dostępu opartej na rolach (RBAC) w środowiskach kontenerowych.

Zarządzanie sekretami i RBAC to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Zabezpieczanie środowiska kontenerów

Witamy! W tej lekcji omówimy kluczowe praktyki bezpieczeństwa aplikacji skonteneryzowanych: zarządzanie sekretami oraz kontrolę dostępu opartą na rolach (RBAC).

Koncepcje te mają kluczowe znaczenie dla ochrony poufnych danych i zapewnienia, że tylko upoważnione jednostki mogą wykonywać określone działania w środowiskach kontenerowych.

Zarządzanie sekretami i RBAC — ilustracja 1

Niebezpieczeństwo wpisywania sekretów na stałe

Umieszczanie poufnych informacji, takich jak klucze API, hasła do baz danych lub prywatne certyfikaty, bezpośrednio w kodzie aplikacji lub plikach Dockerfile stanowi poważne zagrożenie bezpieczeństwa.

  • Ujawnienie: Każdy, kto ma dostęp do repozytorium kodu lub zbudowanego obrazu, może je łatwo zobaczyć.
  • Brak kontroli: Zmiana sekretu wymaga ponownego zbudowania i wdrożenia całej aplikacji.
  • Problemy ze zgodnością: Narusza to wiele najlepszych praktyk bezpieczeństwa i wymogów prawnych.

Zmienne środowiskowe (z zachowaniem ostrożności)

Popularnym, choć nie zawsze bezpiecznym sposobem przekazywania sekretów jest użycie zmiennych środowiskowych. Docker umożliwia przekazywanie ich za pomocą flagi -e, a aplikacje mogą je odczytywać.

Zmienne środowiskowe można jednak łatwo sprawdzić (np. za pomocą docker inspect) i mogą one pozostać w historii powłoki lub w logach. W przypadku naprawdę poufnych danych istnieją lepsze rozwiązania.

Sekrety Docker w praktyce

Sekrety Docker umożliwiają bezpieczne przechowywanie i przekazywanie poufnych danych do kontenerów. Po dołączeniu sekretu do kontenera jest on montowany jako tymczasowy plik w /run/secrets/.

Najpierw należy utworzyć sekret (np. echo "my_secure_pass" | docker secret create app_secret -). Następnie aplikacja może go odczytać:

import os

def main():
    secret_path = "/run/secrets/app_secret"
    try:
        with open(secret_path, 'r') as f:
            secret_value = f.read().strip()
        print(f"Secret read: {secret_value}")
    except FileNotFoundError:
        print("Secret file not found. Make sure it's mounted.")
    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    main()

Przegląd sekretów Kubernetes

Podobnie jak Docker Secrets, Kubernetes ma własny obiekt o nazwie „Secrets”, służący do przechowywania i zarządzania poufnymi informacjami. Sekrety te można montować jako pliki w Podach lub udostępniać jako zmienne środowiskowe.

Ważne: Sekrety Kubernetes są domyślnie kodowane w formacie base64, a nie szyfrowane. Oznacza to, że można je łatwo zdekodować. Aby zapewnić rzeczywiste szyfrowanie danych w spoczynku, potrzebna jest dodatkowa konfiguracja (np. integracja z KMS).

Wdrażanie za pomocą sekretów K8s

Zobaczmy przykład definiowania sekretu Kubernetes, a następnie używania go w Podzie. Sekrety można definiować w formacie YAML lub tworzyć za pomocą poleceń kubectl.

Po utworzeniu Pod może odwołać się do sekretu, aby zamontować go jako wolumen lub wstrzyknąć jego wartości jako zmienne środowiskowe.

apiVersion: v1
kind: Pod
metadata:
  name: my-secret-pod
spec:
  containers:
  - name: my-app-container
    image: busybox
    command: ["sh", "-c", "echo Username: $(cat /etc/secrets/username) Password: $(cat /etc/secrets/password)"]
    volumeMounts:
    - name: secret-volume
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-k8s-secret

Zewnętrzne magazyny sekretów

W przypadku wysoce poufnych danych lub zarządzania sekretami w wielu klastrach i środowiskach zewnętrzne narzędzia do zarządzania sekretami oferują zaawansowane funkcje, takie jak:

  • Scentralizowane przechowywanie: Jedno wiarygodne źródło wszystkich sekretów.
  • Szyfrowanie danych w spoczynku i podczas przesyłania: Silniejsze gwarancje bezpieczeństwa.
  • Dynamiczne sekrety: Automatycznie generowane poświadczenia o krótkim czasie życia.
  • Audytowanie i kontrola dostępu: Szczegółowe uprawnienia i kompleksowe rejestrowanie zdarzeń.

Popularne opcje to HashiCorp Vault, AWS Secrets Manager i Azure Key Vault.

Czym jest RBAC?

Kontrola dostępu oparta na rolach (RBAC) to metoda ograniczania dostępu do systemu do upoważnionych użytkowników. Zamiast przypisywać uprawnienia bezpośrednio poszczególnym użytkownikom, grupuje się je w „role”, a następnie przypisuje użytkowników do tych ról.

W orkiestracji kontenerów RBAC zapewnia użytkownikom, aplikacjom i usługom wyłącznie niezbędne uprawnienia do interakcji z zasobami, takimi jak Pody, wdrożenia i sekrety.

Elementy składowe RBAC w K8s

RBAC w Kubernetes korzysta z kilku kluczowych typów zasobów:

  • Role: Definiuje uprawnienia w określonej przestrzeni nazw (np. „może wyświetlać pody” w przestrzeni nazw „dev”).
  • ClusterRole: Definiuje uprawnienia w całym klastrze (np. „może wyświetlać wszystkie pody” lub „może zarządzać węzłami”).
  • RoleBinding: Przyznaje uprawnienia zdefiniowane w obiekcie Role użytkownikowi, grupie lub kontu usługi w obrębie przestrzeni nazw.
  • ClusterRoleBinding: Przyznaje uprawnienia zdefiniowane w obiekcie ClusterRole użytkownikowi, grupie lub kontu usługi w całym klastrze.

Przykład RBAC: ograniczanie dostępu

Zobaczmy przykład przyznawania określonemu kontu usługi uprawnień wyłącznie do wyświetlania listy Podów i pobierania informacji o nich w konkretnej przestrzeni nazw. Wymusza to stosowanie zasady najmniejszych uprawnień.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: pod-viewer-sa # Name of the ServiceAccount to bind to
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Sprawdź swoją wiedzę

Poznali Państwo sposoby zabezpieczania poufnych danych i kontrolowania dostępu. Czas na szybkie sprawdzenie wiedzy!

Podsumowanie: zabezpieczanie aplikacji

Świetna praca! W tej lekcji poznali Państwo dwa kluczowe filary bezpieczeństwa kontenerów:

  • Zarządzanie sekretami: Ochrona poufnych danych za pomocą Docker Secrets i Kubernetes Secrets oraz zrozumienie ich zalet i ograniczeń.
  • Kontrola dostępu oparta na rolach (RBAC): Implementowanie szczegółowych uprawnień w Kubernetes w celu zapewnienia stosowania zasady najmniejszych uprawnień.

Opanowanie tych zagadnień pozwala tworzyć solidniejsze i bezpieczniejsze aplikacje skonteneryzowane!

Często zadawane pytania

Czy lekcja „Zarządzanie sekretami i RBAC” jest bezpłatna?

Tak — pełny tekst „Zarządzanie sekretami i RBAC” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Co nauczysz się w „Zarządzanie sekretami i RBAC”?

Poznaj zaawansowane strategie zarządzania poufnymi danymi i wdrażania kontroli dostępu opartej na rolach (RBAC) w środowiskach kontenerowych. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?

Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Zarządzanie sekretami i RBAC”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?

Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Skanowanie obrazów kontenerów pod kątem bezpieczeństwa
  2. Bezpieczeństwo kontenerów w czasie działania
  3. Zarządzanie sekretami i RBAC
  4. Zasady sieciowe i sieć zgodna z zasadą najmniejszych uprawnień
← Powrót do DevOps Bootcamp