Configurare le chiavi gestite dal cliente per crittografare i dati inattivi del bus di servizio di Azure

Il bus di servizio di Azure Premium fornisce la crittografia dei dati inattivi con crittografia del servizio di archiviazione di Azure (SSE). Il bus di servizio Premium utilizza Archiviazione di Azure per archiviare i dati. Tutti i dati archiviati con Archiviazione di Azure vengono crittografati usando chiavi gestite da Microsoft. Se si usa la propria chiave, nota anche come BYOK (Bring Your Own Key) o chiave gestita dal cliente, i dati vengono comunque crittografati usando la chiave gestita da Microsoft, ma in aggiunta la chiave gestita da Microsoft viene crittografata usando la chiave gestita dal cliente. Tale funzionalità consente di creare, ruotare, disabilitare e revocare l'accesso alle chiavi gestite dal cliente che vengono usate per crittografare quelle gestite da Microsoft. L'abilitazione della funzionalità BYOK è un processo di configurazione che viene effettuato una sola volta nello spazio dei nomi.

Esistono alcune avvertenze sulla chiave gestita dal cliente per la crittografia lato servizio.

  • Questa funzionalità è supportata dal livello Premium del bus di servizio di Azure. Non può essere abilitata per gli spazi dei nomi del bus di servizio di livello standard.
  • La crittografia può essere abilitata solo per spazi dei nomi nuovi o vuoti. Se lo spazio dei nomi contiene code o argomenti, l'operazione di crittografia non va a buon fine.

È possibile usare Azure Key Vault (incluso HSM gestito da Azure Key Vault) per gestire le chiavi e controllare l'utilizzo delle chiavi. È possibile creare chiavi personalizzate e archiviarle in un insieme di credenziali delle chiavi oppure usare le API Azure Key Vault per generare chiavi. Per altre informazioni su Azure Key Vault, vedere Informazioni su Azure Key Vault.

Se è sufficiente crittografare determinate proprietà dei messaggi, è consigliabile usare una libreria come NServiceBus .

Abilitare chiavi gestite dal cliente (portale di Azure)

Per abilitare le chiavi gestite dal cliente nel portale di Azure, seguire questa procedura:

  1. Passare allo spazio dei nomi Premium del bus di servizio.

  2. Nella pagina Impostazioni dello spazio dei nomi del bus di servizio selezionare Crittografia.

  3. Selezionare la crittografia dei dati inattivi della chiave gestita dal cliente, come illustrato nell'immagine seguente.

    Screenshot che mostra come abilitare una chiave gestita dal cliente.

Nota

Attualmente non è possibile configurare HSM gestito da Azure Key Vault tramite il portale.

Configurare un insieme di credenziali delle chiavi con chiavi

Dopo aver abilitato le chiavi gestite dal cliente, è necessario associare la chiave gestita dal cliente allo spazio dei nomi del bus di servizio di Azure. Il bus di servizio supporta solo Azure Key Vault. Se si abilita l'opzione Crittografia con chiave gestita dal cliente nella sezione precedente, è necessario importare la chiave in Azure Key Vault. Inoltre, le chiavi devono avere Eliminazione temporanea eProtezione dall'eliminazione configurate per la chiave. Queste impostazioni possono essere configurate tramite PowerShello l'interfaccia della riga di comando.

  1. Per creare un nuovo insieme di credenziali delle chiavi, seguire la Guida introduttiva di Azure Key Vault. Per altre informazioni sull'importazione delle chiavi esistenti, vedere Informazioni su chiavi, segreti e certificati.

    Importante

    L'uso di chiavi gestite dal cliente con il bus di servizio di Azure richiede che l'insieme di credenziali delle chiavi abbia due proprietà obbligatorie configurate. Si tratta di: Eliminazione temporanea e Protezione dall'eliminazione. La proprietà Eliminazione temporanea è abilitata per impostazione predefinita quando si crea un nuovo insieme di credenziali delle chiavi nel portale di Azure, mentre la protezione dall'eliminazione definitiva è facoltativa, quindi assicurarsi di selezionarla durante la creazione dell'insieme di credenziali delle chiavi. Inoltre, se è necessario abilitare queste proprietà in un insieme di credenziali delle chiavi esistente, è necessario usare PowerShell o l'interfaccia della riga di comando di Azure.

  1. Per attivare l'eliminazione temporanea e la protezione dall'eliminazione durante la creazione di un insieme di credenziali, usare il comando az keyvault create.
az keyvault create --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --location westus --enable-soft-delete true --enable-purge-protection true
  1. Per aggiungere la protezione dall'eliminazione a un insieme di credenziali esistente (per cui è già abilitata l'eliminazione temporanea), usare il comando az keyvault update.
az keyvault update --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --enable-purge-protection true

Creare chiavi seguendo questa procedura:

  1. Per creare una nuova chiave, selezionare Genera/Importa nel menu Chiavi in Impostazioni.

    Screenshot che mostra il pulsante Genera/Importa.

  2. Impostare Opzioni su Genera e assegnare un nome alla chiave.

    Screenshot che mostra come assegnare un nome a una chiave.

  3. È ora possibile selezionare questa chiave da associare allo spazio dei nomi del bus di servizio per la crittografia dall'elenco a discesa.

    Screenshot che mostra come selezionare una chiave dall'insieme di credenziali delle chiavi.

    Nota

    Per ridondanza, è possibile aggiungere fino a 3 chiavi. Nel caso in cui una delle chiavi sia scaduta o non sia accessibile, per la crittografia verranno usate le altre chiavi.

  4. Compilare i dettagli per la chiave e fare clic su Seleziona. In questo modo viene abilitata la crittografia della chiave gestita da Microsoft con la propria chiave (chiave gestita dal cliente).

    Importante

    Per usare la chiave gestita dal cliente insieme al ripristino di emergenza geografico, vedere questa sezione.

    Per abilitare la crittografia della chiave gestita da Microsoft con una chiave gestita dal cliente, viene configurato un criterio di accesso per l'identità gestita del bus di servizio nell'insieme di credenziali delle chiavi di Azure specificato. In questo modo si garantisce l'accesso controllato all'insieme di credenziali delle chiavi di Azure dallo spazio dei nomi del bus di servizio di Azure.

    A causa di questo:

    • Se il ripristino di emergenza geografico è già abilitato per lo spazio dei nomi del bus di servizio e si sta cercando di abilitare la chiave gestita dal cliente,

      • interrompere l'associazione.
      • Configurare i criteri di accesso per l'identità gestita per gli spazi dei nomi primario e secondario nell'insieme di credenziali delle chiavi.
      • Configurare la crittografia nello spazio dei nomi primario.
      • Riabilitare gli spazi dei nomi primario e secondario.
    • Se si vuole abilitare il ripristino di emergenza geografico in uno spazio dei nomi in un bus di servizio in cui è già configurata la chiave gestita dal cliente, seguire questa procedura:

      • Configurare i criteri di accesso per l'identità gestita per lo spazio dei nomi secondario nell'insieme di credenziali delle chiavi.
      • Associare gli spazi dei nomi primari e secondari.
    • Dopo l'associazione, lo spazio dei nomi secondario userà l'insieme di credenziali delle chiavi configurato per lo spazio dei nomi primario. Se l'insieme di credenziali delle chiavi per entrambi gli spazi dei nomi è diverso prima dell'associazione del ripristino di emergenza geografico, l'utente deve delegare un criterio di accesso o un ruolo di controllo degli accessi in base al ruolo per l'identità gestita dello spazio dei nomi secondario nell'insieme di credenziali delle chiavi associato allo spazio dei nomi primario.

Identità gestite

