Configurare il rafforzamento del piano dati di Kubernetes in Defender per il cloud

La protezione avanzata del piano dati Kubernetes consente di applicare configurazioni sicure per i carichi di lavoro in esecuzione nel cluster, ad esempio la limitazione dei contenitori con privilegi, l'applicazione dei limiti delle risorse e la limitazione dell'accesso alla rete.

In Microsoft Defender per il cloud, il data plane hardening viene implementato utilizzando Criteri di Azure for Kubernetes per valutare e far rispettare queste configurazioni. Criteri di Azure viene distribuito come parte di Defender per contenitori quando è abilitato il provisioning automatico.

Se Criteri di Azure for Kubernetes è disattivato nelle impostazioni del piano di Defender for Containers, è possibile distribuirlo correggendo la raccomandazione rilevante. Puoi anche distribuire manualmente Criteri di Azure usando interfaccia della riga di comando di Azure per distribuire componenti Defender per Containers o Helm per distribuire componenti Defender for Containers se hai disabilitato il provisioning automatico durante l'abilitazione o escluso cluster specifici dal provisioning automatico.

Dopo aver distribuito Criteri di Azure per Kubernetes, Defender per il cloud genera raccomandazioni per la protezione avanzata del piano dati in base alla configurazione del cluster. Questa pagina illustra come esaminare questi consigli, configurare i parametri dei criteri e applicarli ai cluster.

Prerequisiti

Per iniziare, assicurarsi che:

Abilitare Criteri di Azure per Kubernetes correggendo le raccomandazioni

Se Criteri di Azure for Kubernetes non è implementato o disattivato nelle impostazioni del piano di Defender for Containers, puoi installarlo correggendo la raccomandazione che corrisponde al tipo di cluster in Defender per il cloud.

  1. Accedi al portale di Azure.

  2. Passare a Microsoft Defender per il cloud>Recommendations.

  3. Cercare la raccomandazione pertinente:

    • Azure: servizio Azure Kubernetes i cluster devono avere installato il componente aggiuntivo Criteri di Azure per Kubernetes
    • GCP: i cluster GKE devono avere l'estensione Criteri di Azure installata
    • AWS/Arc-enabled Kubernetes: I cluster Kubernetes Arc abilitati di Azure devono avere l'estensione Criteri di Azure installata

    Screenshot che mostra le raccomandazioni dei cluster del servizio Azure Kubernetes.

  4. Seleziona una raccomandazione.

  5. Nella scheda Take action (Azioni ) selezionare Fix (Correggi).

    Screenshot di una raccomandazione con il pulsante Correggi evidenziato.

  6. Selezionare Correggi per correggere le risorse selezionate.

  7. Ripetere per ogni raccomandazione.

Raccomandazioni per l'irrobustimento del piano dati

Dopo aver distribuito Criteri di Azure per Kubernetes, Defender per il cloud valuta la configurazione del cluster e genera raccomandazioni per la protezione avanzata del piano dati. Questo processo può richiedere fino a 30 minuti.

Note

I componenti di Microsoft, come il sensore Defender, vengono distribuiti nello spazio dei nomi kube-system per impostazione predefinita e non sono contrassegnati come non conformi. I componenti di terze parti installati in altri spazi dei nomi potrebbero essere contrassegnati. Per escludere specifici namespace, configurare le esclusioni dei criteri di Azure.

Nella tabella seguente sono elencate le raccomandazioni comuni per la protezione avanzata del piano dati:

Nome raccomandazione Controllo di sicurezza Configurazione necessaria
È consigliabile applicare limiti per la CPU e la memoria dei contenitori Proteggi le applicazioni da attacchi DDoS Yes
Le immagini del contenitore devono essere distribuite solo da registri attendibili Correggere le vulnerabilità Yes
Per i contenitori devono essere imposte le funzionalità Linux con privilegi minimi Gestire l'accesso e le autorizzazioni Yes
I contenitori devono usare solo i profili AppArmor consentiti Correggere le configurazioni di sicurezza Yes
I servizi devono essere in ascolto solo sulle porte consentite Limita l'accesso non autorizzato alla rete Yes
L'utilizzo della rete host e delle porte deve essere limitato Limita l'accesso non autorizzato alla rete Yes
L'utilizzo dei montaggi dei volumi HostPath dei pod deve essere limitato a un elenco noto Gestire l'accesso e le autorizzazioni Yes
È consigliabile evitare i contenitori con escalation dei privilegi Gestire l'accesso e le autorizzazioni No
I contenitori che condividono spazi dei nomi host sensibili devono essere evitati Gestire l'accesso e le autorizzazioni No
Per i contenitori deve essere imposto il file system radice non modificabile (di sola lettura) Gestire l'accesso e le autorizzazioni No
I cluster Kubernetes devono essere accessibili solo tramite HTTPS Crittografare i dati in movimento No
Nei cluster Kubernetes il montaggio automatico delle credenziali API deve essere disabilitato Gestire l'accesso e le autorizzazioni No
I cluster Kubernetes non devono usare lo spazio dei nomi predefinito Implementa le procedure consigliate per la sicurezza No
I cluster Kubernetes non devono concedere funzionalità di CAP_SYS_ADMIN Gestire l'accesso e le autorizzazioni No
I contenitori con privilegi devono essere evitati Gestire l'accesso e le autorizzazioni No
L'esecuzione di container come utente root andrebbe evitata Gestire l'accesso e le autorizzazioni No

