Como funciona o Versionamento do S3 - Amazon Simple Storage Service

Como funciona o Versionamento do S3

Você pode usar o versionamento do S3 para manter várias versões de um objeto em um bucket com o intuito de restaurar objetos excluídos ou substituídos acidentalmente. Por exemplo, se você aplicar o versionamento do S3 a um bucket, as seguintes alterações ocorrerão:

  • Se você excluir um objeto em vez de removê-lo permanentemente, o Amazon S3 inserirá um marcador de exclusão, o que se torna a versão atual do objeto. Você pode então restaurar a versão anterior. Para ter mais informações, consulte Excluir versões de objetos de um bucket com versionamento habilitado.

  • Se você substituir um objeto, o Amazon S3 adicionará uma nova versão do objeto no bucket. A versão anterior permanecerá no bucket e se tornará uma versão desatualizada. Você poderá restaurar a versão anterior.

nota

As taxas normais do Amazon S3 se aplicam a cada versão de um objeto armazenado e transferido. Cada versão de um objeto é um objeto inteiro, e não um diff da versão anterior. Assim, se você tiver três versões de um objeto armazenado, será cobrado pelos três objetos.

Cada bucket do S3 que você cria tem um sub-recurso de versionamento associado a ele. (Para obter mais informações, consulte Opções de configuração do bucket.) Por padrão, seu bucket não está habilitado para versionamento e o sub-recurso de versionamento armazena uma configuração vazia de versionamento, como mostrado a seguir.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </VersioningConfiguration>

Para habilitar o versionamento, você pode enviar uma solicitação ao Amazon S3 com uma configuração de versionamento que inclui um status Enabled.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>Enabled</Status> </VersioningConfiguration>

Para suspender o versionamento, você define o valor do status como Suspended.

nota

Quando você habilitar o versionamento em um bucket pela primeira vez, poderá levar um curto período para que a alteração seja totalmente propagada. Recomendamos que você aguarde 15 minutos depois de habilitar o versionamento para emitir operações de gravação (PUT ou DELETE) em objetos no bucket.

O proprietário do bucket e todos os usuários autorizados do AWS Identity and Access Management (IAM) podem habilitar o versionamento. O proprietário do bucket é a Conta da AWS que criou o bucket. Para obter mais informações sobre permissões, consulte Gerenciamento de identidade e acesso para o Amazon S3.

Para obter mais informações sobre como habilitar e desabilitar o versionamento do S3 usando o AWS Management Console, a AWS Command Line Interface (AWS CLI) ou a API REST, consulte Habilitar o versionamento em buckets.

IDs de versão

Se o versionamento estiver habilitado para um bucket, o Amazon S3 gerará um ID de versão exclusivo automaticamente para o objeto que está sendo armazenado. Por exemplo, em um bucket, você pode ter dois objetos com a mesma chave (nome do objeto), mas diferentes IDs de versão, como photo.gif (versão 111111) e photo.gif (versão 121212).

Diagrama que retrata um bucket com versionamento habilitado que tem dois objetos com a mesma chave e IDs de versão diferentes.

Cada objeto tem um ID de versão, mesmo que o versionamento do S3 não esteja habilitado. Se o versionamento do S3 não estiver habilitado, o Amazon S3 definirá o valor do ID da versão como null. Se o S3 Versioning for habilitado, o Amazon S3 atribuirá um valor de ID de versão para o objeto. Esse valor o distingue de outras versões da mesma chave.

Quando você habilita o S3 Versioning em um bucket existente, os objetos que já estão armazenados no bucket permanecem inalterados. Os IDs de versão (null), o conteúdo e as permissões continuarão os mesmos. Depois que habilitar o versionamento do S3, cada objeto adicionado ao bucket obterá um ID de versão, que o distinguirá de outras versões da mesma chave.

Somente o Amazon S3 gera IDs de versão, e eles não podem ser editados. Os IDs de versão são strings opacas Unicode, com codificação UTF-8 e prontas para URL que não têm mais de 1.024 bytes de comprimento. Veja um exemplo a seguir:

3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

nota

Por simplicidade, os outros exemplos neste tópico usam IDs muito mais curtos.

Fluxos de trabalho de versionamento

Quando você PUT um objeto em um bucket com versionamento ativado, a versão desatualizada não é substituída. Conforme mostrado na seguinte figura, quando uma nova versão de photo.gif é PUT em um bucket que já contém um objeto com o mesmo nome, o seguinte comportamento ocorre:

  • O objeto original (ID = 111111) permanece no bucket.

  • O Amazon S3 gera um novo ID de versão (121212) e adiciona essa versão mais recente do objeto ao bucket.

Diagrama que mostra como o versionamento do S3 funciona quando você aplica PUT em um objeto em um bucket com versionamento habilitado.

Com essa funcionalidade, você poderá recuperar uma versão anterior de um objeto se um objeto tiver sido sobrescrito ou excluído acidentalmente.

Quando você aplica DELETE em um objeto, todas as versões permanecem no bucket e o Amazon S3 insere um marcador de exclusão, conforme exibido na figura a seguir.

Ilustração da inserção de um marcador de exclusão.

O marcador de exclusão torna-se a versão atual de objeto. Por padrão, o GET requisita a recuperação da versão armazenada mais recente. A execução de uma solicitação GET Object quando a versão atual é um marcador de exclusão retorna um erro 404 Not Found, conforme exibido na figura a seguir.

Ilustração de uma chamada GetObject para um marcador de exclusão que retorna um erro 404 (não encontrado).

Você pode, contudo, fazer uma solicitação GET de uma versão desatualizada de um objeto por especificar seu ID de versão. Na figura a seguir, você faz uma solicitação GET de uma versão específica de objeto, 111111. O Amazon S3 retorna a versão desse objeto, apesar de não ser a versão atual.

Para ter mais informações, consulte Recuperando versões de objeto de um bucket habilitado para versionamento.

Diagrama que mostra como o versionamento do S3 funciona quando você aplica GET em uma versão desatualizada em um bucket com versionamento habilitado.

Você pode excluir permanentemente um objeto, especificando a versão que deseja excluir. Somente o proprietário de um bucket do Amazon S3 ou um usuário do IAM autorizado pode excluir uma versão permanentemente. Se a operação DELETE especificar o versionId, essa versão do objeto será excluída permanentemente e o Amazon S3 não inserirá um marcador de exclusão.

Diagrama que mostra como DELETE versionId exclui permanentemente uma versão específica do objeto.

Você pode obter segurança adicional configurando um bucket para habilitar a exclusão com autenticação multifator (MFA). Quando você habilita a exclusão com MFA para um bucket, o proprietário do bucket precisa incluir dois formulários de autenticação em qualquer solicitação para excluir uma versão ou modificar o estado de versionamento do bucket. Para ter mais informações, consulte Configurando a exclusão de MFA.

Quando novas versões são criadas para um objeto?

Novas versões de objetos são criadas somente quando você aplica PUT em um novo objeto. Esteja ciente de que certas ações como CopyObject funcionam implementando uma operação PUT.

Algumas ações que modificam o objeto atual não criam uma versão porque elas não aplicam PUT em um novo objeto. Isso inclui ações como alterar as tags em um objeto.

Importante

Se você perceber um aumento significativo do número de respostas HTTP 503 (Serviço indisponível) recebidas para solicitações PUT ou DELETE de objetos do Amazon S3 a um bucket que tenha o versionamento do S3 habilitado, talvez tenha um ou mais objetos no bucket para os quais há milhões de versões. Para ter mais informações, consulte a seção Versionamento do S3 de Solucionar problemas de versionamento.