Recupere um relatório sobrescrito com versionamento

AWSBeginner
Pratique Agora

Introdução

Enviar um rascunho para a chave do relatório de uma equipe de finanças substituiria o conteúdo aprovado que os leitores veem. Você ativará o versionamento, reproduzirá esse erro, recuperará o conteúdo aprovado e removerá o histórico de prática após verificar a recuperação.

Conclua primeiro Organize documentos com chaves e metadados para conhecer chaves de objetos, propriedades, downloads e limpeza. Esta VM nova fornece a conexão da CLI e os arquivos aprovado e de rascunho; você criará o bucket. Use Terminal para comandos e a aba AWS View, ao lado, para comparar objetos atuais com seu histórico.

Relação com as certificações

Este laboratório oferece prática nos seguintes tópicos de exame.

Ative o versionamento antes de publicar

Nesta etapa, você criará um bucket vazio e ativará o versionamento antes de enviar qualquer relatório.

Entre no espaço de trabalho com cd (mudar de diretório):

cd /home/labex/project

Crie o bucket de relatórios com mb (criar bucket):

aws s3 mb s3://labex-report-history

Você deve ver make_bucket: labex-report-history. O versionamento é uma configuração do bucket: uma vez ativado, as gravações seguintes em uma chave criam IDs de versão em vez de descartar seu conteúdo armazenado anterior. Ele é útil para recuperar sobrescritas acidentais, mas não impede que alguém exclua explicitamente uma versão específica.

aws s3api expõe operações individuais da API do S3. put-bucket-versioning atualiza essa configuração; --bucket identifica o contêiner, e --versioning-configuration Status=Enabled solicita o estado ativado:

aws s3api put-bucket-versioning --bucket labex-report-history --versioning-configuration Status=Enabled

A atualização bem-sucedida não exibe corpo de resposta. Leia a configuração novamente em vez de confiar apenas no silêncio:

aws s3api get-bucket-versioning --bucket labex-report-history
{
    "Status": "Enabled"
}

AWS View agora mostra Versioning: Enabled no bucket. Ele ainda está vazio: ativar o versionamento não envia um relatório nem cria uma versão histórica. Ative a configuração antes de gravar os dados que deseja proteger.

Crie uma versão original e uma sobrescrita

Nesta etapa, você publicará um relatório aprovado e depois sobrescreverá seu conteúdo atual com um rascunho, mantendo o original no histórico.

Inspecione os arquivos preparados com cat, que exibe seus conteúdos:

cat report-approved.txt
Monthly revenue: 42000
cat report-draft.txt
Monthly revenue: 00000

Publique o arquivo aprovado na chave report.txt. O nome do arquivo de origem e a chave do objeto podem ser diferentes:

aws s3 cp report-approved.txt s3://labex-report-history/report.txt

No AWS View, abra report.txt e confirme a receita aprovada. O histórico contém uma versão, marcada como Current.

Agora reproduza o erro: envie o rascunho para essa mesma chave:

aws s3 cp report-draft.txt s3://labex-report-history/report.txt

A pré-visualização muda para Monthly revenue: 00000. Ainda há uma chave de objeto atual, mas seu histórico agora tem duas versões armazenadas. Ambos os arquivos têm o mesmo tamanho; o versionamento acompanha gravações, em vez de deduzir mudanças apenas pelo tamanho.

list-object-versions recupera registros históricos e a versão atual:

aws s3api list-object-versions --bucket labex-report-history

O array Versions contém duas entradas com chave report.txt e valores VersionId diferentes. IsLatest: true identifica o rascunho como atual; a versão aprovada anterior tem IsLatest: false. IDs e horários variam. Uma listagem comum de objetos mostra as chaves atuais, portanto use a listagem de versões ao investigar uma sobrescrita.

Na Console oficial do S3, Show versions revela essas entradas de histórico na lista de objetos. Este exemplo mostra outro objeto e mais gravações; use-o para reconhecer a coluna Version ID. Nenhum login na Console é necessário para este laboratório.

Console oficial do S3 com Show versions ativado

Fonte: AWS Storage Blog.

Recupere e publique a versão aprovada

Nesta etapa, você baixará a versão aprovada anterior, conferirá seus bytes e tornará esse conteúdo atual novamente sem excluir o histórico.

Neste momento, há exatamente duas versões de report.txt. Na listagem anterior, encontre a entrada com IsLatest: false: ela é o original aprovado. Copie seu VersionId.

Armazene esse ID em uma variável do shell para reutilizá-lo. Substitua PASTE_APPROVED_VERSION_ID abaixo pelo valor copiado, mantendo as aspas. Uma atribuição de variável não tem espaços ao redor de =:

OLD_VERSION='PASTE_APPROVED_VERSION_ID'

Confira o valor antes de usá-lo:

echo "$OLD_VERSION"

Você deve ver o ID da versão anterior, em vez do texto de exemplo. $OLD_VERSION lê a variável; aspas duplas mantêm o valor unido como um único argumento de comando.

get-object baixa o corpo de um objeto para o caminho local final. --version-id seleciona a cópia histórica em vez do rascunho atual:

aws s3api get-object --bucket labex-report-history --key report.txt --version-id "$OLD_VERSION" recovered-report.txt

A saída JSON descreve a cópia recuperada. Leia seu conteúdo:

cat recovered-report.txt
Monthly revenue: 42000

cmp compara bytes de arquivos. && executa a mensagem seguinte apenas se a comparação for bem-sucedida:

cmp report-approved.txt recovered-report.txt && echo 'Approved historical content verified'

Recuperar uma versão mais antiga não a torna atual; leitores da chave sem especificar uma versão ainda recebem o rascunho. Publique os bytes recuperados nessa chave:

aws s3 cp recovered-report.txt s3://labex-report-history/report.txt

Isso cria uma terceira versão contendo o relatório aprovado. A versão aprovada antiga e o rascunho permanecem para investigação. AWS View mostra o conteúdo aprovado como atual e três registros de versão. Liste o histórico para confirmar:

aws s3api list-object-versions --bucket labex-report-history

A nova entrada tem IsLatest: true. Você restaurou os dados gravando uma nova versão atual, em vez de apagar a evidência do erro.

Este exemplo mostra o relatório recuperado como atual e três entradas distintas de histórico. Os IDs de versão mostrados são exemplos daquela sessão:

Relatório recuperado com histórico de versões preservado

Restaure o acesso após um marcador de exclusão

Nesta etapa, você observará como um marcador de exclusão oculta um objeto com versões e depois removerá esse marcador para revelar a versão que era atual.

Esquema: a exclusão adiciona um marcador atual enquanto as três versões armazenadas do relatório permanecem. Os rótulos v1–v3 indicam a ordem das gravações, não IDs reais de versão.

Atual e histórico

Em um bucket com versionamento ativado, uma solicitação de exclusão sem um ID de versão cria um marcador de exclusão. Esta é uma entrada atual de histórico que informa que a chave foi excluída; ela não contém bytes de arquivo nem apaga as versões antigas. Exclua a chave atual usando o comando usual de arquivos:

aws s3 rm s3://labex-report-history/report.txt

Uma listagem comum agora não mostra objetos atuais:

aws s3 ls s3://labex-report-history/

No AWS View, o objeto atual desaparece, enquanto três linhas Version e um Delete marker atual permanecem no histórico.

Tente baixar a chave sem escolher uma versão:

aws s3 cp s3://labex-report-history/report.txt unavailable-report.txt

Espera-se que este comando falhe com um erro de não encontrado. O marcador de exclusão atual faz uma leitura comum se comportar como se o objeto estivesse ausente. Isso não comprova que os bytes históricos foram apagados.

Leia o histórico completo:

aws s3api list-object-versions --bucket labex-report-history

A resposta agora contém DeleteMarkers e Versions. Encontre a única entrada em DeleteMarkers e copie seu VersionId. Esse ID identifica o marcador, não um relatório armazenado.

Substitua o texto de exemplo abaixo por esse ID de marcador:

MARKER_VERSION='PASTE_DELETE_MARKER_ID'

Remova esse marcador exato com delete-object. Fornecer --version-id exclui a entrada selecionada do histórico em vez de criar outro marcador:

aws s3api delete-object --bucket labex-report-history --key report.txt --version-id "$MARKER_VERSION"

A resposta identifica o marcador excluído. A versão aprovada anterior se torna atual novamente; esta operação não envia outra versão do relatório. Confirme o acesso comum baixando a chave:

aws s3 cp s3://labex-report-history/report.txt accessible-report.txt
cmp report-approved.txt accessible-report.txt && echo 'Current report accessible again'

A comparação é bem-sucedida. AWS View mostra report.txt novamente com o conteúdo aprovado e três versões. Remover um marcador restaura o acesso; excluir permanentemente uma versão de dados apagaria aquela cópia específica.

Remova versões históricas e o bucket

Nesta etapa, você removerá todas as versões de dados pertencentes ao laboratório antes de excluir o bucket vazio.

O histórico de versões consome armazenamento mesmo quando uma listagem comum de objetos está vazia. Um simples aws s3 rm criaria outro marcador de exclusão, portanto não basta para esvaziar um bucket com versões. O marcador da etapa anterior já foi removido; as três versões de dados permanecem.

Liste o histórico antes da limpeza permanente:

aws s3api list-object-versions --bucket labex-report-history

Você deve ver três entradas em Versions e nenhum DeleteMarkers. Todas as entradas pertencem a este exercício descartável de relatório.

As três entradas pertencem a report.txt. Você já usou delete-object --version-id para remover um marcador; a mesma operação pode remover permanentemente uma versão de dados.

Copie um VersionId da listagem e substitua o texto de exemplo abaixo. Execute este comando uma vez para cada um dos três IDs distintos. A exclusão permanente não pode ser desfeita, portanto confira o bucket, a chave e o ID a cada vez:

aws s3api delete-object --bucket labex-report-history --key report.txt --version-id 'PASTE_VERSION_ID'

Uma resposta bem-sucedida identifica a versão excluída. Um ID de versão seleciona uma cópia histórica; ele não exclui todas as versões da chave. Após remover as três, confirme que não restam versões nem marcadores:

aws s3api list-object-versions --bucket labex-report-history

A resposta bem-sucedida não tem entradas Versions ou DeleteMarkers. Agora remova o bucket vazio com rb:

aws s3 rb s3://labex-report-history

A saída é remove_bucket: labex-report-history. Confirme que o armazenamento ainda responde:

aws s3 ls

Não restam buckets, e AWS View mostra No buckets. Os arquivos locais de relatórios continuam disponíveis; apenas os recursos S3 do laboratório e seu histórico foram removidos.

Resumo

Você ativou o versionamento do bucket antes de publicar, distinguiu uma chave atual de seus IDs históricos de versão e recuperou um relatório sobrescrito obtendo uma versão anterior e publicando seus bytes verificados. Depois, criou e removeu um marcador de exclusão para restaurar o acesso comum sem enviar outra versão.

O versionamento preserva o histórico; ele não torna reversível a exclusão explícita de versões. Você terminou inspecionando e excluindo permanentemente todas as versões do laboratório, confirmando que não restavam marcadores e removendo o bucket vazio.