Visualizzare le raccomandazioni per un cluster

Per visualizzare le raccomandazioni di protezione avanzata del piano dati per un cluster specifico:

  1. Accedi al portale di Azure.

  2. Passare a Defender per il cloud>Inventory.

  3. Impostare il filtro del tipo di risorsa sul servizio Kubernetes e selezionare Applica.

    Screenshot dell'uso del filtro del tipo di risorsa per selezionare il servizio kubernetes.

  4. Selezionare il cluster pertinente.

  5. Esaminare le raccomandazioni disponibili. Le raccomandazioni per la protezione avanzata del piano dati mostrano il numero di componenti Kubernetes interessati.

  6. Selezionare una raccomandazione per visualizzare le risorse interessate.

    Screenshot della selezione di una raccomandazione nella pagina dello stato di integrità delle risorse.

  7. Selezionare la scheda Esegui azione per esaminare le opzioni di correzione.

    Screenshot della scheda Esegui azione, usata per visualizzare i passaggi di correzione per una raccomandazione.

Configurare i parametri dei criteri

Alcune raccomandazioni includono parametri che limitano le risorse Kubernetes valutate dalla Criteri di Azure sottostante. Ad esempio, la policy per il file system root Immutable (solo lettura) dovrebbe essere applicata per i contenitori che include i excludedContainersparametri, excludedImages, e excludedNamespaces . Le esclusioni dei container corrispondono ai nomi dei container. Le esclusioni di immagini supportano l'abbinamento dei prefissi quando il valore termina in *, come myregistry.azurecr.io/istio:*. Usa un nome di immagine completamente qualificato per evitare di escludere involontariamente un'immagine da un registro non affidabile.

Altre raccomandazioni richiedono che la configurazione dei parametri sia efficace. Ad esempio, le immagini dei container devono essere distribuite solo da registri attendibili per definire un elenco di registri attendibili.

Se i parametri obbligatori non sono configurati, le risorse vengono visualizzate come non integre.

Per configurare i parametri dei criteri:

  1. Accedi al portale di Azure.

  2. Passare a Microsoft Defender per il cloud>Impostazioni dell'ambiente.

  3. Selezionare la sottoscrizione pertinente.

  4. Selezionare Criteri di sicurezza.

    Screenshot della pagina Criteri di sicurezza.

  5. Nella scheda Standard selezionare lo standard di sicurezza pertinente.

  6. Selezionare il menu a 3 puntini di assegnazione dei criteri pertinente e selezionare Gestisci effetto e parametri.

    Screenshot della selezione del menu a 3 punti e quindi della selezione di Gestisci effetto e parametri.

  7. Aggiornare i valori dei parametri necessari.

    Screenshot del pannello dei parametri.

  8. Seleziona Salva.

Applicare i criteri di protezione avanzata del piano dati

Per impostazione predefinita, i criteri valutano le risorse in modalità di controllo. Per applicare un criterio, impostarne l'effetto su Nega.

Per applicare una raccomandazione:

  1. Accedi al portale di Azure.

  2. Passare a Microsoft Defender per il cloud>Recommendations.

  3. Cercare e selezionare la raccomandazione di rafforzamento del piano dati pertinente.

  4. Nella scheda Take action (Azioni ) selezionare Deny (Nega).

    Screenshot che mostra l'opzione Deny per Criteri di Azure parameter.

  5. Impostare l'ambito.

  6. Selezionare Cambia per negare.

Testare l'applicazione dei criteri

È possibile convalidare i criteri di protezione avanzata del piano dati distribuendo carichi di lavoro di test.

  • Una distribuzione conforme che soddisfa i requisiti di protezione avanzata del piano dati
  • Una distribuzione non conforme che viola più criteri

Distribuire i file YAML di esempio seguenti per verificare che i carichi di lavoro conformi vengano distribuiti correttamente e che i carichi di lavoro non conformi siano contrassegnati o bloccati, a seconda delle impostazioni di imposizione dei criteri.

Esempio di distribuzione conforme

Il successivo deployment utilizza un registro container affidabile, applica i limiti di CPU e memoria e applica un contesto di sicurezza restrittivo che disabilita l'escalation dei privilegi ed esegue come utente non root.

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

Esempio di distribuzione non conforme

Il successivo deployment viola intenzionalmente molteplici policy di rafforzamento dei piani dati, inclusa l'esecuzione di un container privilegiato come root, l'abilitazione della rete host e degli spazi di nomi condivisi, e il montaggio di un volume di percorso host.

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

Passo successivo