0Pricing
Security+ Academy · Lekcja

Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów

Konfiguruj role RBAC w Kubernetes, wymuszaj zasady sieciowe ograniczające ruch między podami i stosuj standardy bezpieczeństwa podów, aby ograniczyć eskalację uprawnień.

Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów to bezpłatna lekcja Security+ Academy na CoddyKit. To lekcja 2 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 Security+ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Security+ Academy zawiera 4 lekcji w sumie.

Przegląd powierzchni ataku Kubernetes

Kubernetes orkiestruje obciążenia uruchamiane w kontenerach na dużą skalę, ale jego złożoność tworzy rozległą powierzchnię ataku. Do kluczowych komponentów, które należy zabezpieczyć, należą: API Server (centralny element płaszczyzny sterowania — jego przejęcie daje kontrolę nad całym klastrem), etcd (baza danych stanu klastra — przechowuje sekrety w formacie base64, dlatego muszą być szyfrowane w spoczynku), kubelet (agent węzła — nieuwierzytelnione API kubeleta umożliwia dowolne uruchamianie podów), container runtime (Docker/containerd) oraz infrastruktura sieciowa łącząca wszystkie pody. Osoby przygotowujące się do egzaminu Security+ powinny rozumieć, że błędne konfiguracje Kubernetes należą do najczęściej wykrywanych problemów bezpieczeństwa w chmurze.

RBAC: kontrola dostępu oparta na rolach w Kubernetes

RBAC (Role-Based Access Control) w Kubernetes określa, którzy użytkownicy, konta usług i procesy mogą wykonywać określone działania na określonych zasobach API. Model obejmuje cztery obiekty: Role (uprawnienia w zakresie przestrzeni nazw), ClusterRole (uprawnienia obowiązujące w całym klastrze), RoleBinding (przyznaje rolę podmiotowi w obrębie przestrzeni nazw) oraz ClusterRoleBinding (przyznaje ClusterRole podmiotowi w całym klastrze). Każde polecenie kubectl jest tłumaczone na wywołanie API, które jest sprawdzane względem reguł RBAC. Jeśli RBAC nie jest skonfigurowany, każdy uwierzytelniony użytkownik (lub konto usługi) może mieć uprawnienia administracyjne.

# Create a role allowing only pod reads in 'default' namespace
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: default
rules:
- apiGroups: [''] 
  resources: ['pods']
  verbs: ['get', 'list', 'watch']

Konta usług i zasada najmniejszych uprawnień

Każdy pod w Kubernetes działa w kontekście konta usługi — tożsamości używanej do uwierzytelniania względem API. Domyślnie pody korzystają z konta usługi default w swojej przestrzeni nazw, które może mieć szerokie uprawnienia. Zasada najmniejszych uprawnień wymaga tworzenia dedykowanych kont usług dla każdej aplikacji i przyznawania im wyłącznie uprawnień, których potrzebują. Ponadto ustawienie automountServiceAccountToken: false dla podów, które nie wymagają dostępu do API, zapobiega zamontowaniu tokenu konta usługi w systemie plików poda, gdzie przejęta aplikacja mogłaby użyć go do wykonywania wywołań API.

# Pod spec: disable service account token auto-mount
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  serviceAccountName: myapp-sa
  automountServiceAccountToken: false
  containers:
  - name: myapp
    image: myapp:v1.0

Zasady sieciowe: domyślna odmowa

Domyślnie w Kubernetes wszystkie pody mogą komunikować się ze wszystkimi innymi podami w dowolnej przestrzeni nazw. Przejęty pod może natychmiast próbować uzyskać dostęp do baz danych, wewnętrznych interfejsów API i innych mikrousług. Zasoby Kubernetes NetworkPolicy definiują reguły ograniczające ruch między podami na podstawie etykiet, przestrzeni nazw i portów. Zalecanym podejściem jest zastosowanie zasady sieciowej „domyślnie odmów wszystko” w każdej przestrzeni nazw, a następnie dodanie jawnych reguł zezwalających na wymagane ścieżki komunikacji. Należy pamiętać, że NetworkPolicy wymaga wtyczki CNI, która ją obsługuje (Calico, Cilium, Weave) — standardowy Kubernetes ignoruje NetworkPolicy bez zgodnej wtyczki CNI.

# Default deny all ingress and egress in a namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

Standardy bezpieczeństwa podów: zastąpienie PSP

Pod Security Standards (PSS), wprowadzone w Kubernetes 1.23 i uznane za stabilne w wersji 1.25, zastępują wycofaną funkcję Pod Security Policy (PSP) trzema wbudowanymi profilami egzekwowanymi na poziomie przestrzeni nazw: Privileged (bez ograniczeń, przeznaczony dla komponentów systemowych), Baseline (zapobiega znanym eskalacjom uprawnień, takim jak kontenery uprzywilejowane i dostęp do sieci hosta) oraz Restricted (zaostrzony, wymaga użytkowników innych niż root, usuwa wszystkie capabilities i wymusza używanie głównych systemów plików tylko do odczytu). Przestrzenie nazw oznacza się etykietami w celu wymuszenia poziomu zasad, a pody, które je naruszają, są odrzucane podczas admission.

# Label namespace to enforce 'restricted' pod security
kubectl label namespace production \
  pod-security.kubernetes.io/enforce=restricted \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/warn=restricted

Zarządzanie sekretami w Kubernetes

Secrets w Kubernetes przechowują poufne dane, takie jak hasła, tokeny i certyfikaty TLS. Domyślnie sekrety są przechowywane w etcd jako wartości zakodowane w base64 — nie są szyfrowane. Każdy, kto może odczytać etcd lub ma odpowiednie uprawnienia RBAC, może je łatwo zdekodować. Najlepsze praktyki obejmują: włączenie szyfrowania danych w spoczynku w etcd za pomocą AES-GCM z kluczem przechowywanym w KMS (AWS KMS, GCP KMS), integrację z zewnętrznym menedżerem sekretów, takim jak HashiCorp Vault lub AWS Secrets Manager, za pośrednictwem Secrets Store CSI Driver, oraz ograniczenie dostępu do Secretów za pomocą RBAC, tak aby mogły je odczytywać wyłącznie konta usług, które ich potrzebują.

# Enable etcd encryption at rest (encryption configuration)
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
  - secrets
  providers:
  - aescbc:
      keys:
      - name: key1
        secret: <base64-encoded-32-byte-key>

Kontrolery admission: bramki bezpieczeństwa

Kontrolery admission to wtyczki serwera API Kubernetes, które przechwytują żądania API po uwierzytelnieniu i autoryzacji, ale przed zapisaniem obiektu. Dzięki temu mogą weryfikować, modyfikować lub odrzucać żądania. Do kontrolerów admission związanych z bezpieczeństwem należą: PodSecurity (wymusza standardy bezpieczeństwa podów), ImagePolicyWebhook (umożliwia zewnętrzną weryfikację podpisów obrazów), AlwaysPullImages (wymusza każdorazowe pobieranie obrazów, aby uniemożliwić użycie lokalnie zbuforowanych złośliwych obrazów) oraz OPA/Gatekeeper (Open Policy Agent — najbardziej elastyczne rozwiązanie, umożliwiające definiowanie niestandardowych zasad w języku Rego w celu egzekwowania dowolnych reguł bezpieczeństwa organizacji).

Wzmacnianie zabezpieczeń komponentów klastra

Wzmacnianie zabezpieczeń komponentów płaszczyzny sterowania Kubernetes ma kluczowe znaczenie: serwer API powinien używać --anonymous-auth=false w celu wyłączenia nieuwierzytelnionego dostępu, mieć skonfigurowaną opcję --audit-log-path do rejestrowania całej aktywności API oraz używać TLS dla wszystkich połączeń. kubelet powinien mieć ustawioną opcję --authorization-mode=Webhook (a nie AlwaysAllow) oraz wyłączone uwierzytelnianie anonimowe. etcd powinien używać szyfrowania TLS komunikacji między węzłami i z klientami, mieć ograniczony dostęp sieciowy (dostęp powinien mieć wyłącznie serwer API) oraz szyfrować dane w spoczynku. CIS Kubernetes Benchmark zawiera kompleksową listę kontrolną wszystkich ustawień komponentów.

# Check kubelet configuration for security issues
kubectl get --raw /api/v1/nodes/nodename/proxy/configz | jq '.kubeletconfig | {anonymousAuth: .authentication.anonymous.enabled, authorization: .authorization.mode}'

Izolacja przestrzeni nazw i środowiska wielodostępne

Przestrzenie nazw Kubernetes zapewniają logiczne rozdzielenie zasobów, ale same w sobie nie stanowią silnej granicy bezpieczeństwa — zapewniają przede wszystkim izolację organizacyjną. Rzeczywista izolacja środowiska wielodostępnego (np. obciążeń należących do różnych klientów) wymaga dodatkowych mechanizmów: zasad sieciowych blokujących ruch między przestrzeniami nazw, limitów zasobów zapobiegających atakom DoS powodowanym przez nadmierne zużycie zasobów przez jednego użytkownika, oddzielnych pul węzłów dla silnie izolowanych dzierżawców lub dedykowanego klastra dla każdego dzierżawcy. Wiele organizacji korzysta z Hierarchical Namespaces lub komercyjnych rozwiązań, takich jak vCluster, aby zapewnić silniejszą wielodostępność w ramach jednego klastra.

Rejestrowanie audytowe i monitorowanie w czasie wykonywania

Rejestrowanie audytowe Kubernetes rejestruje każde żądanie API: kto je wysłał, skąd pochodziło, jakie działanie zażądano wykonać i jakiego zasobu dotyczyło. Dzienniki audytowe są niezbędne do prowadzenia dochodzeń kryminalistycznych po incydencie bezpieczeństwa oraz wykrywania anomalnego zachowania, takiego jak nietypowe powiązania ról, dostęp do sekretów czy polecenia exec wykonywane w produkcyjnych podach. Dzienniki audytowe należy przesyłać strumieniowo do scentralizowanego systemu SIEM. Falco zapewnia monitorowanie zachowania kontenerów w czasie wykonywania, natomiast zarządzane przez dostawców chmurowe usługi Kubernetes (EKS, GKE, AKS) zapewniają natywną integrację dzienników audytowych z odpowiednimi platformami rejestrowania.

# Check recent kubectl exec events in audit log
grep '"verb":"create".*"resource":"pods".*"subresource":"exec"' /var/log/kubernetes/audit.log | tail -20

Bezpieczeństwo łańcucha dostaw: proweniencja obrazów

Bezpieczeństwo łańcucha dostaw w Kubernetes zapewnia, że do środowiska produkcyjnego trafiają wyłącznie zaufane i zweryfikowane obrazy. Zalecenia CNCF dotyczące bezpieczeństwa łańcucha dostaw obejmują: weryfikowanie podpisów obrazów za pomocą Cosign przed wdrożeniem (wymuszane przez kontrolery admission), generowanie i weryfikowanie SBOM (Software Bills of Materials) dla wszystkich obrazów kontenerów w celu śledzenia pochodzenia komponentów, przypinanie obrazów do digestów (myimage@sha256:abc123) zamiast zmiennych tagów oraz skanowanie wszystkich zewnętrznych chartów Helm pod kątem błędnych konfiguracji i podatności przed wdrożeniem.

# Pin image to digest for immutability
# Instead of:
image: nginx:latest
# Use:
image: nginx@sha256:a3e2a7a3d7f94e...  # immutable digest

Szybkie sprawdzenie

Sprawdź swoją znajomość zagadnień CompTIA Security+ (SY0-701) omówionych w tej lekcji.

Podsumowanie lekcji

W tej lekcji poznali Państwo następujące zagadnienia: Kubernetes RBAC kontroluje dostęp do API za pomocą obiektów Role, ClusterRole i Binding — w przypadku kont usług zawsze należy stosować zasadę najmniejszych uprawnień; konfiguracje NetworkPolicy z domyślną odmową zapobiegają przemieszczaniu się zagrożeń między podami i przestrzeniami nazw; a Pod Security Standards wymuszają wzmacnianie zabezpieczeń kontenerów na poziomie przestrzeni nazw, blokując uprzywilejowane kontenery, dostęp do sieci hosta i uruchamianie jako root. Następnie omówimy bezpieczeństwo serverless oraz powierzchnie ataku na poziomie funkcji.

Często zadawane pytania

Czy lekcja „Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów” jest bezpłatna?

Tak — pełny tekst „Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów” 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 Security+ Academy, przejdź na CoddyKit PRO. Kurs Security+ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów”?

Konfiguruj role RBAC w Kubernetes, wymuszaj zasady sieciowe ograniczające ruch między podami i stosuj standardy bezpieczeństwa podów, aby ograniczyć eskalację uprawnień. Ćwiczysz Security+ Academy 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ąć Security+ Academy?

Nie wymagamy żadnego doświadczenia. Security+ Academy 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 2 z 4.

Ile czasu zajmuje lekcja „Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów”?

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 Security+ Academy?

Tak. Każda lekcja Security+ Academy 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. Bezpieczeństwo kontenerów: utwardzanie obrazów i ochrona w czasie działania
  2. Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów
  3. Bezpieczeństwo środowisk serverless i funkcji
  4. Skanowanie bezpieczeństwa infrastruktury jako kodu
← Powrót do Security+ Academy