Esistono due tipi di identità gestite che è possibile assegnare a uno spazio dei nomi del bus di servizio.

  • Assegnata dal sistema: è possibile abilitare un'identità gestita direttamente in uno spazio dei nomi del bus di servizio. Quando si abilita un'identità gestita assegnata dal sistema, viene creata un'identità in Microsoft Entra associata al ciclo di vita dello spazio dei nomi del bus di servizio. Quindi quando lo spazio dei nomi viene eliminato, Azure elimina automaticamente anche l'identità. Per impostazione predefinita, solo questa risorsa di Azure (spazio dei nomi) può utilizzare questa identità per richiedere token da Microsoft Entra ID.
  • Assegnata dall'utente: è anche possibile creare un'identità gestita come risorsa autonoma di Azure, denominata identità assegnata dall'utente. È possibile creare un'identità gestita assegnata dall'utente e assegnarla a uno o più spazi dei nomi del bus di servizio. Quando si utilizzano le identità gestite assegnate dall'utente, queste vengono gestite separatamente rispetto alle risorse che le usano. Non sono legate al ciclo di vita dello spazio dei nomi. È possibile eliminare in modo esplicito un'identità assegnata dall'utente quando non è più necessaria.

Per altre informazioni, vedere Cosa sono le identità gestite per le risorse di Azure.

Effettuare la crittografia usando identità assegnate dal sistema (modello)

Questa sezione illustra come eseguire le attività seguenti:

  • Creare uno spazio dei nomi del bus di servizio premium con un'identità del servizio gestita.
  • Creare un insieme di credenziali delle chiavi e concedere all'identità del servizio l'accesso all'insieme di credenziali delle chiavi.
  • Aggiornare lo spazio dei nomi del bus di servizio con le informazioni dell'insieme di credenziali delle chiavi (chiave/valore).

Creare uno spazio dei nomi del bus di servizio premium con un'identità del servizio gestita

Questa sezione illustra come creare uno spazio dei nomi del bus di servizio di Azure con identità del servizio gestito usando un modello di Azure Resource Manager e PowerShell.

  1. Creare un modello di Azure Resource Manager per creare uno spazio dei nomi di livello premium del bus di servizio con un'identità del servizio gestita. Denominare il file: CreateServiceBusPremiumNamespace.json:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
    
             }
          }
       ],
       "outputs":{
          "ServiceBusNamespaceId":{
             "type":"string",
             "value":"[resourceId('Microsoft.ServiceBus/namespaces',parameters('namespaceName'))]"
          }
       }
    }
    
  2. Creare un file di parametri modello denominato: CreateServiceBusPremiumNamespaceParams.json.

    Nota

    Sostituire i valori seguenti:

    • <ServiceBusNamespaceName>: il nome dello spazio dei nomi del bus di servizio
    • <Location>: la posizione dello spazio dei nomi del bus di servizio
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          }
       }
    }
    
  3. Eseguire il comando di PowerShell seguente per distribuire il modello al fine di creare uno spazio dei nomi del bus di servizio premium. Recuperare quindi l'ID dello spazio dei nomi del bus di servizio per utilizzarlo in un secondo momento. Sostituire {MyRG} con il nome del gruppo di risorse prima di eseguire il comando .

    $outputs = New-AzResourceGroupDeployment -Name CreateServiceBusPremiumNamespace -ResourceGroupName {MyRG} -TemplateFile ./CreateServiceBusPremiumNamespace.json -TemplateParameterFile ./CreateServiceBusPremiumNamespaceParams.json
    
    $ServiceBusNamespaceId = $outputs.Outputs["serviceBusNamespaceId"].value
    

Concedere all'identità dello spazio dei nomi del bus di servizio l'accesso all'insieme di credenziali delle chiavi

Impostare i criteri di accesso dell'insieme di credenziali delle chiavi in modo che l'identità gestita dello spazio dei nomi del bus di servizio possa accedere al valore della chiave nell'insieme di credenziali delle chiavi. Usare l'ID dello spazio dei nomi del bus di servizio della sezione precedente.

$identity = (Get-AzureRmResource -ResourceId $ServiceBusNamespaceId -ExpandProperties).Identity

Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $identity.PrincipalId -PermissionsToKeys get,wrapKey,unwrapKey,list

Crittografare i dati nello spazio dei nomi del bus di servizio con la chiave gestita dal cliente dall'insieme di credenziali delle chiavi

Finora sono stati eseguiti i passaggi seguenti:

  1. Creare uno spazio dei nomi premium con un'identità gestita.
  2. Creare un insieme di credenziali delle chiavi e concedere all'identità gestita l'accesso all'insieme di credenziali delle chiavi.

In questo passaggio si aggiorna lo spazio dei nomi del bus di servizio con informazioni sull'insieme di credenziali delle chiavi.

  1. Creare un file JSON denominato UpdateServiceBusNamespaceWithEncryption.json con il contenuto seguente:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                      {
                         "keyName":"[parameters('keyName')]",
                         "keyVaultUri":"[parameters('keyVaultUri')]"
                      }
                   ]
                }
             }
          }
       ]
    }
    
  2. Creare un file di parametri modello: UpdateServiceBusNamespaceWithEncryptionParams.json.

    Nota

    Sostituire i valori seguenti:

    • <ServiceBusNamespaceName>: il nome dello spazio dei nomi del bus di servizio
    • <Location>: la posizione dello spazio dei nomi del bus di servizio
    • <KeyVaultName> - Nome dell'insieme di credenziali delle chiavi
    • <KeyName> - Nome della chiave nell'insieme di credenziali delle chiavi
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          }
       }
    }
    
  3. Eseguire il comando di PowerShell seguente per distribuire il modello di Resource Manager. Sostituire {MyRG} con il nome del proprio gruppo di risorse prima di eseguire il comando.

    New-AzResourceGroupDeployment -Name UpdateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./UpdateServiceBusNamespaceWithEncryption.json -TemplateParameterFile ./UpdateServiceBusNamespaceWithEncryptionParams.json
    

Effettuare la crittografia usando identità assegnate dall'utente (modello)

  1. Creare un'identità assegnata dall'utente.
  2. Creare un insieme di credenziali delle chiavi e concedere l'accesso all'identità assegnata dall'utente tramite i criteri di accesso.
  3. Creare uno spazio dei nomi del bus di servizio premium con l'identità utente gestita e le informazioni sull'insieme di credenziali delle chiavi.

Creare un'identità assegnata dall'utente

Seguire le istruzioni dell'articolo Creare un'identità gestita assegnata dall'utente per creare un'identità assegnata dall'utente. È anche possibile creare un'identità assegnata dall'utente usando l'interfaccia della riga di comando, PowerShell, il modello di Azure Resource Manager e REST.

Nota

È possibile assegnare fino a 4 identità utente a uno spazio dei nomi. Queste associazioni vengono eliminate quando lo spazio dei nomi viene eliminato o quando si passa il identity -> type nel modello a None.

Concedere l'accesso all'identità assegnata dall'utente

  1. Ottenere l'ID entità servizio per l'identità utente usando il comando PowerShell seguente. Nell'esempio, ud1 è l'identità assegnata dall'utente da usare per la crittografia.

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  2. Concedere all'identità assegnata dall'utente l'accesso all'insieme di credenziali delle chiavi attraverso l’assegnazione di un criterio di accesso.

    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $servicePrincipal.Id -PermissionsToKeys get,wrapKey,unwrapKey,list    
    

    Nota

    È possibile aggiungere fino a 3 chiavi, ma l'identità utente usata per la crittografia deve essere la stessa per tutte le chiavi. Attualmente è supportata solo una singola identità di crittografia.

Creare uno spazio dei nomi del bus di servizio premium con informazioni sull'identità utente e sull'insieme di credenziali delle chiavi

Questa sezione offre un esempio che illustra come eseguire le attività seguenti usando un modello di Azure Resource Manager.

  1. Assegnare un'identità gestita dall'utente a uno spazio dei nomi del bus di servizio.

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  2. Abilitare la crittografia nello spazio dei nomi specificando una chiave dall'insieme di credenziali delle chiavi e l'identità gestita dall'utente per accedere alla chiave.

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  3. Creare un file JSON denominato CreateServiceBusNamespaceWithUserIdentityAndEncryption.json con il contenuto seguente:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             },
         "identity": {
            "type": "Object",
            "defaultValue": {
                "userAssignedIdentity": ""
            },
            "metadata": {
                "description": "user-assigned identity."
            }
         }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2021-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
            "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                    "[parameters('identity').userAssignedIdentity]": {}
                }
            },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                        {
                            "keyName": "[parameters('keyName')]",
                            "keyVaultUri": "[parameters('keyVaultUri')]",
                            "identity": {
                                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                            }
                        }
                   ]
                }
             }
          }
       ]
    }        
    
  4. Creare un file di parametri modello: CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json.

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "identity": {
          "value": {
                "userAssignedIdentity": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER MANAGED IDENTITY NAME>"
          }
       }
       }
    }
    

    Nel file dei parametri sostituire i segnaposto con i valori appropriati.

    Segnaposto value
    <ServiceBusNamespaceName> Nome dello spazio dei nomi del bus di servizio.
    <Location> Percorso dove si vuole creare lo spazio dei nomi.
    <KeyVaultName> Nome dell'insieme di credenziali delle chiavi.
    <KeyName> Nome della chiave nell'insieme di credenziali delle chiavi.
    <AZURE SUBSCRIPTION ID> L'ID sottoscrizione di Azure.
    <RESOURCE GROUP NAME> Gruppo di risorse dell'identità gestita dall'utente.
    <USER MANAGED IDENTITY NAME> Nome dell'identità gestita dall'utente.
  5. Eseguire il comando di PowerShell seguente per distribuire il modello di Resource Manager. Sostituire {MyRG} con il nome del proprio gruppo di risorse prima di eseguire il comando.

    New-AzResourceGroupDeployment -Name CreateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryption.json -TemplateParameterFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json        
    

Usare identità assegnate dall'utente e assegnate dal sistema

Uno spazio dei nomi può avere contemporaneamente sia identità assegnate dal sistema che assegnate dall'utente. In questo caso, la proprietà type sarà SystemAssigned, UserAssigned come illustrato nell'esempio seguente.

"identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userIdentity1>" : {}
    }
}

In questo scenario è possibile scegliere l'identità assegnata dal sistema o l'identità assegnata dall'utente per crittografare i dati inattivi.

Nel modello di Resource Manager, se non si specifica un attributo identity, viene usata l'identità gestita dal sistema. Ecco un frammento di codice di esempio.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

Vedere l'esempio seguente per l'uso dell'identità gestita dall'utente per la crittografia. Si noti che l'attributo identity è impostato su identità gestita dall'utente.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]",
            "identity": {
                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
            }
         }
      ]
   }
}

Abilitare la crittografia dell'infrastruttura (doppia) dei dati

Se è necessario un livello superiore di garanzia che i dati siano sicuri, è possibile abilitare la crittografia a livello di infrastruttura, procedura nota anche come “crittografia doppia”.

Quando viene abilitata la crittografia dell’infrastruttura, i dati nello spazio dei nomi del bus di servizio di Azure vengono crittografati due volte, una volta a livello del servizio e una volta a livello dell'infrastruttura, usando due algoritmi di crittografia diversi e due chiavi diverse. Di conseguenza, la crittografia dell'infrastruttura dei dati del bus di servizio di Azure protegge da uno scenario in cui uno degli algoritmi o delle chiavi di crittografia può essere compromesso.

È possibile abilitare la crittografia dell'infrastruttura aggiornando il modello di Azure Resource Manager con la proprietà requireInfrastructureEncryption nel precedente UpdateServiceBusNamespaceWithEncryption.json, come illustrato di seguito.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",    
      "requireInfrastructureEncryption":true,         
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

Ruotare, revocare e memorizzare nella cache le chiavi

Ruotare le chiavi di crittografia

È possibile ruotare la chiave nell'insieme di credenziali delle chiavi usando il meccanismo di rotazione di Azure Key Vaults. Le date di attivazione e scadenza possono essere impostate anche per automatizzare la rotazione delle chiavi. Il bus di servizio rileva le nuove versioni chiave e inizia a usarle in modo automatico.

Revocare l'accesso alle chiavi

La revoca dell'accesso alle chiavi di crittografia non elimina i dati dal bus di servizio. Tuttavia, non è possibile accedere ai dati dallo spazio dei nomi del bus di servizio. È possibile revocare la chiave di crittografia tramite i criteri di accesso o eliminando la chiave. Per altre informazioni sui criteri di accesso e sulla protezione dell'insieme di credenziali delle chiavi in Accesso sicuro a un insieme di credenziali delle chiavi.

Una volta revocata la chiave di crittografia, il bus di servizio nello spazio dei nomi crittografato diventa inutilizzabile. Se l'accesso alla chiave è abilitato o la chiave eliminata viene ripristinata, il bus di servizio seleziona la chiave in modo da poter accedere ai dati dallo spazio dei nomi del bus di servizio crittografato.

Memorizzazione nella cache delle chiavi

L'istanza del bus di servizio esegue il polling delle chiavi di crittografia elencate ogni 5 minuti. Memorizza nella cache e li usa fino al polling successivo, ovvero dopo 5 minuti. Finché almeno una chiave è disponibile, le code e gli argomenti sono accessibili. Se tutte le chiavi elencate non sono accessibili quando esegue il polling, tutte le code e gli argomenti non saranno più disponibili.

Di seguito sono riportate informazioni dettagliate:

  • Ogni 5 minuti, il bus di servizio esegue il polling di tutte le chiavi gestite dal cliente elencate nel record dello spazio dei nomi:
    • Se una chiave è stata ruotata, il record viene aggiornato con la nuova chiave.
    • Se una chiave è stata revocata, la chiave viene rimossa dal record.
    • Se tutte le chiavi sono state revocate, lo stato di crittografia dello spazio dei nomi è impostato su Revocato. Non è possibile accedere ai dati dallo spazio dei nomi del bus di servizio.

Considerazioni sull'uso del ripristino di emergenza geografico

Crittografia con identità assegnate dal sistema

Per abilitare la crittografia della chiave gestita da Microsoft con una chiave gestita dal cliente, viene configurato un criterio di accesso per un'identità gestita assegnata dal sistema nell'insieme di credenziali delle chiavi di Azure specificato. Questo passaggio garantisce l'accesso controllato all'insieme di credenziali delle chiavi di Azure dallo spazio dei nomi del bus di servizio di Azure. Pertanto, è necessario seguire questa procedura:

  • Se il ripristino di emergenza geografico è già abilitato per lo spazio dei nomi del bus di servizio e si sta cercando di abilitare la chiave gestita dal cliente,
    • interrompere l'associazione.
    • Configurare i criteri di accesso per l'identità gestita assegnata dal sistema per gli spazi dei nomi primario e secondario nell'insieme di credenziali delle chiavi.
    • Configurare la crittografia nello spazio dei nomi primario.
    • Riabilitare gli spazi dei nomi primario e secondario.
  • Se si vuole abilitare il ripristino di emergenza geografico in uno spazio dei nomi in un bus di servizio in cui è già configurata la chiave gestita dal cliente, seguire questa procedura:
    • Configurare i criteri di accesso per l'identità gestita per lo spazio dei nomi secondario nell'insieme di credenziali delle chiavi.
    • Associare gli spazi dei nomi primari e secondari.

Crittografia con identità assegnate dall'utente

Di seguito sono elencati alcuni suggerimenti:

  • Creare un'identità gestita e assegnare le autorizzazioni di Key Vault all'identità gestita.
  • Aggiungere l'identità come identità assegnata dall'utente e abilitare la crittografia con l'identità in entrambi gli spazi dei nomi.
  • Associare gli spazi dei nomi tra loro.

Condizioni per abilitare il ripristino di emergenza geografico e la crittografia con identità assegnate dall'utente:

  • Lo spazio dei nomi secondario deve avere già abilitato la crittografia con un'identità assegnata dall'utente se deve essere associato a uno spazio dei nomi primario con crittografia abilitata.
  • Non è possibile abilitare la crittografia in un database primario già associato, anche se l'identità secondaria ha un'identità assegnata dall'utente associata allo spazio dei nomi.

Risoluzione dei problemi

Sintomo

Viene visualizzato un errore che informa che lo spazio dei nomi del bus di servizio è disabilitato perché la chiave di crittografia non è più valida.

Causa

È possibile usare resource_id o version, che collega a una versione specifica della chiave, che potrebbe essere scaduta. Se viene fornita una versione specifica, il bus di servizio usa tale versione della chiave, anche se la chiave viene ruotata.

Risoluzione

Usare resource__versionless_id o versionless_id anziché usare resource_id o version.

Passaggi successivi

Fai riferimento ai seguenti articoli: