Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 Defender per il cloud, si implementa il dataplane hardening utilizzando Criteri di Azure for Kubernetes per valutare e far rispettare queste configurazioni. Microsoft Defender for Containers distribuisce automaticamente Criteri di Azure quando abiliti il provisioning automatico.
Se disattivi Criteri di Azure for Kubernetes nelle impostazioni del piano di Defender for Containers, puoi implementarlo correggendo la raccomandazione pertinente. Puoi anche distribuire manualmente Criteri di Azure usando interfaccia della riga di comando di Azure per distribuire Defender per componenti Container o Helm per distribuire componenti Defender per Containers se disabiliti il provisioning automatico durante l'abilitazione o escludi cluster specifici dal provisioning automatico.
Dopo aver distribuito Criteri di Azure for Kubernetes, Defender per il cloud genera raccomandazioni per il rafforzamento dei piani dati in base alla configurazione del cluster. Puoi rivedere queste raccomandazioni, configurare i parametri delle policy e farle rispettare sui tuoi cluster.
Prerequisiti
Per cominciare, assicurati di:
Aggiungi le regole FQDN/application richieste per la policy Azure.
(Per cluster non AKS) Collega il tuo cluster Kubernetes ad Azure Arc.
Abilitare Criteri di Azure per Kubernetes correggendo le raccomandazioni
Se non hai distribuito Criteri di Azure per Kubernetes o disattivato nelle impostazioni del piano Defender for Containers, installalo correggendo la raccomandazione che corrisponde al tipo di cluster in Defender per il cloud.
Accedi al portale di Azure.
Passare a Microsoft Defender per il cloud>Recommendations.
Cercare la raccomandazione pertinente:
- Azure: servizio Azure Kubernetes clusters dovrebbero avere installato il add-on Criteri di Azure for Kubernetes
- GCP: I cluster GKE dovrebbero avere installata l'estensione Criteri di Azure
- Kubernetes abilitato per AWS/Arc: I cluster Kubernetes abilitati per Azure Arc devono avere installata l'estensione Criteri di Azure
Seleziona una raccomandazione.
Nella scheda Take action (Azioni ) selezionare Fix (Correggi).
Selezionare Correggi per correggere le risorse selezionate.
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:
Accedi al portale di Azure.
Passare a Defender per il cloud>Inventory.
Impostare il filtro del tipo di risorsa sul servizio Kubernetes e selezionare Applica.
Selezionare il cluster pertinente.
Esaminare le raccomandazioni disponibili. Le raccomandazioni per la protezione avanzata del piano dati mostrano il numero di componenti Kubernetes interessati.
Selezionare una raccomandazione per visualizzare le risorse interessate.
Seleziona Agisci per esaminare le opzioni di bonifica.
Configurare i parametri dei criteri
Alcune raccomandazioni includono parametri che limitano le risorse Kubernetes valutate dalla Criteri di Azure sottostante. Ad esempio, il criterio per file system radice non modificabile (sola lettura) deve essere applicato per i contenitori include i parametri excludedContainers, 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:
Accedi al portale di Azure.
Passare a Microsoft Defender per il cloud>Impostazioni dell'ambiente.
Selezionare la sottoscrizione pertinente.
Selezionare Criteri di sicurezza.
Nella scheda Standard selezionare lo standard di sicurezza pertinente.
Seleziona il menu a tre punti dell'assegnazione politica pertinente e seleziona Gestisci effetto e parametri.
Aggiornare i valori dei parametri necessari.
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:
Accedi al portale di Azure.
Passare a Microsoft Defender per il cloud>Recommendations.
Cercare e selezionare la raccomandazione di rafforzamento del piano dati pertinente.
Nella scheda Take action (Azioni ) selezionare Deny (Nega).
Impostare l'ambito.
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 seguente deployment utilizza un registry di container attendibile, impone limiti di CPU e memoria e adotta un contesto di sicurezza restrittivo che disabilita l'escalation dei privilegi e viene eseguito 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 deployment seguente viola intenzionalmente diverse policy di protezione del piano dati, tra cui l'esecuzione di un container privilegiato come root, l'abilitazione della rete host e dei namespace condivisi e il montaggio di un volume hostPath.
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