Ochrona wzmacniania płaszczyzny danych Kubernetes
Na tej stronie opisano sposób używania zestawu zaleceń dotyczących zabezpieczeń Microsoft Defender dla Chmury przeznaczonych dla wzmacniania zabezpieczeń płaszczyzny danych Kubernetes.
Napiwek
Aby uzyskać listę zaleceń dotyczących zabezpieczeń, które mogą być wyświetlane dla klastrów i węzłów Kubernetes, zapoznaj się zzaleceniami dotyczącymi kontenerów.
Konfigurowanie ochrony obciążeń
Microsoft Defender dla Chmury zawiera pakiet zaleceń, które są dostępne po zainstalowaniu Usługa Azure Policy dla platformy Kubernetes.
Wymagania wstępne
- Dodaj reguły wymaganej nazwy FQDN/aplikacji dla zasad platformy Azure.
- (W przypadku klastrów innych niż AKS) Połącz istniejący klaster Kubernetes z usługą Azure Arc.
Włączanie wzmacniania zabezpieczeń płaszczyzny danych platformy Kubernetes
Usługę Azure Policy dla platformy Kubernetes można włączyć na jeden z dwóch sposobów:
- Włącz dla wszystkich bieżących i przyszłych klastrów przy użyciu ustawień planu/łącznika
- Wdrażanie usługi Azure Policy dla platformy Kubernetes w istniejących klastrach
Włączanie usługi Azure Policy dla platformy Kubernetes dla wszystkich bieżących i przyszłych klastrów przy użyciu ustawień planu/łącznika
Uwaga
Po włączeniu tego ustawienia w klastrze zostaną zainstalowane zasobniki usługi Azure Policy dla platformy Kubernetes. W ten sposób przydziela niewielką ilość procesora CPU i pamięci do użycia zasobników. Ta alokacja może osiągnąć maksymalną pojemność, ale nie ma wpływu na pozostałą część procesora CPU i pamięci zasobu.
Uwaga
Włączenie usługi AWS za pośrednictwem łącznika nie jest obsługiwane z powodu ograniczenia eks, które wymaga od administratora klastra dodania uprawnień dla nowej roli zarządzania dostępem i tożsamościami w samym klastrze.
Włączanie subskrypcji platformy Azure lub środowiska lokalnego
Po włączeniu usługi Microsoft Defender for Containers ustawienie "Azure Policy for Kubernetes" jest domyślnie włączone dla usługi Azure Kubernetes Service oraz dla klastrów Kubernetes z włączoną usługą Azure Arc w odpowiedniej subskrypcji. Jeśli wyłączysz ustawienie w początkowej konfiguracji, możesz je włączyć ręcznie.
Jeśli wyłączysz ustawienia "Azure Policy for Kubernetes" w ramach planu kontenerów, możesz wykonać poniższe kroki, aby włączyć je we wszystkich klastrach w ramach subskrypcji:
Zaloguj się w witrynie Azure Portal.
Przejdź do Microsoft Defender dla Chmury> Ustawienia środowiska.
Wybierz odpowiednią subskrypcję.
Na stronie Plany usługi Defender upewnij się, że kontenery są przełączane do wł.
Wybierz Ustawienia.
Na stronie Ustawienia i monitorowanie przełącz pozycję "Azure Policy for Kubernetes" na Wł.
Włączanie dla projektów GCP
Po włączeniu usługi Microsoft Defender for Containers w łączniku GCP ustawienie "Rozszerzenie usługi Azure Policy dla usługi Azure Arc" jest domyślnie włączone dla aparatu Google Kubernetes w odpowiednim projekcie. Jeśli wyłączysz ustawienie w początkowej konfiguracji, możesz je włączyć ręcznie.
Jeśli wyłączono ustawienia "Rozszerzenie usługi Azure Policy dla usługi Azure Arc" w łączniku GCP, możesz wykonać poniższe kroki, aby włączyć je w łączniku GCP.
Wdrażanie usługi Azure Policy dla platformy Kubernetes w istniejących klastrach
Możesz ręcznie skonfigurować usługę Azure Policy dla platformy Kubernetes w istniejących klastrach Kubernetes za pomocą strony Zalecenia. Po włączeniu zalecenia dotyczące wzmacniania zabezpieczeń staną się dostępne (niektóre zalecenia wymagają wykonania innej konfiguracji).
Uwaga
W przypadku platformy AWS nie można dołączać na dużą skalę przy użyciu łącznika, ale można go zainstalować we wszystkich istniejących klastrach lub w określonych klastrach przy użyciu rekomendacji Klastry Kubernetes z włączoną obsługą usługi Azure Arc, powinny mieć zainstalowane rozszerzenie usługi Azure Policy dla rozszerzenia Kubernetes.
Aby wdrożyć usługę Azure Policy dla platformy Kubernetes w określonych klastrach:
Na stronie zaleceń wyszukaj odpowiednie zalecenie:
Błękit-
"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
GCP -
"GKE clusters should have the Azure Policy extension"
.AWS i lokalnie -
"Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed"
.Napiwek
Zalecenie jest uwzględniane w różnych mechanizmach kontroli zabezpieczeń i nie ma znaczenia, który wybierzesz w następnym kroku.
Z dowolnego z mechanizmów kontroli zabezpieczeń wybierz zalecenie, aby wyświetlić zasoby, na których można zainstalować dodatek.
Wybierz odpowiedni klaster i wybierz pozycję Koryguj.
Wyświetlanie i konfigurowanie pakietu zaleceń
Około 30 minut po zakończeniu instalacji usługi Azure Policy dla platformy Kubernetes Defender dla Chmury pokazuje stan kondycji klastrów dla następujących zaleceń, z których każda znajduje się w odpowiedniej kontroli zabezpieczeń, jak pokazano poniżej:
Uwaga
Jeśli instalujesz usługę Azure Policy dla platformy Kubernetes po raz pierwszy, te zalecenia będą wyświetlane jako nowe dodatki na liście zaleceń.
Napiwek
Niektóre zalecenia mają parametry, które należy dostosować za pośrednictwem usługi Azure Policy, aby efektywnie ich używać. Aby na przykład skorzystać z zalecenia Obrazy kontenerów, należy wdrożyć tylko z zaufanych rejestrów, należy zdefiniować zaufane rejestry. Jeśli nie wprowadzisz niezbędnych parametrów dla zaleceń wymagających konfiguracji, obciążenia będą wyświetlane jako w złej kondycji.
Uwaga
Składniki firmy Microsoft, takie jak czujnik usługi Defender i agent usługi Azure Monitor (AMA), są domyślnie wdrażane w przestrzeni nazw kube-system. Ta konfiguracja zapewnia, że nie są one oznaczone jako niezgodne w zaleceniach dotyczących płaszczyzny danych. Jednak narzędzia innych firm zainstalowane w innej przestrzeni nazw mogą być oflagowane jako niezgodne. Aby wykluczyć dostawców innych firm z tych zaleceń, możesz dodać ich przestrzeń nazw do listy wykluczeń.
Nazwa zalecenia | Security Control | Wymagana konfiguracja |
---|---|---|
Należy wymusić limity procesora CPU i pamięci kontenera | Ochrona aplikacji przed atakiem DDoS | Tak |
Obrazy kontenerów powinny być wdrażane tylko z zaufanych rejestrów | Korygowanie luk w zabezpieczeniach | Tak |
Należy wymusić najmniej uprzywilejowane możliwości systemu Linux dla kontenerów | Zarządzanie dostępem i uprawnieniami | Tak |
Kontenery powinny używać tylko dozwolonych profilów AppArmor | Korygowanie konfiguracji zabezpieczeń | Tak |
Usługi powinny nasłuchiwać tylko na dozwolonych portach | Ograniczanie nieautoryzowanego dostępu do sieci | Tak |
Użycie sieci i portów hosta powinno być ograniczone | Ograniczanie nieautoryzowanego dostępu do sieci | Tak |
Użycie instalacji woluminów HostPath zasobnika powinno być ograniczone do znanej listy | Zarządzanie dostępem i uprawnieniami | Tak |
Należy unikać kontenera z eskalacją uprawnień | Zarządzanie dostępem i uprawnieniami | Nie. |
Należy unikać udostępniania poufnych przestrzeni nazw hostów przez kontenery | Zarządzanie dostępem i uprawnieniami | Nie. |
Niezmienny (tylko do odczytu) główny system plików powinien być wymuszany dla kontenerów | Zarządzanie dostępem i uprawnieniami | Nie. |
Klastry Kubernetes powinny być dostępne tylko za pośrednictwem protokołu HTTPS | Szyfrowanie danych podczas przesyłania | Nie. |
Klastry Kubernetes powinny wyłączyć automatyczne instalowanie poświadczeń interfejsu API | Zarządzanie dostępem i uprawnieniami | Nie. |
Klastry Kubernetes nie powinny używać domyślnej przestrzeni nazw | Implementowanie najlepszych rozwiązań dotyczących zabezpieczeń | Nie. |
Klastry Kubernetes nie powinny udzielać możliwości zabezpieczeń CAPSYSADMIN | Zarządzanie dostępem i uprawnieniami | Nie. |
Należy unikać kontenerów uprzywilejowanych | Zarządzanie dostępem i uprawnieniami | Nie. |
Należy unikać uruchamiania kontenerów jako użytkownika głównego | Zarządzanie dostępem i uprawnieniami | Nie. |
Aby uzyskać zalecenia z parametrami, które należy dostosować, należy ustawić parametry:
Aby ustawić parametry:
Zaloguj się w witrynie Azure Portal.
Przejdź do Microsoft Defender dla Chmury> Ustawienia środowiska.
Wybierz odpowiednią subskrypcję.
Z menu Defender dla Chmury wybierz pozycję Zasady zabezpieczeń.
Wybierz odpowiednie przypisanie. Domyślnym przypisaniem jest
ASC default
.Otwórz kartę Parametry i zmodyfikuj wartości zgodnie z potrzebami.
Wybierz pozycję Przejrzyj i zapisz.
Wybierz pozycję Zapisz.
Aby wymusić dowolne zalecenia:
Otwórz stronę szczegółów zalecenia i wybierz pozycję Odmów:
Zostanie otwarte okienko, w których zostanie ustawiony zakres.
Ustaw zakres i wybierz pozycję Zmień, aby odmówić.
Aby zobaczyć, które zalecenia mają zastosowanie do klastrów:
Otwórz stronę spisu zasobów Defender dla Chmury i ustaw filtr typu zasobu na usługi Kubernetes.
Wybierz klaster, aby zbadać i przejrzeć dostępne zalecenia.
Po wyświetleniu rekomendacji z zestawu ochrony obciążenia liczba zasobników, których dotyczy problem ("Składniki Kubernetes") jest wyświetlana wraz z klastrem. Aby uzyskać listę określonych zasobników, wybierz klaster, a następnie wybierz pozycję Podejmij akcję.
Aby przetestować wymuszanie, użyj dwóch poniższych wdrożeń platformy Kubernetes:
Jednym z nich jest wdrożenie w dobrej kondycji zgodne z pakietem zaleceń dotyczących ochrony obciążeń.
Druga dotyczy wdrożenia w złej kondycji, niezgodnego z dowolnymi zaleceniami.
Wdróż przykładowe pliki yaml w stanie rzeczywistym lub użyj ich jako odwołania do korygowania własnego obciążenia.
Przykładowy plik yaml wdrożenia w dobrej kondycji
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-healthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
annotations:
container.apparmor.security.beta.kubernetes.io/redis: runtime/default
spec:
containers:
- name: redis
image: <customer-registry>.azurecr.io/redis:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 250Mi
securityContext:
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
name: redis-healthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 80
targetPort: 80
Przykładowy plik yaml wdrożenia w złej kondycji
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-unhealthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 9001
hostPort: 9001
securityContext:
privileged: true
readOnlyRootFilesystem: false
allowPrivilegeEscalation: true
runAsUser: 0
capabilities:
add:
- NET_ADMIN
volumeMounts:
- mountPath: /test-pd
name: test-volume
readOnly: true
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /tmp
---
apiVersion: v1
kind: Service
metadata:
name: redis-unhealthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 6001
targetPort: 9001
Następne kroki
W tym artykule przedstawiono sposób konfigurowania wzmacniania zabezpieczeń płaszczyzny danych Platformy Kubernetes.
Aby zapoznać się z powiązanym materiałem, zobacz następujące strony: