Condividi tramite


Protezione avanzata del piano dati Kubernetes

Questa pagina descrive come usare il set di raccomandazioni sulla sicurezza di Microsoft Defender per il 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, prendere in esame le raccomandazioni sui contenitori.

Configurare la protezione del carico di lavoro

Microsoft Defender per il cloud d include un bundle di raccomandazioni disponibili dopo aver installato i Criteri di Azure per Kubernetes.

Prerequisiti

Attivare la protezione avanzata del piano dati Kubernetes

È possibile abilitare Criteri di Azure per Kubernetes in due modi:

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

Nota

Quando si abilita questa impostazione, nel cluster, vengono installati i Criteri di Azure 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.

Nota

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

Abilitare per le sottoscrizioni di Azure o in locale

Quando si abilita Microsoft Defender per contenitori, l'impostazione "Criteri di Azure per Kubernetes" è abilitata per impostazione predefinita per il servizio Azure Kubernetes 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 di Criteri di Azure per Kubernetes sono state disabilitate nel piano dei contenitori, è possibile seguire questa procedura per abilitarle in tutti i cluster nella sottoscrizione:

  1. Accedere al portale di Azure.

  2. Andare alle impostazioni dell'ambiente Microsoft Defender per il cloud>.

  3. Selezionare la sottoscrizione pertinente.

  4. Nella pagina Piani di Defender verificare che i contenitori siano impostati su On.

  5. Seleziona Impostazioni.

    Screenshot che mostra il pulsante delle impostazioni nel piano Defender.

  6. Nella pagina Impostazioni e monitoraggio impostare "Criteri di Azure per Kubernetes" su 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 criteri di Azure 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 Criteri di Azure per Azure Arc" sono state disabilitate nel connettore GCP, è possibile seguire questa procedura per abilitarla nel connettore GCP.

Distribuire Criteri di Azure per Kubernetes in cluster esistenti

È possibile configurare manualmente Criteri di Azure 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).

Nota

Per AWS non è possibile eseguire l'onboarding su larga scala usando il connettore; tuttavia, è possibile installarlo in tutti i cluster esistenti o in cluster specifici usando la raccomandazione I cluster Kubernetes abilitati per Azure Arc devono avere l'estensione di criteri di Azure per l'estensione Kubernetes installata.

Per distribuire i Criteri di Azure per Kubernetes nei cluster specificati:

  1. Nella pagina raccomandazioni 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 locale - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed". Screenshot che mostra la raccomandazione dei cluster del servizio Azure Kubernetes.

      Suggerimento

      La raccomandazione è inclusa in diversi controlli di sicurezza e non è importante quale selezionare nel passaggio successivo.

  2. Da uno dei controlli di sicurezza selezionare la raccomandazione per visualizzare le risorse in cui è possibile installare il componente aggiuntivo.

  3. Selezionare il cluster pertinente e selezionare Correggi.

    Screenshot che mostra come selezionare il cluster da correggere.

Visualizzare e configurare il bundle di raccomandazioni

Circa 30 minuti dopo il completamento dell'installazione di Criteri di Azure per Kubernetes, Defender per il cloud mostra lo stato di integrità dei cluster per le raccomandazioni seguenti, ognuno nei controlli di sicurezza pertinenti, come mostrato:

Nota

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

Suggerimento

Alcune raccomandazioni includono parametri che devono essere personalizzati tramite Criteri di Azure per usarli in modo efficace. Ad esempio, per trarre vantaggio dalla raccomandazione Le immagini dei contenitori devono 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.

Nota

I componenti Microsoft come il sensore Defender e l'agente di Monitoraggio di Azure (AMA) vengono distribuiti nello spazio dei nomi kube-system per impostazione predefinita. Questa configurazione garantisce che non siano contrassegnate come non conformi nelle raccomandazioni del piano dati. Tuttavia, gli strumenti del fornitore di terze parti installati in uno spazio dei nomi diverso possono 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 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 le 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 di Azure.

  2. Andare alle impostazioni dell'ambiente Microsoft Defender per il cloud>.

  3. Selezionare la sottoscrizione pertinente.

  4. Nel menu di Defender per il cloud selezionare Criteridi sicurezza.

  5. Selezionare l'assegnazione pertinente. L'assegnazione predefinita è ASC default.

  6. Aprire la scheda Parametri e modificare i valori in base alle esigenze.

    Screenshot che mostra dove modificare i parametri per una delle raccomandazioni nel bundle di protezione avanzata del piano dati Kubernetes.

  7. Selezionare Rivedi e salva.

  8. Seleziona Salva.

Per applicare una delle raccomandazioni:

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

    Screenshot che mostra l'opzione Nega per il parametro Criteri di Azure.

    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. Aprire la pagina Inventario degli asset di Defender per il cloud e impostare il filtro del tipo di risorsa sui Servizi Kubernetes.

  2. Selezionare un cluster per analizzare ed esaminare 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. Per un elenco dei pod specifici, selezionare il cluster seguito da 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: