Controle de versão de blobs

Você pode habilitar o controle de versão do Armazenamento de Blobs para manter automaticamente as versões anteriores de um objeto. Quando o controle de versão de blobs estiver habilitado, você poderá acessar versões anteriores de um blob para recuperar os dados, caso eles tenham sido modificados ou excluídos.

O controle de versão de blobs é parte de uma estratégia de proteção de dados abrangente para dados de blob. Para obter uma ótima proteção dos dados de blob, a Microsoft recomenda habilitar todos os seguintes recursos de proteção de dados:

  • Controle de versão de blob, para preservar automaticamente as versões anteriores de um blob. Quando o controle de versão de blobs estiver habilitado, você poderá restaurar uma versão anterior de um blob para recuperar os seus dados, caso eles tenham sido modificados ou excluídos por engano. Para saber como habilitar o controle de versão de blobs, confira Habilitar e gerenciar o controle de versão de blobs.
  • Exclusão temporária de contêiner, para restaurar um contêiner que foi excluído. Para saber como habilitar a exclusão temporária de contêiner, confira Habilitar e gerenciar a exclusão temporária de contêineres.
  • A exclusão temporária de blob, para restaurar um blob, um instantâneo ou uma versão que tenha sido excluído. Para saber como habilitar a exclusão temporária de blob, confira Habilitar e gerenciar a exclusão temporária de blobs.

Para saber mais sobre as recomendações da Microsoft para proteção de dados, confira Visão geral da proteção de dados.

Cuidado

Depois que você habilitar o controle de versão do blob para uma conta de armazenamento, todas as operações de gravação em um blob nessa conta resultarão na criação de uma versão. Por esse motivo, a habilitação do controle de versão de blob poderá resultar em custos adicionais. Para minimizar os custos, use uma política de gerenciamento do ciclo de vida para excluir automaticamente as versões antigas. Para obter mais informações sobre o gerenciamento do ciclo de vida, confira Otimizar custos automatizando as camadas de acesso do Armazenamento de Blobs do Azure.

Como o controle de versão de blobs funciona

Uma versão captura o estado de um blob em um determinado momento. Cada versão é identificada com uma ID de versão. Quando o controle de versão de blob está habilitado para uma conta de armazenamento, o Armazenamento do Azure cria automaticamente uma versão com uma ID exclusiva quando um blob é criado pela primeira vez e sempre que ele é modificado posteriormente.

Uma ID de versão pode identificar a versão atual ou uma versão anterior. Um blob pode ter apenas uma versão atual por vez.

Quando você cria um blob, existe uma única versão e essa versão é a versão atual. Quando você modifica um blob existente, a versão atual se torna uma versão anterior. Uma versão é criada para capturar o estado atualizado e essa versão é a versão atual. Quando você exclui um blob, a versão atual do blob se torna uma versão anterior e não há mais uma versão atual. Todas as versões anteriores do blob persistem.

O seguinte diagrama mostra como as versões são criadas em operações de gravação e como uma versão anterior pode ser promovida para a versão atual:

Diagrama mostrando como funciona o controle de versão de blobs

As versões do blob são imutáveis. Você não pode modificar o conteúdo nem os metadados de uma versão de blob existente.

Ter várias versões por blob pode aumentar a latência das operações de listagem de blobs. A Microsoft recomenda manter menos de mil versões por blob. Você pode usar o gerenciamento do ciclo de vida para excluir automaticamente versões antigas. Para obter mais informações sobre o gerenciamento do ciclo de vida, confira Otimizar custos automatizando as camadas de acesso do Armazenamento de Blobs do Azure.

O controle de versão de blob está disponível para contas de armazenamento de Blobs herdadas, de v2 de uso geral padrão e de blob de blocos premium. As contas de armazenamento com um namespace hierárquico habilitado para uso com o Azure Data Lake Storage Gen2 não têm suporte no momento.

A versão 2019-10-10 e superior da API REST do Armazenamento do Azure dá suporte ao controle de versão de blobs.

Importante

O controle de versão de blobs não ajuda você a se recuperar da exclusão acidental de uma conta de armazenamento ou de um contêiner. Para evitar a exclusão acidental da conta de armazenamento, configure um bloqueio no recurso da conta de armazenamento. Para saber mais sobre como bloquear uma conta de armazenamento, confira Aplicar um bloqueio do Azure Resource Manager a uma conta de armazenamento.

ID da versão

Cada versão de blob é identificada por uma ID de versão exclusiva. O valor da ID de versão é o carimbo de data/hora em que o blob foi atualizado. A ID da versão é atribuída quando a versão é criada.

Você pode executar operações de leitura ou de exclusão em uma versão específica de um blob fornecendo a ID de versão dele. Se você omitir a ID da versão, a operação atuará na versão atual.

Quando você chama uma operação de gravação para criar ou modificar um blob, o Armazenamento do Azure retorna o cabeçalho x-ms-version-id na resposta. Esse cabeçalho contém a ID da versão atual do blob que foi criado pela operação de gravação.

A ID da versão permanece a mesma durante o tempo de vida da versão.

Controle de versão em operações de gravação

Quando o controle de versão de blobs está ativado, todas as operações de gravação em um blob criam uma versão. As operações de gravação incluem Put Blob, Put Block List, Copy Blob e Set Blob Metadata.

Se a operação de gravação criar um blob, o blob resultante será a versão atual dele. Se a operação de gravação modificar um blob existente, a versão atual se tornará uma versão anterior e uma nova versão atual será criada para capturar o blob atualizado.

O diagrama a seguir mostra como as operações de gravação afetam as versões de blob. Para simplificar, os diagramas mostrados neste artigo exibem a ID da versão como um valor inteiro simples. Na realidade, a ID da versão é um carimbo de data/hora. A versão atual é mostrada em azul e as versões anteriores são mostradas em cinza.

Diagrama mostrando como as operações de gravação afetam os blobs com controle de versão.

Observação

Um blob que foi criado antes do controle de versão estar habilitado para a conta de armazenamento não tem uma ID de versão. Quando esse blob é modificado, o blob modificado torna-se a versão atual e uma versão é criada para salvar o estado do blob antes da atualização. A versão é atribuída a uma ID de versão equivalente à hora de criação.

Quando o controle de versão de blobs está habilitado em uma conta de armazenamento, todas as operações de gravação em blobs de blocos disparam a criação de uma versão, com exceção da operação Put Block.

Para blobs de páginas e blobs de acréscimo, apenas um subconjunto de operações de gravação disparam a criação de uma versão. Essas operações incluem:

As operações a seguir não disparam a criação de uma versão. Para capturar as alterações dessas operações, crie um instantâneo manual:

Todas as versões de um blob precisam ser do mesmo tipo de blob. Se um blob tiver versões anteriores, você não poderá substituir um blob de um tipo por outro tipo, a menos que exclua primeiro o blob e todas as respectivas versões.

Controle de versão em operações de exclusão

Quando você chama a operação Delete Blob sem especificar uma ID de versão, a versão atual se torna uma versão anterior e não há mais uma versão atual. Todas as versões anteriores do blob são preservadas.

O seguinte diagrama mostra o efeito de uma operação de exclusão em um blob com controle de versão:

Diagrama mostrando a exclusão de blob com controle de versão.

Para excluir uma versão específica de um blob, forneça a ID dessa versão na operação de exclusão. Se a exclusão temporária do blob também estiver habilitada para a conta de armazenamento, a versão será mantida no sistema até que o período de retenção de exclusão temporária termine.

Gravar novos dados no blob cria uma versão atual do blob. As versões existentes não são afetadas, conforme mostrado no diagrama a seguir.

Diagrama mostrando a recriação do blob com controle de versão após a exclusão.

Níveis de acesso

Você pode mover qualquer versão de um blob de blocos, incluindo a versão atual, para uma camada de acesso de blob diferente chamando a operação Set Blob Tier. Você pode aproveitar preços de capacidade mais baixos movendo versões mais antigas de um blob para a camada fria ou de arquivos. Para obter mais informações, confira Camadas de acesso frequente, esporádico e aos arquivos de dados de blob.

Para automatizar o processo de mover os blobs de blocos para a camada apropriada, use o gerenciamento do ciclo de vida do blob. Para obter mais informações sobre o gerenciamento do ciclo de vida, confira Gerenciar o ciclo de vida do Armazenamento de Blobs do Azure.

Habilitar ou desabilitar o controle de versão de blobs

Para saber como habilitar ou desabilitar o controle de versão de blobs, confira Habilitar e gerenciar o controle de versão de blobs.

Desabilitar o controle de versão de blobs não exclui blobs, versões ou instantâneos existentes. Quando você desliga o controle de versão de blob, todas as versões existentes permanecem acessíveis na sua conta de armazenamento. Nenhuma versão é criada subsequentemente.

Depois que o controle de versão é desabilitado, modificar a versão atual cria um blob que não é uma versão. Todas as atualizações subsequentes para o blob substituirão os dados sem salvar o estado anterior. Todas as versões existentes persistem como versões anteriores.

Você pode ler ou excluir versões usando a ID de versão após desabilitar o controle de versão. Você também poderá listar as versões de um blob depois que o controle de versão for desabilitado.

O diagrama a seguir mostra como desabilitar a modificação de um blob após o controle de versão cria um blob sem controle de versão. Todas as versões existentes associadas ao blob são persistidas.

Diagrama mostrando que modificar uma versão atual após o controle de versão ser desabilitado cria um blob que não é uma versão.

Controle de versão e exclusão temporária do blob

O controle de versão e a exclusão temporária de blob fazem parte da configuração de proteção de dados recomendada para contas de armazenamento. Para obter mais informações sobre as recomendações da Microsoft para proteção de dados, confira Configuração de proteção de dados recomendada neste artigo, bem como Visão geral da proteção de dados.

Como substituir um blob

Se o controle de versão de blob e a exclusão temporária de blob estiverem habilitados em uma conta de armazenamento, a substituição de um blob criará automaticamente uma versão. A nova versão não é excluída de maneira temporária e não é removida quando o período de retenção de exclusão temporária expira. Nenhum instantâneo excluído de maneira temporária é criado.

Como excluir um blob ou uma versão

Se o controle de versão e a exclusão temporária estiverem habilitados para uma conta de armazenamento, quando você excluir um blob, a versão atual do blob se tornará uma versão anterior. Nenhuma versão e nenhum instantâneo excluído de maneira temporária são criados. O período de retenção de exclusão temporária não está em vigor para o blob excluído.

A exclusão temporária oferece proteção adicional para excluir versões de blobs. Quando você exclui uma versão anterior do blob, a versão é excluída de maneira temporária. A versão excluída de maneira temporária é preservada até que o período de retenção de exclusão temporária termine. Após isso, ela é excluída permanentemente.

Para excluir uma versão anterior de um blob, chame a operação Delete Blob e especifique a ID da versão.

O diagrama a seguir mostra o que acontece quando você exclui um blob ou uma versão de blob.

Diagrama mostrando a exclusão de uma versão com exclusão temporária habilitada.

Como restaurar uma versão excluída de maneira temporária

Você pode usar a operação Undelete Blob para restaurar versões excluídas de maneira temporária durante o período de retenção de exclusão temporária. A operação Undelete Blob sempre restaura todas as versões com exclusão temporária do blob. Não é possível restaurar apenas uma versão com exclusão temporária.

A restauração de versões com exclusão temporária com a operação Undelete Blob não eleva nenhuma versão para a versão atual. Para restaurar a versão atual, primeiro restaure todas as versões excluídas temporariamente e use a operação Copy Blob para copiar uma versão anterior para a versão atual.

O diagrama a seguir mostra como restaurar versões de blob com exclusão temporária com a operação Undelete Blob e como restaurar a versão atual do blob com a operação Copy Blob.

Diagrama mostrando como restaurar versões com exclusão temporária.

Depois que o período de retenção de exclusão temporária tiver decorrido, todas as versões de blob excluídas temporariamente serão excluídas permanentemente.

Controle de versão de blobs e instantâneos de blob

Um instantâneo de blob é uma cópia somente leitura de um blob realizado em um momento específico. Instantâneos de blob e versões de blob são semelhantes, mas um instantâneo é criado manualmente por você ou pelo seu aplicativo, enquanto uma versão de blob é criada automaticamente em uma operação de gravação ou de exclusão quando o controle de versão de blobs está habilitado na sua conta de armazenamento.

Importante

A Microsoft recomenda que, depois de habilitar o controle de versão de blob, você também atualize o seu aplicativo para parar de criar instantâneos de blobs de blocos. Se o controle de versão estiver habilitado para a sua conta de armazenamento, todas as atualizações e exclusões de blob de blocos serão capturadas e preservadas por versões. A criação de instantâneos não oferecerá nenhuma proteção adicional para os seus dados de blob de blocos se o controle de versão de blobs estiver habilitado e pode aumentar os custos e a complexidade do aplicativo.

Instantâneo de um blob quando o controle de versão está habilitado

Embora não seja recomendado, você pode tirar um instantâneo de um blob que também tem controle de versão. Se não for possível atualizar o seu aplicativo para interromper a criação instantâneos de blobs ao habilitar o controle de versão, o seu aplicativo poderá ser compatível com instantâneos e versões.

Quando você cria um instantâneo de um blob com controle de versão, uma versão é criada quando o instantâneo é criado. Uma versão atual também é criada quando um instantâneo é criado.

O diagrama a seguir mostra o que acontece quando você cria um instantâneo de um blob com controle de versão. No diagrama, as versões de blob e os instantâneos com a ID de versão 2 e 3 contêm dados idênticos.

Diagrama que mostra instantâneos de um blob com controle de versão.

Autorizar operações em versões de blobs

Você pode autorizar o acesso a versões de blob usando uma das seguintes abordagens:

  • Usando o Azure RBAC (controle de acesso baseado em função do Azure) para conceder permissões a uma entidade de segurança do Azure AD (Azure Active Directory). A Microsoft recomenda usar o Azure AD para maior segurança e facilidade de uso. Para saber mais sobre como usar o Azure AD com operações de blob, confira Autorizar o acesso a dados no Armazenamento do Azure.
  • Usando uma SAS (Assinatura de Acesso Compartilhado) para delegar acesso a versões de blob. Especifique a ID da versão do tipo de recurso assinado bv, que representa uma versão de blob, para criar um token SAS para operações em uma versão específica. Para obter mais informações sobre assinaturas de acesso compartilhado, confira Conceder acesso limitado a recursos de Armazenamento do Azure usando SAS (assinaturas de acesso compartilhado).
  • Usando as chaves de acesso da conta para autorizar operações em versões de blob com a Chave Compartilhada. Para obter mais informações, consulte Autorizar com Chave Compartilhada.

O controle de versão de blobs foi projetado para proteger os seus dados contra exclusão acidental ou mal-intencionada. Para aprimorar a proteção, a exclusão de uma versão de blob requer permissões especiais. As seções a seguir descrevem as permissões necessárias para excluir uma versão de blob.

Ação do Azure RBAC para excluir uma versão de blob

A tabela a seguir mostra quais ações do Azure RBAC dão suporte à exclusão de um blob ou de uma versão de blob.

Descrição Operação do serviço Blob Ação de dados do Azure RBAC necessária Suporte à função interna do Azure
Como excluir a versão atual Delete Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete Colaborador de dados de blob de armazenamento
Como excluir uma versão anterior Delete Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action Proprietário de Dados do Blob de Armazenamento

Parâmetros de SAS (Assinatura de Acesso Compartilhado)

O recurso assinado de uma versão do blob é bv. Para obter mais informações, confira Criar uma SAS de serviço ou Criar uma SAS de delegação de usuário.

A tabela a seguir mostra qual permissão é necessária em uma SAS para excluir uma versão de blob.

Permissão Símbolo de URI Operações permitidas
Excluir x Excluir a versão do blob.

Preços e cobrança

Habilitar o controle de versão de blobs pode resultar em encargos de armazenamento de dados adicionais para a sua conta. Ao projetar o aplicativo, é importante estar ciente de como essas cobranças podem aumentar para que você possa minimizar custos.

As versões de blobs, como instantâneos de blobs, são cobradas com a mesma taxa que os dados ativos. A maneira como as versões são cobradas depende da configuração explícita da camada para as versões atuais ou anteriores de um blob (ou instantâneos). Para saber mais sobre as camadas de blobs, confira Camadas de acesso frequente, esporádico e aos arquivos de dados de blob.

Caso não tenha alterado nenhuma camada de blob ou de versão, você será cobrado por blocos exclusivos de dados nesse blob, nas versões dele e em todos os instantâneos que ele possa ter. Para obter mais informações, confira Cobrança quando a camada de blob não foi definida explicitamente.

Caso tenha alterado uma camada de blob ou de versão, será cobrado pelo objeto inteiro, independentemente de o blob e a versão estarem na mesma camada novamente em algum momento. Para obter mais informações, confira Cobrança quando a camada de blob foi definida explicitamente.

Observação

Habilitar o controle de versão de dados frequentemente substituídos pode resultar em maiores encargos de capacidade de armazenamento e maior latência durante as operações de listagem. Para reduzir essas preocupações, armazene dados frequentemente substituídos em uma conta de armazenamento separada com o controle de versão desabilitado.

Para obter mais informações sobre detalhes de cobrança dos instantâneos de blob, confira Instantâneos de blob.

Cobrança quando a camada de blob não foi definida explicitamente

Se você não tiver definido explicitamente a camada de blob para qualquer versão de um blob, será cobrado por blocos ou páginas exclusivos no blob, em todas as versões e pelos instantâneos que ele possa ter. Os dados compartilhados nas versões de blobs são cobrados apenas uma vez. Quando um blob é atualizado, os dados na nova versão atual divergem dos dados armazenados nas versões anteriores e os dados exclusivos são cobrados por bloco ou página.

Quando você substituir um bloco em um blob de blocos, esse bloco será cobrado subsequentemente como um único bloco. Isso é verdadeiro mesmo que o bloco tenha a mesma ID de bloco e os mesmos dados que ele tem na versão anterior. Após o bloco ser confirmado novamente, ele divergirá da respectiva contraparte na versão anterior e você será cobrado pelos dados. O mesmo se aplica para uma página em um blob de páginas é atualizada com os dados idênticos.

O Armazenamento de Blobs não tem um meio para determinar se dois blocos contêm dados idênticos. Cada bloco que é carregado e confirmado é tratado como exclusivo, mesmo se tiver os mesmos dados e a mesma ID de bloco. Como os encargos se acumulam em blocos exclusivos, é importante ter em mente que a atualização de um blob quando o controle de versão está habilitado resultará em blocos exclusivos adicionais e encargos adicionais.

Quando o controle de versão de blobs está habilitado, chame operações de atualização em blobs de blocos para que eles atualizem o menor número mínimo possível de blocos. As operações de gravação que permitem controle refinado sobre os blocos são Put Block e Put Block List. A operação Put Blob, por outro lado, substitui todo o conteúdo de um blob e, portanto, pode resultar em encargos adicionais.

Os cenários a seguir demonstram como os encargos se acumulam em um blob de blocos e nas versões dele quando a camada de blob não é definida explicitamente.

Cenário 1

No cenário 1, o blob tem uma versão anterior. O blob não foi atualizado desde que a versão foi criada, portanto, são incorridos encargos apenas nos blocos exclusivos 1, 2 e 3.

Diagrama 1 mostrando a cobrança de blocos exclusivos no blob de base e na versão anterior.

Cenário 2

No cenário 2, um bloco (bloco 3 no diagrama) no blob foi atualizado. Embora o bloco atualizado contenha os mesmos dados e a mesma ID, ele não é igual ao bloco 3 na versão anterior. Como resultado, a conta é cobrada por quatro blocos.

Diagrama 2 mostrando a cobrança de blocos exclusivos no blob de base e na versão anterior.

Cenário 3

No cenário 3, o blob foi atualizado, mas a versão não. O bloco 3 foi substituído pelo bloco 4 no blob atual, mas a versão anterior ainda reflete o bloco 3. Como resultado, a conta é cobrada por quatro blocos.

Diagrama 3 mostrando a cobrança de blocos exclusivos no blob de base e na versão anterior.

Cenário 4

No cenário 4, a versão atual foi totalmente atualizada e não contém nenhum dos seus blocos originais. Como resultado, a conta é cobrada por todos os oito blocos exclusivos — quatro na versão atual e quatro combinados nas duas versões anteriores. Esse cenário poderá ocorrer se você estiver gravando em um blob com a operação Put Blob, pois ele substitui todo o conteúdo do blob.

Diagrama 4 mostrando a cobrança de blocos exclusivos no blob de base e na versão anterior.

Cobrança quando a camada de blob foi definida explicitamente

Caso tenha definido explicitamente a camada de blob de um blob ou versão (ou instantâneo), você será cobrado pelo comprimento total do conteúdo do objeto na nova camada, independentemente de o objeto compartilhar blocos com um objeto na camada original. Você também é cobrado pelo comprimento total do conteúdo da versão mais antiga na camada original. Todas as outras versões ou instantâneos anteriores que permanecem na camada original são cobrados por blocos exclusivos que eles podem compartilhar, conforme descrito em Cobrança quando a camada de blob não foi definida explicitamente.

Como mover um blob para uma nova camada

A tabela a seguir descreve o comportamento de cobrança de um blob ou versão quando ele é movido para uma nova camada.

Quando a camada blob é definida... Você será cobrado por...
Explicitamente em uma versão, seja atual ou anterior O tamanho completo do conteúdo dessa versão. As versões que não têm uma camada definida explicitamente são cobradas apenas para blocos exclusivos. 1
Arquivar O tamanho completo do conteúdo de todas as versões e instantâneos. 1.

1Se houver outras versões ou instantâneos anteriores que não foram movidos da camada original, essas versões ou instantâneos serão cobrados com base no número de blocos exclusivos que eles contêm, conforme descrito em Cobrança quando a camada de blob não tiver sido definida explicitamente.

O diagrama a seguir ilustra como os objetos são cobrados quando um blob com versão é movido para uma camada diferente.

Diagrama mostrando como os objetos são cobrados quando um blob com versão é explicitamente colocado em camadas.

A configuração explícita da camada de um blob, versão ou instantâneo não pode ser desfeita. Se você mover um blob para uma nova camada e retorná-lo para a camada original, será cobrado pelo comprimento total do conteúdo do objeto, mesmo que ele tenha compartilhado blocos com outros objetos na camada original.

As operações que definem explicitamente a camada de um blob, versão ou instantâneo incluem:

Como excluir um blob quando a exclusão temporária está habilitada

Quando a exclusão temporária de blob está habilitada, todas as entidades excluídas de forma temporária são cobradas em todo o tamanho do conteúdo. Se você excluir ou substituir uma versão atual com a camada definida explicitamente, todas as versões anteriores do blob excluído de modo temporário serão cobradas pelo comprimento total do conteúdo. Para obter mais informações sobre como o controle de versão de blobs e a exclusão temporária funcionam juntos, confira controle de versão de e exclusão temporária de blob.

Suporte a recursos

O suporte para esse recurso pode ser afetado ao habilitar o Data Lake Storage Gen2, o protocolo NFS (Sistema de Arquivos de Rede) 3.0 ou o protocolo SFTP (Protocolo de Transferência de Arquivo SSH).

Se você tiver habilitado qualquer um desses recursos, consulte o Suporte a recursos de Armazenamento de Blobs nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.

Confira também