Crittografare i dischi del sistema operativo con una chiave gestita dal cliente in Azure Red Hat OpenShift

Per impostazione predefinita, Microsoft Azure usa chiavi generate automaticamente per crittografare i dischi del sistema operativo delle macchine virtuali in un cluster Azure Red Hat OpenShift. Per una maggiore sicurezza, è possibile crittografare i dischi del sistema operativo usando chiavi autogestite durante la distribuzione di un cluster. Questa funzionalità offre un maggiore controllo crittografando i dati riservati con chiavi gestite dal cliente.

I cluster con chiavi gestite dal cliente hanno una classe di archiviazione predefinita abilitata con le relative chiavi. Di conseguenza, queste chiavi crittografano sia i dischi del sistema operativo che i dischi dati. Azure Key Vault archivia le chiavi gestite dal cliente. Per altre informazioni sull'uso di Key Vault per creare e gestire le chiavi, vedere Azure Key Vault concetti di base.

Con la crittografia basata su host, i dati archiviati nell'host della macchina virtuale delle VM del nodo Azure Red Hat OpenShift vengono crittografati a riposo. Questi dati vengono crittografati in Archiviazione di Azure. La crittografia basata su host indica che i dischi temporanei vengono crittografati inattivi usando chiavi gestite dalla piattaforma.

La cache dei dischi del sistema operativo e dei dati è crittografata a riposo con chiavi gestite dalla piattaforma o chiavi gestite dal cliente. Il tipo di chiavi dipende dal tipo di crittografia impostato su tali dischi. Per impostazione predefinita, quando si usa Azure Red Hat OpenShift, i dischi dati e del sistema operativo vengono crittografati inattivi con chiavi gestite dalla piattaforma. Questa impostazione predefinita indica che anche le cache per questi dischi sono crittografate per impostazione predefinita con chiavi gestite dalla piattaforma.

È possibile specificare chiavi gestite seguendo i passaggi di crittografia nella sezione successiva. Le chiavi specificate in questo passaggio crittografa anche la cache per questi dischi.

Limitazione

I clienti devono gestire l'insieme di credenziali delle chiavi e la crittografia del disco in Azure. La mancata manutenzione delle chiavi comporta l'interruzione Azure Red Hat OpenShift cluster. Le macchine virtuali smettono di funzionare e, di conseguenza, l'intero cluster Azure Red Hat OpenShift smette di funzionare.

Il team di progettazione Azure Red Hat OpenShift non può accedere alle chiavi. Di conseguenza, non possono eseguire il backup, replicare o recuperare le chiavi.

Per informazioni dettagliate sull'uso dei set di crittografia dei dischi per gestire le chiavi di crittografia, vedere Crittografia lato server di archiviazione su disco di Azure.

Prerequisiti

  • Verificare le autorizzazioni. È necessario disporre delle autorizzazioni per creare un cluster Azure Red Hat OpenShift, un insieme di credenziali delle chiavi e un set di crittografia del disco.

  • Verificare di avere il ruolo Key Vault Crypto Officer. Questo ruolo dispone delle autorizzazioni per creare una chiave.

  • Se sono presenti più sottoscrizioni di Azure, registrare i provider di risorse. Per informazioni dettagliate sulla registrazione, vedere Registrare i provider di risorse.

  • Conferma di avere la funzionalità EncryptionAtHost abilitata nel tuo abbonamento. È possibile abilitarla eseguendo:

    az feature register --namespace Microsoft.Compute --name EncryptionAtHost
    

    È possibile controllare lo stato corrente della funzionalità eseguendo:

    az feature show --namespace Microsoft.Compute --name EncryptionAtHost
    

Creare un'istanza di Key Vault

È necessario usare un'istanza di Key Vault per archiviare le chiavi. Crea un nuovo insieme di credenziali delle chiavi con la protezione dall'eliminazione definitiva abilitata. Crea quindi una nuova chiave nell'insieme di credenziali delle chiavi per archiviare la tua chiave personalizzata.

  1. Impostare le variabili di ambiente:

    export KEYVAULT_NAME=aro-enckv
    export KEYVAULT_KEY_NAME=aro-key
    export DISK_ENCRYPTION_SET_NAME=aro-des
    export LOCATION=<location-name>
    export RESOURCEGROUP=<resource-group-name>
    
  2. Crea un Key Vault:

    az keyvault create \
        --name $KEYVAULT_NAME \
        --resource-group $RESOURCEGROUP \
        --location $LOCATION \
        --enable-purge-protection true
    

    Annotazioni

    È necessario abilitare la protezione dall'eliminazione. Vedi Configurare l'Azure Key Vault.

    Opzionale: poiché la protezione dall'eliminazione definitiva è abilitata, non è possibile riutilizzare immediatamente il nome dell'insieme di credenziali dopo l'eliminazione. Aggiungendo la specifica --retention-days <NUMBER_OF_DAYS>, è possibile controllare per quanto tempo l'insieme di credenziali rimane nello stato di "eliminazione temporanea". Il valore predefinito è 90 giorni, ma impostandolo su un valore inferiore (minimo 7 giorni) significa che è possibile recuperare il nome più rapidamente.

  3. Creare una chiave nell'insieme di credenziali delle chiavi:

    az keyvault key create \
        --vault-name $KEYVAULT_NAME \
        --name $KEYVAULT_KEY_NAME \
        --protection software
    
  4. Impostare l'ID della risorsa dell'insieme di credenziali delle chiavi e le variabili dell'URL della chiave:

    KEYVAULT_ID=$(az keyvault show --name $KEYVAULT_NAME --query "[id]" -o tsv)
    
    KEYVAULT_KEY_URL=$(az keyvault key show --vault-name $KEYVAULT_NAME --name $KEYVAULT_KEY_NAME --query "[key.kid]" -o tsv)
    

Crea un set di crittografia dischi

Usare il set di crittografia del disco Azure come punto di riferimento per i dischi nei cluster Azure Red Hat OpenShift. È connesso all'insieme di credenziali delle chiavi che hai creato nel passaggio precedente e recupera da lì le chiavi gestite dal cliente.

  1. Creare il set di crittografia del disco:

    az disk-encryption-set create \
        --name $DISK_ENCRYPTION_SET_NAME \
        --location $LOCATION \
        --resource-group $RESOURCEGROUP \
        --source-vault $KEYVAULT_ID \
        --key-url $KEYVAULT_KEY_URL
    
  2. Specificare l'ID della risorsa del set di crittografia del disco e le variabili di identità:

    DES_ID=$(az disk-encryption-set show --name $DISK_ENCRYPTION_SET_NAME --resource-group $RESOURCEGROUP --query 'id' -o tsv)
    
    DES_IDENTITY=$(az disk-encryption-set show --name $DISK_ENCRYPTION_SET_NAME --resource-group $RESOURCEGROUP --query "[identity.principalId]" -o tsv)
    

Concedi al set di crittografia del disco le autorizzazioni per accedere all'insieme di credenziali delle chiavi

Si desidera che l'identità gestita del set di crittografia del disco utilizzi la chiave di crittografia. Assegnare un ruolo predefinito che fornisca le autorizzazioni necessarie per la chiave, ad esempio Key Vault Crypto Service Encryption User o Key Vault Crypto User. In alternativa, usare un ruolo personalizzato, purché includa le autorizzazioni necessarie (wrapkey, unwrapkeye get) per eseguire operazioni chiave richieste dai set di crittografia dischi.

az role assignment create \
    --assignee $DES_IDENTITY \
    --role "Key Vault Crypto Service Encryption User" \
    --scope $KEYVAULT_ID

Creare un cluster di Azure Red Hat OpenShift

Quando si crea un cluster, è possibile abilitare le chiavi gestite dal cliente specificando il set di crittografia del disco. Usare il parametro --disk-encryption-set. Ad esempio: --disk-encryption-set $DES_ID.

Per creare un cluster con un'entità servizio, seguire le istruzioni riportate in Creare un cluster Azure Red Hat OpenShift.

Di seguito è riportato un esempio di creazione di un cluster con il --disk-encryption-set parametro :

az aro create \
    --resource-group $RESOURCEGROUP \
    --name $CLUSTER \
    --vnet aro-vnet \
    --master-subnet master-subnet \
    --worker-subnet worker-subnet \
    --disk-encryption-set $DES_ID

Annotazioni

È possibile abilitare solo le chiavi gestite dal cliente nei cluster esistenti per i nodi di lavoro, non nei nodi master. È possibile ottenere questa configurazione. Per altre informazioni, vedere la documentazione di Red Hat, tra cui Abilitazione delle chiavi di crittografia gestite dal cliente per un set di computer e Modifica di un set di computer di calcolo.

Per creare un cluster Azure Red Hat OpenShift con identità gestite, prima di creare il cluster, è necessario concedere l'identità machine-api e l'identitàdisk-csi-driver. È inoltre necessario concedere all'entità servizio Microsoft.Compute/diskEncryptionSets/read proprietaria di Azure Red Hat OpenShift le autorizzazioni per il set di crittografia del disco.

Esempi di assegnazioni di ruolo per l'identità machine-api, l'identità disk-csi-driver e l'entità servizio proprietaria di ARO:

az role assignment create \
  --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name disk-csi-driver --query principalId -o tsv)" \
  --assignee-principal-type ServicePrincipal \
  --role <ROLE> \
  --scope $DES_ID"

az role assignment create \
  --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name machine-api --query principalId -o tsv)" \
  --assignee-principal-type ServicePrincipal \
  --role <ROLE> \
  --scope $DES_ID

az role assignment create \
  --assignee-object-id "$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query '[0].id' -o tsv)" \
  --assignee-principal-type ServicePrincipal \
  --role <ROLE> \
  --scope $DES_ID

Dopo aver creato il cluster Azure Red Hat OpenShift, tutte le macchine virtuali vengono crittografate con le chiavi di crittografia gestite dal cliente.

Per verificare che le chiavi siano state configurate correttamente, eseguire i comandi seguenti:

  1. Ottenere il nome del gruppo di risorse del cluster in cui si trovano le macchine virtuali, i dischi e altre infrastrutture del cluster:

    CLUSTERRESOURCEGROUP=$(az aro show --resource-group $RESOURCEGROUP --name $CLUSTER --query 'clusterProfile.resourceGroupId' -o tsv | cut -d '/' -f 5)
    
  2. Controlla che ai dischi sia associato il set di crittografia dei dischi corretto:

    az disk list --resource-group $CLUSTERRESOURCEGROUP --query '[].encryption'
    

Il campo diskEncryptionSetId nell'output deve puntare al set di crittografia del disco specificato durante la creazione del cluster Azure Red Hat OpenShift.

Aggiungere il supporto del modulo di protezione hardware gestito (mHSM) per le chiavi gestite dal cliente e l'imposizione di Criteri di Azure

È anche possibile aggiungere il supporto del modulo di protezione hardware gestito (mHSM) per le chiavi gestite dal cliente e richiedere e negare determinati attributi di crittografia. Questo supporto richiede modifiche all'API e Criteri di Azure.

Seguire questa procedura per creare un cluster Azure Red Hat OpenShift con mHSM e chiavi gestite dal cliente:

  1. Effettuare il provisioning e attivare un modulo di protezione hardware gestito usando il interfaccia della riga di comando di Azure.

  2. Esportare le variabili di ambiente dal passaggio precedente:

    export HSM_NAME=<hsm-name>
    export RESOURCE_GROUP=<resource-group>
    
  3. Abilitare la protezione dall'eliminazione definitiva e la gestione delle chiavi tramite Azure Resource Manager:

    az keyvault update-hsm \
      --hsm-name $HSM_NAME \
      --resource-group $RESOURCE_GROUP \
      --enable-purge-protection true
    
    az keyvault setting update \
      --hsm-name $HSM_NAME \
      --name AllowKeyManagementOperationsThroughARM \
      --value true 
    
  4. Completa i passaggi rimanenti per attivare l'mHSM: Attiva il tuo HSM gestito.

  5. Assegnati il ruolo Managed HSM Crypto User per poter creare chiavi in mHSM.

    oid=$(az ad signed-in-user show --query id -o tsv)
    az keyvault role assignment create \        
      --hsm-name $HSM_NAME \ 
      --role "Managed HSM Crypto User" \ 
      --assignee $oid \ 
      --scope /keys 
    
  6. Creare una chiave mHSM.

  7. Creare un'identità gestita e concedergli il Managed HSM Crypto Service Encryption User ruolo su mHSM.

    export UA_IDENTITY=<new-ua-identity>
    
    HSM_ID="https://${HSM_NAME}.managedhsm.azure.net"
    
    az identity create \
      --resource-group $RESOURCE_GROUP \
      --name $UA_IDENTITY
    
    IDENTITY_OBJECT_ID=$(az identity show \ 
      --resource-group $RESOURCE_GROUP \ 
      --name $UA_IDENTITY \ 
      --query principalId -o tsv) 
    
    az keyvault role assignment create \ 
      --id "$HSM_ID" \ 
      --role "Managed HSM Crypto Service Encryption User" \ 
      --assignee-object-id "$IDENTITY_OBJECT_ID" \ 
      --scope "/keys/byok-key"
    
  8. Creare un set di crittografia del disco, tenendo conto di quanto riportato di seguito:

    1. Impostare il tipo di crittografia su Encryption at-rest with a customer-managed key.

    2. Usare l'identità assegnata dall'utente creata nel passaggio precedente.

    3. Completare l'assegnazione di ruolo prima di creare il set di crittografia del disco.

  9. Esportare le variabili di ambiente dal passaggio precedente:

    export LOCATION=<yourLocation>
    export CLUSTER=<yourNewClusterName> 
    export VIRTUAL_NETWORK=<yourVirtualNetwork>
    export KEYVAULT_NAME=<yourKeyvaultName>
    export KEYVAULT_KEY_NAME=byok-key 
    export DISK_ENCRYPTION_SET_NAME=<yourDiskEncryptionSetName>
    
  10. Creare un cluster con il nuovo set di crittografia del disco:

    DES_ID=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g $RESOURCE_GROUP --query 'id' -o tsv) 
    
    az aro create --resource-group $RESOURCE_GROUP \ 
      --name $CLUSTER  \ 
      --vnet $VIRTUAL_NETWORK  \ 
      --master-subnet master-subnet \ 
      --worker-subnet worker-subnet \ 
      --disk-encryption-set $DES_ID 
    
  11. Dopo l'attivazione del cluster, confermare la crittografia:

    az disk list -g $VIRTUAL_NETWORK --query "[].{DiskName:name, VM:managedBy, EncryptionType:encryption.type, DiskEncryptionSet:encryption.diskEncryptionSetId}" -o table 
    

    Per verificare la crittografia, cercare EncryptionAtRestWithCustomerKey nella EncryptionType colonna .