Configuración de las claves administradas por el cliente para el cifrado de datos en reposo de Azure Service Bus

Azure Service Bus Premium proporciona cifrado de datos en reposo con Azure Storage Service Encryption (Azure SSE). Service Bus Premium usa Azure Storage para almacenar los datos. Todos los datos almacenados con Azure Storage se cifran con claves administradas por Microsoft. Si usa su propia clave (también conocida como Bring Your Own Key [BYOK] o clave administrada por el cliente), los datos se cifran mediante la clave administrada por Microsoft, pero además la clave administrada por Microsoft se cifra mediante la clave administrada por el cliente. Esta característica permite crear, rotar, deshabilitar y revocar el acceso a las claves administradas por el cliente que se usan para cifrar claves administradas por Microsoft. La habilitación de la característica BYOK es un proceso que solo hay que configurar una vez en el espacio de nombres.

Hay algunas advertencias para la clave administrada por el cliente para el cifrado en el lado del servicio.

  • Esta característica se admite en el nivel Premium de Azure Service Bus. No se puede habilitar para los espacios de nombres de nivel estándar de Service Bus.
  • El cifrado solo se puede habilitar para espacios de nombres nuevos o vacíos. Si el espacio de nombres contiene colas o temas, se produce un error en la operación de cifrado.

Puede usar Azure Key Vault para administrar las claves y auditar su uso. Puede crear sus propias claves y almacenarlas en un almacén de claves, o puede usar las API de Azure Key Vault para generarlas. Para obtener más información sobre Azure Key Vault, consulte ¿Qué es Azure Key Vault?

Habilitación de las claves administradas por el cliente (Azure Portal)

Para habilitar claves administradas del cliente en Azure Portal, siga estos pasos:

  1. Vaya al espacio de nombres Premium de Service Bus.

  2. En la página Configuración del espacio de nombres de Service Bus, seleccione Cifrado.

  3. Seleccione Cifrado de claves en reposo que administra el cliente como se muestra en la siguiente imagen.

    Enable customer managed key

Configuración de un almacén de claves con claves

Después de habilitar las claves administradas por el cliente, debe asociar la clave administrada por el cliente con su espacio de nombres de Azure Service Bus. Service Bus solo admite Azure Key Vault. Si habilita la opción Encryption with customer-managed key (Cifrado con clave administrada por el cliente) en la sección anterior, debe importar la clave en Azure Key Vault. Recuerde que las claves deben tener habilitadas las opciones Eliminación temporal y No purgar. Estas opciones se pueden configurar mediante PowerShell o la CLI.

  1. Para crear un nuevo almacén de claves, siga el inicio rápido de Azure Key Vault. Para más información sobre cómo importar claves existentes, consulte Información acerca de claves, secretos y certificados.

    Importante

    El uso de claves administradas por el cliente con Azure Service Bus requiere que el almacén de claves tenga configuradas dos propiedades obligatorias. Son: Eliminación temporal y Do Not Purge (No purgar). La propiedad Eliminación temporal se habilita de forma predeterminada al crear un almacén de claves en Azure Portal, mientras que la protección de purga es opcional, por lo que debe asegurarse de seleccionarla al crear la instancia de Key Vault. Además, si necesita habilitar estas propiedades en un almacén de claves existente, debe usar PowerShell o la CLI de Azure.

  2. Para activar la eliminación temporal y la protección de purgas al crear un almacén, use el 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
    
  3. Para agregar la protección de purgas a un almacén existente (que ya tenga habilitada la eliminación temporal), use el comando az keyvault update.

    az keyvault update --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --enable-purge-protection true
    
  4. Siga estos pasos para crear claves:

    1. Para crear una nueva clave, seleccione Generar/Importar en el menú Claves en Configuración.

      Select Generate/Import button

    2. Establezca Opciones en Generar y asigne un nombre a la clave.

      Create a key

    3. Ahora puede seleccionar esta clave para asociarla con el espacio de nombres de Service Bus para el cifrado en la lista desplegable.

      Select key from key vault

      Nota:

      Para lograr redundancia, puede agregar hasta 3 claves. En caso de que una de las claves haya expirado o no sea accesible, se usarán las demás claves para el cifrado.

    4. Rellene los detalles de la clave y haga clic en Seleccionar. Esto habilita el cifrado de la clave administrada por Microsoft con su clave (clave administrada por el cliente).

    Importante

    Si desea usar la clave administrada por el cliente junto con la recuperación ante desastres geográfica, revise esta sección.

    Para habilitar el cifrado de la clave administrada por Microsoft con una clave administrada por el cliente, se configura una directiva de acceso para la identidad administrada de Service Bus en la instancia especificada de Azure Key Vault. Esto garantiza el acceso controlado al almacén de claves de Azure desde el espacio de nombres de Azure Service Bus.

    Debido a esto:

    • Si la recuperación ante desastres geográfica ya está habilitada para el espacio de nombres de Service Bus y desea habilitar la clave administrada por el cliente, siga estos pasos:

      • Interrumpa el emparejamiento
      • Configure la directiva de acceso para la identidad administrada de los espacios de nombres principal y secundario en el almacén de claves.
      • Configure el cifrado en el espacio de nombres principal.
      • Vuelva a emparejar los espacios de nombres principal y secundario.
    • Si desea habilitar la recuperación ante desastres geográfica en un espacio de nombres de Service Bus en el que la clave administrada por el cliente ya está configurada, haga lo siguiente:

      • Configure la directiva de acceso para la identidad administrada del espacio de nombres secundario en el almacén de claves.
      • Empareje los espacios de nombres principal y secundario.
    • Una vez emparejado, el espacio de nombres secundario usará el almacén de claves configurado para el espacio de nombres principal. Si el almacén de claves de ambos espacios de nombres es diferente antes del emparejamiento de la recuperación ante desastres con localización geográfica, el usuario deberá delegar una directiva de acceso o un rol de RBAC para la identidad administrada del espacio de nombres secundario en el almacén de claves asociado al espacio de nombres principal.

Identidades administradas

Hay dos tipos de identidades administradas que puede asignar a un espacio de nombres de Service Bus.

  • Asignadas por el sistema: puede habilitar una identidad administrada directamente en un espacio de nombres de Service Bus. Cuando se habilita una identidad administrada asignada por el sistema, se crea una identidad en Microsoft Entra vinculada al ciclo de vida de ese espacio de nombres de Service Bus. Por tanto, cuando se elimina el espacio de nombres, Azure elimina automáticamente la identidad. Por diseño, solo ese recurso de Azure (espacio de nombres) puede usar esta identidad para solicitar tokens de Microsoft Entra ID.

  • Asignadas por el usuario: también es posible crear una identidad administrada como recurso independiente de Azure, que se denomina identidad asignada por el usuario. Puede crear una identidad administrada asignada por el usuario y asignársela a uno o varios espacios de nombres de Service Bus. Al usar las identidades administradas asignadas por el usuario, la identidad se administra independientemente de los recursos que la utilicen. No están asociadas al ciclo de vida del espacio de nombres. Cuando no se necesite, la identidad asignada por el usuario se puede eliminar explícitamente.

    Para más información, consulte ¿Qué es Managed Identities for Azure Resources?

Cifrado mediante identidades asignadas por el sistema (plantilla)

En esta sección se muestra cómo realizar las siguientes tareas:

  1. Cree un espacio de nombres de Service Bus premium con una identidad de servicio administrada.
  2. Cree un almacén de claves y conceda a la identidad de servicio acceso a él.
  3. Actualice el espacio de nombres de Service Bus con la información del almacén de claves (clave/valor).

Creación de un espacio de nombres de Service Bus con una identidad de servicio administrada

En esta sección se muestra cómo crear un espacio de nombres de Azure Service Bus con la identidad de servicio administrada mediante una plantilla de Azure Resource Manager y PowerShell.

  1. Cree una plantilla de Azure Resource Manager para crear un espacio de nombres de nivel premium de Service Bus con una identidad de servicio administrada. Asigne el nombre al archivo: 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. Cree un archivo de parámetros de plantilla llamado: CreateServiceBusPremiumNamespaceParams.json.

    Nota

    Reemplace los siguientes valores:

    • <ServiceBusNamespaceName>: nombre del espacio de nombres de Service Bus.
    • <Location>: ubicación del espacio de nombres de Service Bus.
    {
       "$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. Ejecute el siguiente comando de PowerShell para implementar la plantilla y crear un espacio de nombres de Service Bus. A continuación, recupere el identificador del espacio de nombres de Service Bus para usarlo más adelante. Antes de ejecutar el comando, reemplace {MyRG} por el nombre del grupo de recursos.

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

Concesión de acceso al almacén de claves a la identidad del espacio de nombres de Service Bus

  1. Ejecute el siguiente comando para crear un almacén de claves con las características protección de purga y eliminación temporal habilitadas.

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName}  -Location "{location}" -EnableSoftDelete -EnablePurgeProtection    
    

    O BIEN

    Ejecute el siguiente comando para actualizar un almacén de claves existente. Antes de ejecutar el comando, especifique valores para los nombres de grupo de recursos y almacén de claves.

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force
    
  2. Establezca la directiva de acceso del almacén de claves para que la identidad administrada del espacio de nombres de Service Bus pueda acceder al valor de la clave del almacén de claves. Use el identificador del espacio de nombres de Service Bus de la sección anterior.

    $identity = (Get-AzureRmResource -ResourceId $ServiceBusNamespaceId -ExpandProperties).Identity
    
    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $identity.PrincipalId -PermissionsToKeys get,wrapKey,unwrapKey,list
    

Cifrado de datos en el espacio de nombres de Service Bus con la clave administrada por el cliente desde el almacén de claves

Hasta el momento ha realizado los pasos siguientes:

  1. Ha creado un espacio de nombres premium con una identidad administrada.
  2. Cree un almacén de claves y conceda a la identidad administrada acceso al almacén de claves.

En este paso, actualiza el espacio de nombres de Service Bus con la información del almacén de claves.

  1. Cree un archivo JSON denominado UpdateServiceBusNamespaceWithEncryption.json con el siguiente contenido:

    {
       "$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. Cree un archivo de parámetros de plantilla: UpdateServiceBusNamespaceWithEncryptionParams.json.

    Nota

    Reemplace los siguientes valores:

    • <ServiceBusNamespaceName>: nombre del espacio de nombres de Service Bus.
    • <Location>: ubicación del espacio de nombres de Service Bus.
    • <KeyVaultName>: nombre del almacén de claves.
    • <KeyName>: nombre de la clave del almacén de claves.
    {
       "$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. Ejecute el siguiente comando de PowerShell para implementar la plantilla de Resource Manager. Antes de ejecutar el comando, reemplace {MyRG} por el nombre del grupo de recursos.

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

Cifrado mediante identidades asignadas por el usuario (plantilla)

  1. Cree una identidad asignada por el usuario.
  2. Cree un almacén de claves y conceda acceso a este a la identidad asignada por el usuario mediante directivas de acceso.
  3. Cree un espacio de nombres de Service Bus prémium con la identidad administrada asignada por el usuario y la información del almacén de claves.

Creación de una identidad asignada por el usuario

Siga las instrucciones de Crear una identidad administrada asignada por el usuario para crear una identidad asignada por el usuario. También puede crear una identidad asignada por el usuario mediante la CLI, PowerShell, la plantilla de Azure Resource Manager y REST.

Nota

A un espacio de nombres se le pueden asignar hasta 4 identidades de usuario. Estas asociaciones se eliminan cuando se elimina el espacio de nombres o cuando identity -> type en la plantilla pasa a None.

Creación de un almacén de claves y concesión de acceso a la identidad asignada por el usuario

  1. Ejecute el siguiente comando para crear un almacén de claves con las características protección de purga y eliminación temporal habilitadas.

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName} -Location "{location}" -EnableSoftDelete -EnablePurgeProtection           
    

    O BIEN

    Ejecute el siguiente comando para actualizar un almacén de claves existente. Antes de ejecutar el comando, especifique valores para los nombres de grupo de recursos y almacén de claves.

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force            
    
  2. Obtenga el identificador de la entidad de servicio para la identidad del usuario mediante el siguiente comando de PowerShell. En el ejemplo, ud1 es la identidad asignada por el usuario que se usará para el cifrado.

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  3. Conceda a la identidad asignada por el usuario acceso al almacén de claves mediante la asignación de una directiva de acceso.

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

    Nota

    Puede agregar hasta tres claves, pero la identidad del usuario usada para el cifrado debe ser la misma para todas ellas. Actualmente, solo se admite una identidad de cifrado única.

Creación de un espacio de nombres de Service Bus prémium con la identidad del usuario y la información del almacén de claves

En esta sección se proporciona un ejemplo que muestra cómo realizar las siguientes tareas mediante una plantilla de Azure Resource Manager.

  • Asigne una identidad administrada por el usuario a un espacio de nombres de Service Bus.

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  • Habilite el cifrado en el espacio de nombres; para ello, especifique una clave del almacén de claves y la identidad administrada por el usuario para acceder a ella.

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  1. Cree un archivo JSON denominado CreateServiceBusNamespaceWithUserIdentityAndEncryption.json con el siguiente contenido:

    {
       "$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]"
                            }
                        }
                   ]
                }
             }
          }
       ]
    }        
    
  2. Cree un archivo de parámetros de plantilla: 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>"
            }
         }
       }
    }
    

    En el archivo de parámetros, reemplace los marcadores de posición por los valores adecuados.

    Marcador de posición value
    <ServiceBusNamespaceName> Nombre del espacio de nombres de Service Bus.
    <Location> Ubicación donde desea crear el espacio de nombres.
    <KeyVaultName> Nombre del almacén de claves.
    <KeyName> Nombre de la clave del almacén de claves.
    <AZURE SUBSCRIPTION ID> Su identificador de suscripción de Azure.
    <RESOURCE GROUP NAME> Grupo de recursos de la identidad administrada por el usuario.
    <USER MANAGED IDENTITY NAME> Nombre de la identidad administrada por el usuario.
  3. Ejecute el siguiente comando de PowerShell para implementar la plantilla de Resource Manager. Antes de ejecutar el comando, reemplace {MyRG} por el nombre del grupo de recursos.

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

Uso de identidades asignadas por el usuario y por el sistema

Un espacio de nombres puede tener identidades asignadas por el sistema y por el usuario de manera simultánea. En este caso, la propiedad type debe ser SystemAssigned, UserAssigned como se muestra en el ejemplo siguiente.

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

En este escenario, puede elegir la identidad asignada por el sistema o la asignada por el usuario para cifrar los datos en reposo.

En la plantilla de Resource Manager, si no especifica un atributo identity, se usará la identidad administrada por el sistema. Este es un ejemplo de fragmento de código.

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

Consulte el ejemplo siguiente para usar la identidad administrada por el usuario para el cifrado. Observe que el atributo identity se establece en la identidad administrada por el usuario.

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

Habilitación del cifrado (doble) de la infraestructura de los datos

Si necesita una mayor garantía de que los datos están protegidos, puede habilitar el cifrado de nivel de infraestructura, también conocido como cifrado doble.

Cuando se habilita el cifrado de infraestructura, los datos de Azure Service Bus se cifran dos veces, una vez en el nivel de servicio y otra en el nivel de infraestructura, con dos algoritmos de cifrado y dos claves diferentes. Por tanto, el cifrado de infraestructura de los datos de Azure Service Bus sirve de protección en caso de que uno de los algoritmos de cifrado o las claves puedan estar en peligro.

Puede habilitar el cifrado de infraestructura mediante la actualización de la plantilla de Azure Resource Manager con la propiedad requireInfrastructureEncryption en el anterior archivo UpdateServiceBusNamespaceWithEncryption.json, como se muestra a continuación.

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

Rotación, revocación y almacenamiento en caché de las claves

Rotación de las claves de cifrado

Puede rotar la clave en el almacén de claves mediante el mecanismo de rotación de los Azure Key Vault. También es posible establecer fechas de activación y expiración para automatizar la rotación de claves. El servicio Service Bus detecta nuevas versiones de clave y comienza a usarlas automáticamente.

Revocación del acceso a las claves

Al revocar el acceso a las claves de cifrado, no se purgan los datos de Service Bus. Sin embargo, no se podrá acceder a los datos desde el espacio de nombres de Service Bus. Puede revocar la clave de cifrado mediante la directiva de acceso o eliminando la clave. Obtenga más información sobre las directivas de acceso y la protección del almacén de claves en Protección del acceso a un almacén de claves.

Una vez revocada la clave de cifrado, el servicio Service Bus en el espacio de nombres cifrado deja de ser operativo. Si el acceso a la clave está habilitado o si se ha restaurado la clave eliminada, el servicio Service Bus selecciona la clave para que pueda acceder a los datos desde el espacio de nombres de Service Bus cifrado.

Almacenamiento en caché de las claves

La instancia de Service Bus sondea sus claves de cifrado enumeradas cada cinco minutos. Luego, las almacena en caché y las usa hasta el siguiente sondeo, que tiene lugar al cabo de cinco minutos. Siempre que haya al menos una clave disponible, se puede acceder a las colas y los temas. Si no se puede acceder a todas las claves enumeradas cuando se sondean, todas las colas y temas dejan de estar disponibles.

A continuación tiene más detalles:

  • Cada cinco minutos, el servicio Service Bus sondea todas las claves administradas por el cliente que se enumeran en el registro del espacio de nombres:
    • Si se ha rotado una clave, el registro se actualiza con la nueva clave.
    • Si se ha revocado una clave, la clave se quita del registro.
    • Si todas las claves se han revocado, el estado de cifrado del espacio de nombres se establece en Revocado. No se podrá acceder a los datos desde el espacio de nombres de Service Bus.

Consideraciones al usar la recuperación ante desastres geográfica

Recuperación ante desastres geográfica: cifrado con identidades asignadas por el sistema

Para habilitar el cifrado de la clave administrada por Microsoft con una clave administrada por el cliente, se configura una directiva de acceso para la identidad administrada asignada por el sistema en la instancia especificada de Azure Key Vault. Este paso garantiza el acceso controlado al almacén de claves de Azure desde el espacio de nombres de Azure Service Bus. Para ello, siga estos pasos:

  • Si la recuperación ante desastres geográfica ya está habilitada para el espacio de nombres de Service Bus y desea habilitar la clave administrada por el cliente, siga estos pasos
    • Interrumpa el emparejamiento.
    • Configure la directiva de acceso para la identidad administrada asignada por el sistema de los espacios de nombres principal y secundario en el almacén de claves.
    • Configure el cifrado en el espacio de nombres principal.
    • Vuelva a emparejar los espacios de nombres principal y secundario.
  • Si desea habilitar la recuperación ante desastres geográfica en un espacio de nombres de Service Bus en el que la clave administrada por el cliente ya está configurada, siga estos pasos:
    • Configure la directiva de acceso para la identidad administrada del espacio de nombres secundario en el almacén de claves.
    • Empareje los espacios de nombres principal y secundario.

Recuperación ante desastres geográfica: cifrado con identidades asignadas por el usuario

Estas son algunas recomendaciones:

  1. Cree una identidad administrada y asígnele permisos de Key Vault.
  2. Agregue la identidad como identidad asignada por el usuario y habilite el cifrado con la identidad en ambos espacios de nombres.
  3. Empareje los espacios de nombres.

Condiciones para habilitar la recuperación ante desastres geográfica y el cifrado con identidades asignadas por el usuario:

  1. El espacio de nombres secundario ya debe tener el cifrado habilitado con una identidad asignada por el usuario si se va a emparejar con un espacio de nombres principal que tenga el cifrado habilitado.
  2. No se puede habilitar el cifrado en un espacio de nombres principal ya emparejado, aunque el secundario tenga una identidad asignada por el usuario asociada con él.

Solución de problemas

Síntoma

Aparece un error que indica que el espacio de nombres de Service Bus está deshabilitado porque la clave de cifrado ya no es válida.

Causa

Puede que esté usando resource_id o version, que vincula a una versión específica de la clave, que podría haber expirado. Si se proporciona una versión específica, Service Bus usará esa versión de la clave, incluso si esta se girase.

Resolución

Use resource__versionless_id o versionless_id en lugar de usar resource_id o version.

Pasos siguientes

Vea los artículos siguientes: