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, zobacz sekcję Zalecenia dotyczące kontenerów w tabeli referencyjnej zaleceń.

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

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łą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:

  1. Zaloguj się w witrynie Azure Portal.

  2. Przejdź do Microsoft Defender dla Chmury> Ustawienia środowiska.

  3. Wybierz odpowiednią subskrypcję.

  4. Na stronie Plany usługi Defender upewnij się, że kontenery są przełączane do wł.

  5. Wybierz Ustawienia.

    Screenshot showing the settings button in the Defender plan.

  6. Na stronie Ustawienia i monitorowania przełącz pozycję "Azure Policy for Kubernetes" (Usługa Azure Policy dla platformy Kubernetes) na wł.

    Screenshot showing the toggles used to enable or disable the extensions.

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 pośrednictwem strony Rekomendacje. 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 Kubernetesw określonych klastrach:

  1. Na stronie zaleceń wyszukaj odpowiednie zalecenie:

    • Azure-"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". Screenshot showing the Azure Kubernetes service clusters recommendation.

      Napiwek

      Zalecenie jest uwzględniane w różnych mechanizmach kontroli zabezpieczeń i nie ma znaczenia, który wybierzesz w następnym kroku.

  2. Z dowolnego z mechanizmów kontroli zabezpieczeń wybierz zalecenie, aby wyświetlić zasoby, na których można zainstalować dodatek.

  3. Wybierz odpowiedni klaster i wybierz pozycję Koryguj.

    Screenshot that shows how to select the cluster to remediate.

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.

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:

  1. Zaloguj się w witrynie Azure Portal.

  2. Przejdź do Microsoft Defender dla Chmury> Ustawienia środowiska.

  3. Wybierz odpowiednią subskrypcję.

  4. Z menu Defender dla Chmury wybierz pozycję Zasady zabezpieczeń.

  5. Wybierz odpowiednie przypisanie. Domyślnym przypisaniem jest ASC default.

  6. Otwórz kartę Parametry i zmodyfikuj wartości zgodnie z potrzebami.

    Screenshot showing where to modify the parameters for one of the recommendations in the Kubernetes data plane hardening protection bundle.

  7. Wybierz pozycję Przejrzyj i zapisz.

  8. Wybierz pozycję Zapisz.

Aby wymusić dowolne zalecenia:

  1. Otwórz stronę szczegółów zalecenia i wybierz pozycję Odmów:

    Screenshot showing the Deny option for Azure Policy parameter.

    Zostanie otwarte okienko, w których zostanie ustawiony zakres.

  2. Ustaw zakres i wybierz pozycję Zmień, aby odmówić.

Aby zobaczyć, które zalecenia mają zastosowanie do klastrów:

  1. Otwórz stronę spisu zasobów Defender dla Chmury i ustaw filtr typu zasobu na usługi Kubernetes.

  2. 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ę.

Screenshot showing where to view the affected pods for a Kubernetes recommendation.

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: