Controle de versão de Blob

Você pode habilitar o controle de versão de armazenamento de Blob para manter automaticamente as versões anteriores de um objeto. Quando o controle de versão de blob está habilitado, você pode acessar versões anteriores de um blob para recuperar seus dados se eles forem modificados ou excluídos.

O controle de versão de Blob faz parte de uma estratégia abrangente de proteção de dados para dados de blob. Para uma proteção ideal para seus dados de blob, a Microsoft recomenda habilitar todos os seguintes recursos de proteção de dados:

  • Controle de versão de Blob, para manter automaticamente as versões anteriores de um blob. Quando o controle de versão de blob está habilitado, você pode restaurar uma versão anterior de um blob para recuperar seus dados se ele for modificado ou excluído erroneamente. Para saber como habilitar o controle de versão de blob, consulte Habilitar e gerenciar o controle de versão de blob.
  • Exclusão suave de contêiner, para restaurar um contêiner que foi excluído. Para saber como habilitar a exclusão suave de contêiner, consulte Habilitar e gerenciar a exclusão suave para contêineres.
  • Exclusão suave de blob, para restaurar um blob, instantâneo ou versão que foi excluída. Para saber como habilitar a exclusão suave de blob, consulte Habilitar e gerenciar a exclusão suave para blobs.

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

Atenção

Depois de habilitar o controle de versão de blob para uma conta de armazenamento, cada operação de gravação em um blob nessa conta resulta na criação de uma nova versão. Por esse motivo, habilitar o controle de versão de blob pode 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, consulte Otimizar custos automatizando as camadas de acesso do Armazenamento de Blobs do Azure.

Como funciona o controle de versão de blob

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

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

Quando você cria um novo 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 nova versão é criada para capturar o estado atualizado, e essa nova 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 diagrama a seguir mostra como as versões são criadas em operações de gravação e como uma versão anterior pode ser promovida para ser a versão atual:

Diagram showing how blob versioning works

As versões de blob são imutáveis. Não é possível modificar o conteúdo ou os metadados de uma versão de blob existente.

Ter um grande número de versões por blob pode aumentar a latência das operações de listagem de blob. A Microsoft recomenda manter menos de 1000 versões por blob. Você pode usar o gerenciamento do ciclo de vida para excluir automaticamente as versões antigas. Para obter mais informações sobre o gerenciamento do ciclo de vida, consulte 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 Blob padrão de uso geral v2, blob de bloco premium e contas de armazenamento de Blob herdadas. Atualmente, não há suporte para contas de armazenamento com um namespace hierárquico habilitado para uso com o Azure Data Lake Storage Gen2.

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

Importante

O controle de versão de Blob não pode ajudá-lo a se recuperar da exclusão acidental de uma conta de armazenamento ou contêiner. Para evitar a exclusão acidental da conta de armazenamento, configure um bloqueio no recurso da conta de armazenamento. Para obter mais informações sobre como bloquear uma conta de armazenamento, consulte Aplicar um bloqueio do Azure Resource Manager a uma conta de armazenamento.

ID da versão

Cada versão de blob é identificada por um ID de versão exclusivo. O valor do ID da versão é o carimbo de data/hora no qual o blob foi atualizado. O ID da versão é atribuído no momento em que a versão é criada.

Você pode executar operações de leitura ou exclusão em uma versão específica de um blob fornecendo sua ID de versão. Se você omitir o ID da versão, a operação atuará em relação à 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 de versão para a versão atual do blob que foi criado pela operação de gravação.

O ID da versão permanece o mesmo 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 blob está ativado, cada operação de gravação em um blob cria uma nova 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 novo blob, o blob resultante será a versão atual do blob. 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 o ID da versão como um valor inteiro simples. Na realidade, o 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.

Diagram showing how write operations affect versioned blobs.

Nota

Um blob que foi criado antes do controle de versão ser habilitado para a conta de armazenamento não tem uma ID de versão. Quando esse blob é modificado, o blob modificado se torna a versão atual e uma versão é criada para salvar o estado do blob antes da atualização. A versão recebe um ID de versão que é o seu tempo de criação.

Quando o controle de versão de blob está habilitado para uma conta de armazenamento, todas as operações de gravação em blobs de bloco acionam a criação de uma nova versão, exceto a operação Put Block .

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

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

Todas as versões de um blob devem 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 primeiro exclua o blob e todas as suas versões.

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

Quando você chama a operação Excluir 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 existentes do blob são preservadas.

O diagrama a seguir mostra o efeito de uma operação de exclusão em um blob versionado:

Diagram showing deletion of versioned blob.

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 suave de 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 suave decorra.

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

Diagram showing re-creation of versioned blob after deletion.

Camadas de acesso

Você pode mover qualquer versão de um blob de bloco, incluindo a versão atual, para uma camada de acesso de blob diferente chamando a operação Definir Camada de Blob . Você pode aproveitar os preços de capacidade mais baixos movendo versões mais antigas de um blob para a camada legal ou de arquivamento. Para obter mais informações, consulte Camadas de acesso Hot, Cool, Cold e Archive para dados de blob.

Para automatizar o processo de mover blobs de bloco 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, consulte Gerenciar o ciclo de vida do armazenamento de Blob do Azure.

Habilitar ou desabilitar o controle de versão de blob

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

A desativação do controle de versão de blob não exclui blobs, versões ou instantâneos existentes. Quando você desativa o controle de versão de blob, todas as versões existentes permanecem acessíveis em sua conta de armazenamento. Nenhuma nova versão é criada posteriormente.

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

Você pode ler ou excluir versões usando o ID de versão depois que o controle de versão for desativado. Você também pode listar as versões de um blob depois que o controle de versão for desativado.

A replicação de objetos depende do controle de versão de blob. Antes de desabilitar o controle de versão de blob, você deve excluir todas as políticas de replicação de objeto na conta. Para obter mais informações sobre replicação de objetos, consulte Replicação de objetos para blobs de bloco.

O diagrama a seguir mostra como modificar um blob após a desativação do controle de versão cria um blob que não é versionado. Todas as versões existentes associadas ao blob persistem.

Diagram showing that modification of a current version after versioning is disabled creates a blob that isn't a version.

Controle de versão de blob e exclusão suave

O controle de versão de blob e a exclusão suave 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, consulte Configuração recomendada de proteção de dados neste artigo e Visão geral da proteção de dados.

Substituindo um blob

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

Excluindo um blob ou versão

Se o controle de versão e a exclusão suave 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 nova versão é criada e nenhum instantâneo excluído por software é criado. O período de retenção de exclusão suave não está em vigor para o blob excluído.

A exclusão suave oferece proteção adicional para excluir versões de blob. Quando você exclui uma versão anterior do blob, essa versão é excluída suavemente. A versão de exclusão suave é preservada até que o período de retenção de exclusão suave termine, momento em que ela é excluída permanentemente.

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

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

Diagram showing deletion of a version with soft delete enabled.

Restaurando uma versão excluída suavemente

Você pode usar a operação Undelete Blob para restaurar versões excluídas por software durante o período de retenção de exclusão suave. A operação Undelete Blob sempre restaura todas as versões excluídas suavemente do blob . Não é possível restaurar apenas uma única versão excluída por software.

A restauração de versões excluídas por software com a operação Undelete Blob não promove nenhuma versão para ser a versão atual. Para restaurar a versão atual, primeiro restaure todas as versões excluídas por software e, em seguida, use a operação Copiar Blob para copiar uma versão anterior para uma nova versão atual.

O diagrama a seguir mostra como restaurar versões de blob excluídas por software com a operação Undelete Blob e como restaurar a versão atual do blob com a operação Copy Blob.

Diagram showing how to restore soft-deleted versions.

Após o período de retenção de exclusão suave ter decorrido, todas as versões de blob excluídas suavemente serão excluídas permanentemente.

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

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

Importante

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

Snapshot 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 é versionado. Se você não puder atualizar seu aplicativo para parar de tirar instantâneos de blobs ao habilitar o controle de versão, seu aplicativo poderá oferecer suporte a instantâneos e versões.

Quando você tira um instantâneo de um blob versionado, uma nova versão é criada ao mesmo tempo em que o instantâneo é criado. Uma nova versão atual também é criada quando um instantâneo é tirado.

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

Diagram showing snapshots of a versioned blob.

Autorizar operações em versões de blob

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

  • Usando o controle de acesso baseado em função do Azure (Azure RBAC) para conceder permissões a uma entidade de segurança do Microsoft Entra. A Microsoft recomenda o uso do Microsoft Entra ID para maior segurança e facilidade de uso. Para obter mais informações sobre como usar o Microsoft Entra ID com operações de blob, consulte Autorizar o acesso a dados no Armazenamento do Azure.
  • Usando uma assinatura de acesso compartilhado (SAS) para delegar acesso a versões de blob. Especifique o ID de versão para o tipo bvde recurso assinado , representando 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, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).
  • Usando as chaves de acesso da conta para autorizar operações em versões de blob com Chave Compartilhada. Para obter mais informações, consulte Autorizar com chave compartilhada.

O controle de versão de Blob foi projetado para proteger seus dados contra exclusão acidental ou maliciosa. Para melhorar a proteção, excluir 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 RBAC do Azure para excluir uma versão de blob

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

Description Operação de serviço de Blob Ação de dados do RBAC do Azure necessária Suporte a funções internas do Azure
Excluindo a versão atual Excluir Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete Contribuidor de Dados de Blobs de Armazenamento
Eliminar uma versão anterior Excluir Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action Proprietário de Dados de Blobs de Armazenamento

Parâmetros de assinatura de acesso compartilhado (SAS)

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

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

Permissão Símbolo URI Operações permitidas
Delete x Exclua uma versão de blob.

Preços e faturação

Habilitar o controle de versão de blob pode resultar em cobranças adicionais de armazenamento de dados para sua conta. Ao projetar seu aplicativo, é importante estar ciente de como esses encargos podem se acumular para que você possa minimizar os custos.

As versões de Blob, como instantâneos de blob, são cobradas na mesma taxa que os dados ativos. A forma como as versões são cobradas depende se você definiu explicitamente a camada para as versões atuais ou anteriores de um blob (ou instantâneos). Para obter mais informações sobre camadas de blob, consulte Camadas de acesso quentes, frias, frias e de arquivamento para dados de blob.

Se você não alterou um blob ou camada de versão, será cobrado por blocos exclusivos de dados nesse blob, suas versões e quaisquer instantâneos que ele possa ter. Para obter mais informações, consulte Faturamento quando a camada de blob não foi definida explicitamente.

Se você alterou uma camada de blob ou versão, será cobrado pelo objeto inteiro, independentemente de o blob e a versão estarem eventualmente na mesma camada novamente. Para obter mais informações, consulte Faturamento quando a camada de blob foi definida explicitamente.

Nota

Habilitar o controle de versão para dados que são frequentemente substituídos pode resultar em maiores cobranças de capacidade de armazenamento e latência durante as operações de listagem. Para atenuar essas preocupações, armazene dados frequentemente substituídos em uma conta de armazenamento separada com controle de versão desativado.

Para obter mais informações sobre detalhes de cobrança para instantâneos de blob, consulte 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 quaisquer versões de um blob, será cobrado por blocos ou páginas exclusivos em todas as versões e por quaisquer instantâneos que ele possa ter. Os dados compartilhados entre versões de blob são cobrados apenas uma vez. Quando um blob é atualizado, os dados na nova versão atual divergem dos dados armazenados em versões anteriores e os dados exclusivos são cobrados por bloco ou página.

Quando você substitui um bloco dentro de um blob de bloco, esse bloco é posteriormente cobrado como um bloco exclusivo. Isso é verdade mesmo se o bloco tiver o mesmo ID de bloco e os mesmos dados que tem na versão anterior. Depois que o bloqueio for confirmado novamente, ele diverge de sua contraparte na versão anterior e você será cobrado por seus dados. O mesmo vale para uma página em um blob de página que é atualizado com dados idênticos.

O armazenamento de Blob não tem um meio de determinar se dois blocos contêm dados idênticos. Cada bloco carregado e confirmado é tratado como exclusivo, mesmo que tenha os mesmos dados e o mesmo ID de bloco. Como as cobranças se acumulam para blocos exclusivos, é importante ter em mente que atualizar um blob quando o controle de versão estiver habilitado resultará em blocos exclusivos adicionais e cobranças adicionais.

Quando o controle de versão de blob estiver habilitado, chame operações de atualização em blobs de bloco para que eles atualizem o menor número possível de blocos. As operações de gravação que permitem um controle refinado sobre 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 levar a cobranças adicionais.

Os cenários a seguir demonstram como as cobranças se acumulam para um blob de bloco e suas versões quando a camada de blob não foi 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, as cobranças são incorridas apenas para os blocos exclusivos 1, 2 e 3.

Diagram 1 showing billing for unique blocks in base blob and previous version.

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 o mesmo ID, ele não é o mesmo que o bloco 3 na versão anterior. Como resultado, a conta é cobrada por quatro blocos.

Diagram 2 showing billing for unique blocks in base blob and previous version.

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.

Diagram 3 showing billing for unique blocks in base blob and previous version.

Cenário 4

No cenário 4, a versão atual foi completamente 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 pode ocorrer se você estiver gravando em um blob com a operação Put Blob, porque ele substitui todo o conteúdo do blob .

Diagram 4 showing billing for unique blocks in base blob and previous version.

Faturamento quando a camada de blob foi definida explicitamente

Se você tiver definido explicitamente a camada de blob para um blob ou versão (ou instantâneo), será cobrado pelo comprimento total do conteúdo do objeto na nova camada, independentemente de ele compartilhar blocos com um objeto na camada original. Você também será cobrado pelo tamanho total do conteúdo da versão mais antiga da camada original. Quaisquer outras versões anteriores ou instantâneos que permaneçam na camada original são cobrados por blocos exclusivos que podem ser compartilhados, conforme descrito em Faturamento quando a camada de blob não tiver sido definida explicitamente.

Movendo 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 de blob é definida... Então você é cobrado por...
Explicitamente em uma versão, seja atual ou anterior A extensão total do conteúdo dessa versão. As versões que não têm uma camada explicitamente definida são cobradas apenas por blocos exclusivos.1
Para arquivar A extensão total do conteúdo de todas as versões e instantâneos..

1 Se houver outras versões anteriores ou snapshots que não tenham sido movidos de sua camada original, essas versões ou snapshots serão cobrados com base no número de blocos exclusivos que contêm, conforme descrito em Faturamento 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 versionado é movido para uma camada diferente.

Diagram showing how objects are billed when a versioned blob is explicitly tiered.

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

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

Excluindo um blob quando a exclusão suave está habilitada

Quando a exclusão suave de blob está habilitada, todas as entidades excluídas por software são cobradas em todo o comprimento do conteúdo. Se você excluir ou substituir uma versão atual que teve sua camada definida explicitamente, todas as versões anteriores do blob excluído por software serão cobradas em todo o comprimento do conteúdo. Para obter mais informações sobre como o controle de versão de blob e a exclusão suave funcionam juntos, consulte Controle de versão de blob e exclusão suave.

Suporte de funcionalidades

O suporte para esse recurso pode ser afetado pela habilitação do Data Lake Storage Gen2, do protocolo NFS (Network File System) 3.0 ou do SSH File Transfer Protocol (SFTP). Se você habilitou qualquer um desses recursos, consulte Suporte ao recurso de Armazenamento de Blob nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.

Não há suporte para controle de versão para blobs carregados usando APIs do Data Lake Storage Gen2 .

Consulte também