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 Cloud & IT Cert Prep 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 Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep 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.0Zasady 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
- EgressStandardy 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=restrictedZarzą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 -20Bezpieczeń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 digestSzybkie 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.
Ucz się Cloud & IT Cert Prep dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 150
- Lekcje
- 600
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 Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep 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 Cloud & IT Cert Prep 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ąć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep 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
- Bezpieczeństwo kontenerów: utwardzanie obrazów i ochrona w czasie działania
- Bezpieczeństwo Kubernetes: RBAC, zasady sieciowe i bezpieczeństwo podów
- Bezpieczeństwo środowisk serverless i funkcji
- Skanowanie bezpieczeństwa infrastruktury jako kodu