Protezione avanzata del piano dati Kubernetes

Questa pagina descrive come usare il set di raccomandazioni sulla sicurezza di Microsoft Defender for Cloud dedicate alla protezione avanzata del piano dati Kubernetes.

Suggerimento

Per un elenco delle raccomandazioni sulla sicurezza che potrebbero essere visualizzate per i cluster e i nodi Kubernetes, esaminare le raccomandazioni sui contenitori.

Configurare la protezione del carico di lavoro

Microsoft Defender for Cloud include un bundle di raccomandazioni disponibili dopo aver installato Azure Policy per Kubernetes.

Prerequisiti

Attivare la protezione avanzata del piano dati Kubernetes

È possibile abilitare il Azure Policy per Kubernetes in due modi:

Abilitare Azure Policy per Kubernetes per tutti i cluster correnti e futuri usando le impostazioni di piano/connettore

Note

Quando si abilita questa impostazione, nel cluster vengono installati i Azure Policy per i pod Kubernetes. In questo modo viene allocata una piccola quantità di CPU e memoria da usare per i pod. Questa allocazione potrebbe raggiungere la capacità massima, ma non influisce sul resto della CPU e della memoria nella risorsa.

Note

L'abilitazione per AWS tramite il connettore non è supportata a causa di una limitazione nel servizio Azure Kubernetes che richiede all'amministratore del cluster di aggiungere autorizzazioni per un nuovo ruolo IAM nel cluster stesso.

Abilitare per le sottoscrizioni Azure o in locale

Quando si abilita Microsoft Defender per contenitori, l'impostazione "Azure Policy per Kubernetes" è abilitata per impostazione predefinita per il Azure Kubernetes Service e per i cluster Kubernetes abilitati per Azure Arc nella sottoscrizione pertinente. Se si disabilita l'impostazione nella configurazione iniziale, è possibile abilitarla manualmente in seguito.

Se le impostazioni "Azure Policy per Kubernetes" sono state disabilitate nel piano dei contenitori, è possibile seguire la procedura seguente per abilitarla in tutti i cluster nella sottoscrizione:

  1. Accedere al portale Azure.

  2. Passare a Microsoft Defender for Cloud>Gestione>Impostazioni dell'ambiente.

  3. Selezionare la sottoscrizione pertinente.

  4. Nella pagina dei piani di Defender, assicurarsi che Containers sia impostato su Attivo.

  5. Selezionare Impostazioni.

    Screenshot che mostra il pulsante delle impostazioni nel Defender plan.

  6. In Impostazioni & Pagina Monitoraggio, attiva/disattiva la Azure Policy per Kubernetes a On.

    Screenshot che mostra gli interruttori usati per abilitare o disabilitare le estensioni.

Abilitare per i progetti GCP

Quando si abilita Microsoft Defender per contenitori in un connettore GCP, l'impostazione "estensione Azure Policy per Azure Arc" è abilitata per impostazione predefinita per il motore di Google Kubernetes nel progetto pertinente. Se si disabilita l'impostazione nella configurazione iniziale, è possibile abilitarla manualmente in seguito.

Se le impostazioni "estensione Azure Policy per Azure Arc" sono state disabilitate nel connettore GCP, è possibile seguire la procedura seguente per abilitarla nel connettore GCP.

Distribuire Azure Policy per Kubernetes in cluster esistenti

È possibile configurare manualmente il Azure Policy per Kubernetes nei cluster Kubernetes esistenti tramite la pagina Raccomandazioni. Dopo l'abilitazione, le raccomandazioni di protezione avanzata diventano disponibili (alcune delle raccomandazioni richiedono un'altra configurazione per funzionare).

Note

Per AWS, l'onboarding su larga scala con il connettore non è supportato. È tuttavia possibile installare Azure Policy per Kubernetes in tutti i cluster esistenti o in cluster specifici usando la raccomandazione Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed.

Per distribuire il Azure Policy per Kubernetes nei cluster specificati:

  1. Accedere al portale Azure.

  2. Passare a Microsoft Defender for Cloud>General>Recommendations.

  3. Cercare la raccomandazione pertinente:

    • 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 e On-premise - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed".

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

  4. Selezionare una raccomandazione trovata.

  5. Selezionare Correggi.

    Screenshot di una raccomandazione con il pulsante Correggi evidenziato.

  6. Ripetere per ogni raccomandazione aggiuntiva.

Visualizzare e configurare il bundle di raccomandazioni

Circa 30 minuti dopo il completamento dell'installazione di Azure Policy per Kubernetes, Defender for Cloud mostra lo stato di salute dei cluster per le seguenti raccomandazioni, ciascuno nel relativo controllo di sicurezza, come illustrato di seguito:

Note

Se si installa la Azure Policy per Kubernetes per la prima volta, queste raccomandazioni vengono visualizzate come nuove aggiunte nell'elenco delle raccomandazioni.

Suggerimento

Alcuni consigli includono parametri che devono essere personalizzati tramite Azure Policy per usarli in modo efficace. Ad esempio, per trarre vantaggio dalla raccomandazione che le immagini di contenitori dovrebbero essere distribuite solo da registri attendibili, è necessario definire i registri attendibili. Se non si immettono i parametri necessari per le raccomandazioni che richiedono la configurazione, i carichi di lavoro verranno visualizzati come non integri.

Note

Componenti Microsoft come il sensore Defender vengono distribuiti nello spazio dei nomi Kube-system per impostazione predefinita. Questa configurazione garantisce che non siano contrassegnati come non conformi nelle raccomandazioni del data plane. Tuttavia, gli strumenti del fornitore di terze parti installati in uno spazio dei nomi diverso potrebbero essere contrassegnati come non conformi. Per escludere fornitori di terze parti da queste raccomandazioni, è possibile aggiungere lo spazio dei nomi all'elenco di esclusione.

Nome della raccomandazione Controllo di sicurezza Configurazione necessaria
È consigliabile applicare limiti per la CPU e la memoria dei contenitori Proteggi le applicazioni da attacchi DDoS
È consigliabile distribuire le immagini del contenitori solo da registri attendibili Correggi le vulnerabilità
Per i contenitori devono essere imposte le funzionalità Linux con privilegi minimi Gestire l'accesso e le autorizzazioni
I contenitori devono usare solo i profili AppArmor consentiti Correggere le configurazioni di sicurezza
I servizi devono essere in ascolto solo sulle porte consentite Limita l'accesso non autorizzato alla rete
L'utilizzo della rete host e delle porte deve essere limitato Limita l'accesso non autorizzato alla rete
L'utilizzo dei montaggi dei volumi HostPath dei pod deve essere limitato a un elenco noto Gestire l'accesso e le autorizzazioni
È 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 Crittografa i dati in transito 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 sicurezza CAPSYSADMIN Gestire l'accesso e le autorizzazioni NO
I contenitori con privilegi devono essere evitati Gestire l'accesso e le autorizzazioni NO
È consigliabile evitare l'esecuzione di contenitori come utente radice Gestire l'accesso e le autorizzazioni NO

Per consigli con parametri che devono essere personalizzati, è necessario impostare i parametri:

Per impostare i parametri:

  1. Accedere al portale Azure.

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

  3. Selezionare la sottoscrizione pertinente.

  4. Dal menu di spostamento selezionare Criteri di sicurezza.

    Screenshot della pagina Criteri di sicurezza.

  5. Nella scheda Standard cercare lo standard di sicurezza appropriato.

  6. Selezionare il menu a 3 puntini di sicurezza standard e selezionare Gestisci.

    Screenshot della selezione di Gestisci dal menu a tre punti del suggerimento.

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

  8. Modificare i valori in base alle esigenze.

    Screenshot del pannello dei parametri.

  9. Selezionare Salva.

Per applicare una delle raccomandazioni:

  1. Aprire la pagina dei dettagli della raccomandazione e selezionare Nega:

    Screenshot che mostra l'opzione Deny per Azure Policy parameter.

    Verrà aperto il riquadro per impostare l'ambito.

  2. Impostare l'ambito e selezionare Cambia in Nega.

Per vedere quali raccomandazioni si applicano ai cluster:

  1. Accedere al portale Azure.

  2. Passare a Defender for Cloud>Inventory.

  3. Impostare il filtro del tipo di risorsa sui servizi Kubernetes e selezionare Applica.

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

  4. Selezionare un cluster da analizzare.

  5. Esamina le raccomandazioni disponibili. Quando si visualizza una raccomandazione dal set di protezione del carico di lavoro, il numero di pod interessati ("componenti Kubernetes") viene elencato insieme al cluster.

  6. Facoltativo: per un elenco dei pod specifici, selezionare il suggerimento.

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

  7. e quindi selezionare Esegui azione.

Screenshot che mostra dove visualizzare i pod interessati per una raccomandazione di Kubernetes.

Per testare l'imposizione, usare le due distribuzioni Kubernetes seguenti:

  • Una è per una distribuzione integra, conforme al bundle di raccomandazioni di protezione del carico di lavoro.

  • L'altra riguarda una distribuzione non integra, non conforme a nessuna delle raccomandazioni.

Distribuire i file .yaml di esempio così come sono o usarli come riferimento per correggere il proprio carico di lavoro.

File con estensione .yaml di esempio di distribuzione integro

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

File .yaml di esempio di distribuzione non integro

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

Passaggi successivi

In questo articolo si è appreso come configurare la protezione avanzata del piano dati Kubernetes.

Per i materiali correlati, vedere le pagine seguenti: