Como criar um backup incremental off-line de um bucket do AWS S3

3

Estou procurando uma maneira de fazer backups diários de um bucket da AWS como backups incrementais. Estes devem ser armazenados offline e longe da AWS.

Para outros sistemas de armazenamento (como unidades NAS), eu uso um rsync diário para backups. Usando a opção --link-dest do rsync, sou capaz de tirar um instantâneo completo todos os dias do sistema de arquivos remoto. Todos os arquivos que não foram alterados desde o backup anterior são vinculados ao backup anterior. Isso significa que os snapshots diários completos ocupam apenas o espaço de armazenamento dos backups incrementais.

Eu gostaria de configurar algo semelhante para um bucket amazon S3. Há 20 GB no balde, mas apenas 50 MB por dia.

Observe que este é o backup do conteúdo de um bucket do S3, NÃO faz backup de outro conteúdo para o bucket do S3.

Eu posso ver como eu usaria as ferramentas da AWS CLI para fazer backups completos. Não vejo como posso fazer backups incrementais.

Eu acho que eu poderia (diariamente) sincronizar o S3 com um disco rígido local e fazer o backup diário do disco rígido local. Isso parece muito desajeitado.

Editar

Isto foi planejado como uma simples questão técnica, não uma discussão geral sobre segurança de backup. Mas desde que me perguntam "por que você precisa disso", agora vejo que preciso explicar os princípios básicos dos backups.

Anedota: Eu recentemente testemunhei um provedor de TI terceirizado derrubar (inteiramente) um balde S3 por causa de uma falta de comunicação. Isso poderia ter sido muito caro (cerca de £ 100 mil de trabalho recente, £ 1 milhão de trabalho total). Por sorte, também tivemos cópias em nossos laptops locais e, por apenas R $ 1 mil, reconstruímos o conteúdo para eles.

Renovou minha convicção de que o único "backup" válido está em um sistema isolado armazenado fora do local e off-line e com uma rotação de mídia que efetivamente implementa um tempo de bloqueio . Outros backups podem melhorar, proporcionando uma recuperação mais rápida, etc ... mas manter todos os seus backups da AWS em sua própria conta da AWS não é seguro, porque ... erro do usuário.

    
por couling 05.11.2018 / 15:55

2 respostas

3

Existe um caminho além de aws s3 sync , mas pode ser igualmente desajeitado. Você vê, isso se resume a adicionar um gancho Lambda no bucket S3 que é acionado em PUTs. Em teoria, isso permitiria que você construísse uma réplica do Add-only do bucket do S3, para que qualquer DELETE não seja replicado. Existem tutoriais para isso, mas essencialmente:

  1. O objeto é operado em um balde.
  2. O Lambda é acionado, dados os dados do evento para a operação.
  3. Se a operação for uma PUT, seu código escrito faz coisas com esse objeto. Ele ignora DELETEs.

A lógica de backup incremental seria escrita por você.

    
por 07.11.2018 / 01:57
4

Observação: essa é uma resposta à pergunta original antes de mencionar os backups off-line . Deixando-o aqui como resposta para a pergunta original: Como criar um backup incremental de um bucket do AWS S3 .

A primeira pergunta é Por que você deseja fazer o backup do bucket do S3? Qual é o problema que você está tentando proteger?

  • Lembre-se de que a durabilidade do S3 está em torno de 99,99999 % - você é extremamente improvável perder objetos devido a falha de HW, então podemos descartar isso.

  • Se você quiser ter certeza de que objetos sobrescritos acidentalmente no S3 podem ser recuperados, você pode usar Controle de versão do S3 - que manterá um histórico de todas as versões mais antigas do arquivo e você poderá recuperá-lo dessa maneira. O mesmo para exclusões.

  • Por falar em exclusões, é possível usar MFA para S3 Deletions como outra camada de proteção, por exemplo por motivos de conformidade e auditoria. (thx Tim:)

  • Se você precisar de um segundo intervalo de DR ( recuperação de desastre ) em alguma outra região para o improvável evento de sua região principal ficar off-line, use Replicação de região cruzada S3 que espelhará automaticamente o conteúdo do seu bucket de uma região para outra a cada mudar.

  • Se nenhuma das opções acima ainda satisfizer suas necessidades, você pode querer ter uma função Lambda que lide com cada mudança no bucket S3 para você. Dessa forma, toda vez que você gravar / atualizar um objeto no S3, o Lambda fará um backup no seu destino preferido. Isto pode ser usado, e. para espelhar os buckets do S3 entre diferentes contas da AWS, para outros provedores de nuvem ou para destinos off-line (por exemplo, para o seu servidor local). Com o Lambda você tem a máxima flexibilidade sobre o que fazer com as mudanças. Veja Usando o Lambda com o Amazon S3 .

  • Se isso ainda não for suficiente, você sempre pode usar aws s3 sync que compara os intervalos de origem e destino e copia somente o que foi alterado.

  • (Atualização) Para backups offline

    • É claro que você também pode usar aws s3 sync , que pode ser sincronizado de / para discos, não apenas entre intervalos.
    • Ou você pode desenvolver uma solução mais elaborada com base na captura de Eventos do S3 quando os objetos são criados / atualizados e copiá-los para o armazenamento off-line assim que isso acontece. Deve ser um programa bem simples em seu servidor, escutando os eventos do S3 ou mensagens do SNS e chegando ao S3 para os objetos atualizados .

Isso é muito para escolher. Espero que algumas delas atendam às suas necessidades:)

    
por 05.11.2018 / 19:40