Configurar chaves gerenciadas pelo cliente para criptografar dados do Barramento de Serviço do Azure em repouso

O Azure Service Bus Premium fornece criptografia de dados em repouso com a Criptografia do Serviço de Armazenamento do Azure (Azure SSE). O Service Bus Premium usa o Armazenamento do Azure para armazenar os dados. Todos os dados armazenados com o Armazenamento do Azure são criptografados usando chaves gerenciadas pela Microsoft. Se você usar sua própria chave (também conhecida como Bring Your Own Key (BYOK) ou chave gerenciada pelo cliente), os dados ainda serão criptografados usando a chave gerenciada pela Microsoft, mas, além disso, a chave gerenciada pela Microsoft será criptografada usando a chave gerenciada pelo cliente. Esse recurso permite criar, girar, desabilitar e revogar o acesso a chaves gerenciadas pelo cliente que são usadas para criptografar chaves gerenciadas pela Microsoft. Habilitar o recurso BYOK é um processo de configuração único em seu namespace.

Há algumas advertências à chave gerenciada pelo cliente para criptografia do lado do serviço.

  • Esse recurso é suportado pela camada Premium do Azure Service Bus. Ele não pode ser habilitado para namespaces do Service Bus de camada padrão.
  • A criptografia só pode ser habilitada para namespaces novos ou vazios. Se o namespace contiver filas ou tópicos, a operação de criptografia falhará.

Você pode usar o Azure Key Vault para gerenciar suas chaves e auditar seu uso de chaves. Você pode criar suas próprias chaves e armazená-las em um cofre de chaves ou pode usar as APIs do Cofre de Chaves do Azure para gerar chaves. Para obter mais informações sobre o Azure Key Vault, consulte O que é o Azure Key Vault?

Habilitar chaves gerenciadas pelo cliente (portal do Azure)

Para habilitar chaves gerenciadas pelo cliente no portal do Azure, siga estas etapas:

  1. Navegue até o namespace Premium do Service Bus.

  2. Na página Configurações do namespace do Service Bus, selecione Criptografia.

  3. Selecione a criptografia de chave gerenciada pelo cliente em repouso, conforme mostrado na imagem a seguir.

    Enable customer managed key

Configurar um cofre de chaves com chaves

Depois de habilitar as chaves gerenciadas pelo cliente, você precisa associar a chave gerenciada pelo cliente ao seu namespace do Barramento de Serviço do Azure. O Service Bus suporta apenas o Azure Key Vault. Se você habilitar a opção Criptografia com chave gerenciada pelo cliente na seção anterior, precisará ter a chave importada para o Cofre de Chaves do Azure. Além disso, as chaves devem ter Soft Delete e Do Not Purge configuradas para a chave. Essas configurações podem ser definidas usando PowerShell ou CLI.

  1. Para criar um novo cofre de chaves, siga o Guia de início rápido do Cofre de Chaves do Azure. Para obter mais informações sobre como importar chaves existentes, consulte Sobre chaves, segredos e certificados.

    Importante

    Usar chaves gerenciadas pelo cliente com o Barramento de Serviço do Azure requer que o cofre de chaves tenha duas propriedades necessárias configuradas. São eles: Soft Delete e Do Not Purge. A propriedade Soft Delete é habilitada por padrão quando você cria um novo cofre de chaves no portal do Azure, enquanto a Proteção contra Limpeza é opcional, portanto, certifique-se de selecioná-la ao criar o Cofre da Chave. Além disso, se precisar habilitar essas propriedades em um cofre de chaves existente, use o PowerShell ou a CLI do Azure.

  2. Para ativar a proteção de exclusão suave e limpeza ao criar um cofre, use o 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 adicionar proteção contra limpeza a um cofre existente (que já tenha a exclusão suave habilitada), use o comando az keyvault update .

    az keyvault update --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --enable-purge-protection true
    
  4. Crie chaves seguindo estas etapas:

    1. Para criar uma nova chave, selecione Gerar/Importar no menu Chaves em Configurações.

      Select Generate/Import button

    2. Defina Opções para Gerar e dê um nome à chave.

      Create a key

    3. Agora você pode selecionar essa chave para associar ao namespace do Service Bus para criptografia na lista suspensa.

      Select key from key vault

      Nota

      Para redundância, você pode adicionar até 3 chaves. Caso uma das chaves tenha expirado ou não esteja acessível, as outras chaves serão usadas para criptografia.

    4. Preencha os detalhes da chave e clique em Selecionar. Isso permite a criptografia da chave gerenciada pela Microsoft com sua chave (chave gerenciada pelo cliente).

    Importante

    Se você estiver procurando usar a chave gerenciada pelo cliente junto com a recuperação de desastres geográficos, consulte esta seção.

    Para habilitar a criptografia de chave gerenciada pela Microsoft com uma chave gerenciada pelo cliente, uma política de acesso é configurada para a identidade gerenciada do Service Bus no Azure KeyVault especificado. Isso garante acesso controlado ao Azure KeyVault a partir do namespace do Barramento de Serviço do Azure.

    Devido a isso:

    • Se a recuperação de desastres geográficos já estiver habilitada para o namespace do Service Bus e você estiver procurando habilitar a chave gerenciada pelo cliente, então

      • Quebre o emparelhamento
      • Configure a política de acesso para a identidade gerenciada para os namespaces primário e secundário para o cofre de chaves.
      • Configure a criptografia no namespace principal.
      • Emparelhe novamente os namespaces primário e secundário.
    • Se você estiver procurando habilitar o Geo-DR em um namespace do Service Bus onde a chave gerenciada pelo cliente já está configurada, então -

      • Configure a política de acesso para a identidade gerenciada do namespace secundário ao cofre de chaves.
      • Emparelhe os namespaces primário e secundário.
    • Uma vez emparelhado, o namespace secundário usará o cofre de chaves configurado para o namespace primário. Se o cofre de chaves para ambos os namespaces for diferente antes do emparelhamento Geo-DR, o usuário deverá delegar uma política de acesso ou função RBAC para a identidade gerenciada do namespace secundário no cofre de chaves associado ao namespace primário.

Identidades geridas

Há dois tipos de identidades gerenciadas que você pode atribuir a um namespace do Service Bus.

  • Sistema atribuído: você pode habilitar uma identidade gerenciada diretamente em um namespace do Service Bus. Quando você habilita uma identidade gerenciada atribuída ao sistema, uma identidade é criada no Microsoft Entra vinculada ao ciclo de vida desse namespace do Service Bus. Portanto, quando o namespace é excluído, o Azure exclui automaticamente a identidade para você. Por design, somente esse recurso do Azure (namespace) pode usar essa identidade para solicitar tokens do Microsoft Entra ID.

  • Atribuído pelo usuário: você também pode criar uma identidade gerenciada como um recurso autônomo do Azure, que é chamado de identidade atribuída pelo usuário. Você pode criar uma identidade gerenciada atribuída pelo usuário e atribuí-la a um ou mais namespaces do Service Bus. Quando você usa identidades gerenciadas atribuídas pelo usuário, a identidade é gerenciada separadamente dos recursos que a usam. Eles não estão vinculados ao ciclo de vida do namespace. Você pode excluir explicitamente uma identidade atribuída pelo usuário quando não precisar mais dela.

    Para obter mais informações, veja O que são identidades geridas para os recursos do Azure?.

Criptografar usando identidades atribuídas ao sistema (modelo)

Esta seção mostra como executar as seguintes tarefas:

  1. Crie um namespace premium do Service Bus com uma identidade de serviço gerenciado.
  2. Crie um cofre de chaves e conceda à identidade do serviço acesso ao cofre de chaves.
  3. Atualize o namespace do Service Bus com as informações do cofre de chaves (chave/valor).

Criar um namespace premium do Service Bus com identidade de serviço gerenciado

Esta seção mostra como criar um namespace do Barramento de Serviço do Azure com identidade de serviço gerenciado usando um modelo do Azure Resource Manager e o PowerShell.

  1. Crie um modelo do Azure Resource Manager para criar um namespace de camada premium do Service Bus com uma identidade de serviço gerenciado. Nomeie o arquivo: 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. Crie um arquivo de parâmetro de modelo chamado: CreateServiceBusPremiumNamespaceParams.json.

    Nota

    Substitua os seguintes valores:

    • <ServiceBusNamespaceName> - Nome do namespace do Service Bus
    • <Location> - Localização do seu namespace do 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. Execute o seguinte comando do PowerShell para implantar o modelo e criar um namespace premium do Service Bus. Em seguida, recupere a ID do namespace do Service Bus para usá-lo mais tarde. Substitua {MyRG} pelo nome do grupo de recursos antes de executar o comando.

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

Conceder acesso à identidade do namespace do Service Bus ao cofre de chaves

  1. Execute o seguinte comando para criar um cofre de chaves com proteção contra limpeza e exclusão suave habilitada.

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

    (OU)

    Execute o seguinte comando para atualizar um cofre de chaves existente. Especifique valores para nomes de grupos de recursos e cofres de chaves antes de executar o comando.

    ($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. Defina a política de acesso ao cofre de chaves para que a identidade gerenciada do namespace do Service Bus possa acessar o valor da chave no cofre de chaves. Use a ID do namespace do Service Bus da seção anterior.

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

Criptografar dados no namespace do Service Bus com chave gerenciada pelo cliente do cofre de chaves

Você fez as seguintes etapas até agora:

  1. Criou um namespace premium com uma identidade gerenciada.
  2. Crie um cofre de chaves e conceda à identidade gerenciada acesso ao cofre de chaves.

Nesta etapa, você atualiza o namespace do Service Bus com informações do cofre de chaves.

  1. Crie um arquivo JSON chamado UpdateServiceBusNamespaceWithEncryption.json com o seguinte conteúdo:

    {
       "$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. Crie um arquivo de parâmetro de modelo: UpdateServiceBusNamespaceWithEncryptionParams.json.

    Nota

    Substitua os seguintes valores:

    • <ServiceBusNamespaceName> - Nome do namespace do Service Bus
    • <Location> - Localização do seu namespace do Service Bus
    • <KeyVaultName> - Nome do cofre da sua chave
    • <KeyName> - Nome da chave no cofre da chave
    {
       "$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. Execute o seguinte comando do PowerShell para implantar o modelo do Gerenciador de Recursos. Substitua {MyRG} pelo nome do grupo de recursos antes de executar o comando.

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

Criptografar usando identidades atribuídas pelo usuário (modelo)

  1. Crie uma identidade atribuída pelo usuário.
  2. Crie um cofre de chaves e conceda acesso à identidade atribuída pelo usuário por meio de políticas de acesso.
  3. Crie um namespace premium do Service Bus com a identidade de usuário gerenciada e as informações do cofre de chaves.

Criar uma identidade atribuída pelo utilizador

Siga as instruções do artigo Criar uma identidade gerenciada atribuída pelo usuário para criar uma identidade atribuída pelo usuário. Você também pode criar uma identidade atribuída pelo usuário usando CLI, PowerShell, modelo do Azure Resource Manager e REST.

Nota

Você pode atribuir até 4 identidades de usuário a um namespace. Essas associações são excluídas quando o namespace é excluído ou quando você passa o identity -> type no modelo para None.

Criar um cofre de chaves e conceder acesso à identidade atribuída pelo usuário

  1. Execute o seguinte comando para criar um cofre de chaves com proteção contra limpeza e exclusão suave habilitada.

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

    (OU)

    Execute o seguinte comando para atualizar um cofre de chaves existente. Especifique valores para nomes de grupos de recursos e cofres de chaves antes de executar o comando.

    ($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. Obtenha a ID da entidade de serviço para a identidade do usuário usando o seguinte comando do PowerShell. No exemplo, ud1 é a identidade atribuída pelo usuário a ser usada para criptografia.

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  3. Conceda à identidade atribuída pelo usuário acesso ao cofre de chaves atribuindo uma política de acesso.

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

    Nota

    Você pode adicionar até 3 chaves, mas a identidade do usuário usada para criptografia deve ser a mesma para todas as chaves. Atualmente, apenas uma única identidade de criptografia é suportada.

Criar um namespace premium do Service Bus com informações de identidade do usuário e cofre de chaves

Esta seção fornece um exemplo que mostra como executar as seguintes tarefas usando um modelo do Azure Resource Manager.

  • Atribua uma identidade gerenciada pelo usuário a um namespace do Service Bus.

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  • Habilite a criptografia no namespace especificando uma chave do cofre de chaves e a identidade gerenciada pelo usuário para acessar a chave.

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  1. Crie um arquivo JSON chamado CreateServiceBusNamespaceWithUserIdentityAndEncryption.json com o seguinte conteúdo:

    {
       "$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. Crie um arquivo de parâmetro de modelo: 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>"
            }
         }
       }
    }
    

    No arquivo de parâmetros, substitua espaços reservados por valores apropriados.

    Marcador de Posição valor
    <ServiceBusNamespaceName> Nome do namespace do Service Bus.
    <Location> Local onde você deseja que o namespace seja criado.
    <KeyVaultName> Nome do cofre de chaves.
    <KeyName> Nome da chave no cofre de chaves.
    <AZURE SUBSCRIPTION ID> O seu ID de subscrição do Azure.
    <RESOURCE GROUP NAME> Grupo de recursos da identidade gerenciada pelo usuário.
    <USER MANAGED IDENTITY NAME> Nome da identidade gerenciada pelo usuário.
  3. Execute o seguinte comando do PowerShell para implantar o modelo do Gerenciador de Recursos. Substitua {MyRG} pelo nome do grupo de recursos antes de executar o comando.

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

Usar identidades atribuídas pelo usuário e pelo sistema

Um namespace pode ter identidades atribuídas ao sistema e ao usuário ao mesmo tempo. Neste caso, a propriedade seria SystemAssigned, UserAssigned como mostrado no exemplo a type seguir.

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

Nesse cenário, você pode escolher a identidade atribuída pelo sistema ou a identidade atribuída pelo usuário para criptografar os dados em repouso.

No modelo do Gerenciador de Recursos, se você não especificar um identity atributo, a identidade gerenciada pelo sistema será usada. Aqui está um trecho de exemplo.

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

Consulte o exemplo a seguir para usar a identidade gerenciada pelo usuário para a criptografia. Observe que o identity atributo está definido como a identidade gerenciada pelo usuário.

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

Habilitar criptografia de dados (dupla) de infraestrutura

Se você precisar de um nível mais alto de garantia de que seus dados estão seguros, poderá habilitar a criptografia no nível da infraestrutura, que também é conhecida como criptografia dupla.

Quando a criptografia de infraestrutura está habilitada, os dados no Barramento de Serviço do Azure são criptografados duas vezes, uma no nível de serviço e outra no nível de infraestrutura, usando dois algoritmos de criptografia diferentes e duas chaves diferentes. Assim, a criptografia de infraestrutura dos dados do Barramento de Serviço do Azure protege contra um cenário em que um dos algoritmos ou chaves de criptografia pode ser comprometido.

Você pode habilitar a criptografia de infraestrutura atualizando o modelo do Azure Resource Manager com requireInfrastructureEncryption a propriedade no UpdateServiceBusNamespaceWithEncryption.json acima, conforme mostrado abaixo.

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

Girar, revogar e armazenar em cache chaves

Rodar as chaves de encriptação

Você pode girar sua chave no cofre de chaves usando o mecanismo de rotação dos Cofres de Chaves do Azure. As datas de ativação e expiração também podem ser definidas para automatizar a rotação de chaves. O serviço Service Bus deteta novas versões de chave e começa a usá-las automaticamente.

Revogar o acesso às chaves

Revogar o acesso às chaves de criptografia não limpará os dados do Service Bus. No entanto, os dados não podem ser acessados a partir do namespace do Service Bus. Você pode revogar a chave de criptografia por meio da política de acesso ou excluindo a chave. Saiba mais sobre as políticas de acesso e a proteção do seu cofre de chaves a partir do acesso seguro a um cofre de chaves.

Depois que a chave de criptografia for revogada, o serviço do Service Bus no namespace criptografado ficará inoperante. Se o acesso à chave estiver habilitado ou a chave excluída for restaurada, o serviço do Service Bus selecionará a chave para que você possa acessar os dados do namespace criptografado do Service Bus.

Armazenamento em cache de chaves

A instância do Barramento de Serviço sonda suas chaves de criptografia listadas a cada 5 minutos. Ele armazena em cache e os usa até a próxima votação, que é após 5 minutos. Desde que pelo menos uma chave esteja disponível, filas e tópicos estarão acessíveis. Se todas as chaves listadas estiverem inacessíveis quando ele for pesquisado, todas as filas e tópicos ficarão indisponíveis.

Aqui estão mais detalhes:

  • A cada 5 minutos, o serviço Service Bus sonda todas as chaves gerenciadas pelo cliente listadas no registro do namespace:
    • Se uma chave tiver sido girada, o registro será atualizado com a nova chave.
    • Se uma chave tiver sido revogada, ela será removida do registro.
    • Se todas as chaves tiverem sido revogadas, o status de criptografia do namespace será definido como Revogado. Os dados não podem ser acessados a partir do namespace do Service Bus.

Considerações ao usar a recuperação de desastres geográficos

Recuperação de desastres geográficos - criptografia com identidades atribuídas ao sistema

Para habilitar a criptografia de chave gerenciada pela Microsoft com uma chave gerenciada pelo cliente, uma política de acesso é configurada para uma identidade gerenciada atribuída ao sistema no Azure KeyVault especificado. Esta etapa garante acesso controlado ao Azure KeyVault a partir do namespace do Barramento de Serviço do Azure. Portanto, você precisa seguir estas etapas:

  • Se a recuperação de desastres geográficos já estiver habilitada para o namespace do Service Bus e você estiver procurando habilitar a chave gerenciada pelo cliente, então
    • Quebre o emparelhamento.
    • Configure a política de acesso para a identidade gerenciada atribuída ao sistema para os namespaces primário e secundário para o cofre de chaves.
    • Configure a criptografia no namespace primário.
    • Emparelhe novamente os namespaces primário e secundário.
  • Se você deseja habilitar o Geo-DR em um namespace do Service Bus onde a chave gerenciada pelo cliente já está configurada, siga estas etapas:
    • Configure a política de acesso para a identidade gerenciada do namespace secundário ao cofre de chaves.
    • Emparelhe os namespaces primário e secundário.

Recuperação de desastres geográficos - criptografia com identidades atribuídas pelo usuário

Seguem-se algumas recomendações:

  1. Crie uma identidade gerenciada e atribua permissões do Cofre da Chave à sua identidade gerenciada.
  2. Adicione a identidade como uma identidade atribuída ao usuário e habilite a criptografia com a identidade em ambos os namespaces.
  3. Emparelhar namespaces juntos

Condições para habilitar Geo-DR e criptografia com identidades atribuídas pelo usuário:

  1. O namespace secundário já deve ter a Criptografia habilitada com uma identidade Atribuída pelo Usuário se quiser ser emparelhado com um namespace primário que tenha a Criptografia habilitada.
  2. Não é possível habilitar a criptografia em um primário já emparelhado, mesmo que o secundário tenha uma identidade atribuída pelo usuário associada ao namespace.

Resolver problemas

Sintoma

Você recebe um erro informando que o namespace do Service Bus está desabilitado porque a chave de criptografia não é mais válida.

Causa

Você pode estar usando o resource_id ou version, que vincula a uma versão específica da chave, que pode ter expirado. Se uma versão específica for fornecida, o Service Bus usará essa versão da chave, mesmo que a chave seja girada.

Resolução

Use o resource__versionless_id ou em vez de usar resource_id ouversionless_idversion.

Próximos passos

Consulte os seguintes artigos: