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 Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Docker & DevOps Fundamentals 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.

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-secretZewnę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.ioSprawdź 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 Docker & DevOps Fundamentals, przejdź na CoddyKit PRO. Kurs Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals 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ąć Docker & DevOps Fundamentals?
Nie wymagamy żadnego doświadczenia. Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals?
Tak. Każda lekcja Docker & DevOps Fundamentals 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
- Skanowanie obrazów kontenerów pod kątem bezpieczeństwa
- Bezpieczeństwo kontenerów w czasie działania
- Zarządzanie sekretami i RBAC
- Zasady sieciowe i sieć zgodna z zasadą najmniejszych uprawnień