Abilitare Federal Information Process Standard (FIPS) per i pool di nodi del servizio Azure Kubernetes
FIPS (Federal Information Processing Standard) 140-2 è uno standard del Governo degli Stati Uniti che definisce i requisiti di sicurezza minimi per i moduli crittografici nei prodotti e nei sistemi informatici. Il servizio Azure Kubernetes consente di creare pool di nodi Linux e Windows con FIPS 140-2 abilitato. Le distribuzioni in esecuzione nei pool di nodi con abilitazione di FIPS possono usare tali moduli crittografici per fornire maggiore sicurezza e contribuire al rispetto dei controlli di sicurezza come parte della conformità a FedRAMP. Per altre informazioni su FIPS 140-2, vedere Federal Information Processing Standard (FIPS) 140.
Prerequisiti
- Interfaccia della riga di comando di Azure versione 2.32.0 o successiva installata e configurata. Per trovare la versione, eseguire
az --version
. Per altre informazioni sull'installazione o l'aggiornamento dell'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure.
Nota
Il componente aggiuntivo di monitoraggio del servizio Azure Kubernetes supporta i pool di nodi abilitati per FIPS con Ubuntu, Azure Linux e Windows a partire da Agent versione 3.1.17 (Linux) e Win-3.1.17 (Windows).
Limiti
- I pool di nodi abilitati per FIPS presentano le limitazioni seguenti:
- I pool di nodi abilitati per FIPS richiedono Kubernetes versione 1.19 e successive.
- Per aggiornare i pacchetti o i moduli sottostanti usati per FIPS, è necessario usare Aggiornamento dell’immagine del nodo.
- Le immagini del contenitore nei nodi FIPS non sono state valutate per la conformità FIPS.
- Il montaggio di una condivisione CIFS non riesce perché FIPS disabilita alcuni moduli di autenticazione. Per risolvere questo problema, vedere Errori durante il montaggio di una condivisione file in un pool di nodi abilitato per FIPS.
Importante
L'immagine Linux abilitata per FIPS è un'immagine diversa rispetto all'immagine Linux predefinita usata per i pool di nodi basati su Linux.
Le immagini dei nodi abilitate per FIPS possono avere numeri di versione diversi, ad esempio la versione del kernel, rispetto alle immagini non abilitate per FIPS. Il ciclo di aggiornamento per i pool di nodi abilitati per FIPS e le immagini dei nodi possono differire dai pool di nodi e dalle immagini non abilitati per FIPS.
Versioni del sistema operativo supportate
È possibile creare pool di nodi abilitati per FIPS in tutti i tipi di sistema operativo supportati, Linux e Windows. Tuttavia, non tutte le versioni del sistema operativo supportano pool di nodi abilitati per FIPS. Dopo il rilascio di una nuova versione del sistema operativo, è in genere previsto un periodo di attesa prima che sia conforme a FIPS.
La tabella seguente include le versioni del sistema operativo supportate:
OS Type (Tipo di sistema operativo) | OS SKU | Conformità con FIPS |
---|---|---|
Linux | Ubuntu | Supportata |
Linux | Azure Linux | Supportata |
Finestre | Windows Server 2019 | Supportata |
Finestre | Windows Server 2022 | Supportata |
Quando si richiede Ubuntu abilitato per FIPS, se la versione predefinita di Ubuntu non supporta FIPS, per impostazione predefinita il servizio Azure Kubernetes sarà la versione FIPS supportata più recente di Ubuntu. Ad esempio, Ubuntu 22.04 è l'impostazione predefinita per i pool di nodi Linux. Poiché la versione 22.04 attualmente non supporta FIPS, per impostazione predefinita il servizio Azure Kubernetes è Ubuntu 20.04 per i pool di nodi abilitati per Linux FIPS.
Nota
In precedenza, è possibile usare l'API GetOSOptions per determinare se un determinato sistema operativo supporta FIPS. L'API GetOSOptions è ora deprecata e non verrà più inclusa nelle nuove versioni dell'API del servizio Azure Kubernetes a partire dalla versione 2024-05-01.
Creare un pool di nodi Linux abilitato per FIPS
Creare un pool di nodi Linux abilitato per FIPS usando il comando
az aks nodepool add
con il parametro--enable-fips-image
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name fipsnp \ --enable-fips-image
Nota
È anche possibile usare il parametro
--enable-fips-image
con il comandoaz aks create
quando si crea un cluster per abilitare FIPS nel pool di nodi predefinito. Quando si aggiungono pool di nodi a un cluster creato in questo modo, è comunque necessario usare il parametro--enable-fips-image
durante l’aggiunta di pool di nodi per creare un pool di nodi abilitato per FIPS.Verificare che il pool di nodi sia abilitato per FIPS usando il comando
az aks show
ed eseguire una query del valoreenableFIPS in agentPoolProfiles.az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
L'output di esempio seguente mostra che il pool di nodi fipsnp è abilitato per FIPS:
Name enableFips --------- ------------ fipsnp True nodepool1 False
Elencare i nodi usando il comando
kubectl get nodes
.kubectl get nodes
L'output di esempio seguente mostra un elenco dei nodi del cluster. I nodi che iniziano con
aks-fipsnp
fanno parte del pool di nodi abilitato per FIPS.NAME STATUS ROLES AGE VERSION aks-fipsnp-12345678-vmss000000 Ready agent 6m4s v1.19.9 aks-fipsnp-12345678-vmss000001 Ready agent 5m21s v1.19.9 aks-fipsnp-12345678-vmss000002 Ready agent 6m8s v1.19.9 aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.19.9
Eseguire una distribuzione con una sessione interattiva in uno dei nodi del pool di nodi abilitato per FIPS usando il comando
kubectl debug
.kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Dall'output interattivo della sessione verificare che le librerie di crittografia FIPS siano abilitate. L'output dovrebbe essere simile all'esempio di output seguente:
root@aks-fipsnp-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled 1
I pool di nodi abilitati per FIPS hanno anche un'etichetta kubernetes.azure.com/fips_enabled=true, che le distribuzioni possono usare per indirizzare tali pool di nodi.
Creare un pool di nodi Windows abilitato per FIPS
Creare un pool di nodi Windows abilitato per FIPS usando il comando
az aks nodepool add
con il parametro--enable-fips-image
. A differenza dei pool di nodi basati su Linux, i pool di nodi Windows condividono lo stesso set di immagini.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name fipsnp \ --enable-fips-image \ --os-type Windows
Verificare che il pool di nodi sia abilitato per FIPS usando il comando
az aks show
ed eseguire una query del valoreenableFIPS in agentPoolProfiles.az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
Verificare che i pool di nodi di Windows abbiano accesso alle librerie di crittografia FIPS creando una connessione RDP a un nodo Windows in un pool di nodi abilitato per FIPS e controllando il Registro di sistema. Nell'applicazione Esegui immettere
regedit
.Cercare
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy
nel Registro di sistema.Se
Enabled
è impostato su 1, FIPS è abilitato.
I pool di nodi abilitati per FIPS hanno anche un'etichetta kubernetes.azure.com/fips_enabled=true, che le distribuzioni possono usare per indirizzare tali pool di nodi.
Aggiornare un pool di nodi esistente per abilitare o disabilitare FIPS
I pool di nodi Linux esistenti possono essere aggiornati per abilitare o disabilitare FIPS. Se si prevede di eseguire la migrazione dei pool di nodi da non FIPS a FIPS, verificare innanzitutto che l'applicazione funzioni correttamente in un ambiente di test prima di eseguirne la migrazione a un ambiente di produzione. La convalida dell'applicazione in un ambiente di test deve impedire problemi causati dal kernel FIPS che blocca alcuni algoritmi di crittografia o crittografia deboli, ad esempio un algoritmo MD4 non conforme a FIPS.
Nota
Quando si aggiorna un pool di nodi Linux esistente per abilitare o disabilitare FIPS, l'aggiornamento del pool di nodi verrà spostato tra l'immagine FIPS e l'immagine non FIPS. Questo aggiornamento del pool di nodi attiverà una ricreazione dell'immagine per completare l'aggiornamento. Questo potrebbe causare il completamento dell'aggiornamento del pool di nodi.
Prerequisiti
- Interfaccia della riga di comando di Azure versione 2.64.0 o successiva. Per trovare la versione, eseguire
az --version
. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Abilitare FIPS in un pool di nodi esistente
I pool di nodi Linux esistenti possono essere aggiornati per abilitare FIPS. Quando si aggiorna un pool di nodi esistente, l'immagine del nodo passerà dall'immagine corrente all'immagine FIPS consigliata dello stesso SKU del sistema operativo.
Aggiornare un pool di nodi usando il comando [
az aks nodepool update
][az-aks-nodepool-update] con il parametro--enable-fips-image
.az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name np \ --enable-fips-image
Il comando precedente attiva una ricreazione dell'immagine del pool di nodi immediatamente per distribuire il sistema operativo conforme a FIPS. Questa ricreazione dell'immagine si verifica durante l'aggiornamento del pool di nodi. Non sono necessari altri passaggi.
Verificare che il pool di nodi sia abilitato per FIPS usando il comando
az aks show
e la query per il valore di enableFIPS in agentPoolProfiles.az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
L'output di esempio seguente mostra che il pool di nodi np è abilitato per FIPS:
Name enableFips --------- ------------ np True nodepool1 False
Elencare i nodi usando il comando
kubectl get nodes
.kubectl get nodes
L'output di esempio seguente mostra un elenco dei nodi del cluster. I nodi che iniziano con
aks-np
fanno parte del pool di nodi abilitato per FIPS.NAME STATUS ROLES AGE VERSION aks-np-12345678-vmss000000 Ready agent 6m4s v1.19.9 aks-np-12345678-vmss000001 Ready agent 5m21s v1.19.9 aks-np-12345678-vmss000002 Ready agent 6m8s v1.19.9 aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.19.9
Eseguire una distribuzione con una sessione interattiva in uno dei nodi del pool di nodi abilitato per FIPS usando il comando
kubectl debug
.kubectl debug node/aks-np-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Dall'output interattivo della sessione verificare che le librerie di crittografia FIPS siano abilitate. L'output dovrebbe essere simile all'esempio di output seguente:
root@aks-np-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled 1
I pool di nodi abilitati per FIPS hanno anche un'etichetta kubernetes.azure.com/fips_enabled=true, che le distribuzioni possono usare per indirizzare tali pool di nodi.
Disabilitare FIPS in un pool di nodi esistente
I pool di nodi Linux esistenti possono essere aggiornati per disabilitare FIPS. Quando si aggiorna un pool di nodi esistente, l'immagine del nodo passerà dall'immagine FIPS corrente all'immagine non FIPS consigliata dello stesso SKU del sistema operativo. La modifica dell'immagine del nodo si verificherà dopo una ricreazione dell'immagine.
Aggiornare un pool di nodi Linux usando il comando [
az aks nodepool update
][az-aks-nodepool-update] con il parametro--disable-fips-image
.az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name np \ --disable-fips-image
Il comando precedente attiva una ricreazione dell'immagine del pool di nodi immediatamente per distribuire il sistema operativo conforme a FIPS. Questa ricreazione dell'immagine si verifica durante l'aggiornamento del pool di nodi. Non sono necessari altri passaggi.
Verificare che il pool di nodi non sia abilitato per FIPS usando il comando
az aks show
e la query per il valore di enableFIPS in agentPoolProfiles.az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
L'output di esempio seguente mostra che il pool di nodi np non è abilitato per FIPS:
Name enableFips --------- ------------ np False nodepool1 False
Passaggi successivi
Per altre informazioni sulla sicurezza del servizio Azure Kubernetes, vedere Procedure consigliate per la sicurezza e gli aggiornamenti del cluster nel servizio Azure Kubernetes.
Azure Kubernetes Service