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

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

  1. 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 comando az 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.

  2. 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  
    
  3. 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
    
  4. 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
    
  5. 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

  1. 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
    
  2. 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
    
  3. 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.

  4. Cercare HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy nel Registro di sistema.

  5. Se Enabled è impostato su 1, FIPS è abilitato.

Screenshot che mostra un'immagine dell'editor del Registro di sistema per i criteri dell'algoritmo FIPS e che è abilitata.

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

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.

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

  1. 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  
    
  2. 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
    
  3. 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
    
  4. 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.

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

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