Cloud

Conceitos avançados do Amazon S3 – Parte 2

Sobre o autor: Guilherme Teles é um cara qualquer que não dorme direito e acaba escrevendo. Sou Certificado CISSP, CHFI, CEH, LPIC-3, AWS CDA, AWS SAA, AWS SOAQuer assinar a newsletter do site e receber esse e outros artigos? Clique aqui! Aproveite e navegue pelo smeu blog. Quem sabe você não está exatamente precisando de uma ajuda ? 

Além do básico, existem alguns recursos avançados do Amazon S3, que você também deve estar familiarizado. Vou dividir este artigo em duas partes. Esta é a segunda parte.

Versionamento

O controle de versão do Amazon S3 ajuda a proteger seus dados contra exclusão acidental ou maliciosa, mantendo várias versões de cada objeto no bucket, identificado por uma ID de versão exclusiva.

O controle de versão permite preservar, recuperar e restaurar todas as versões de cada objeto armazenado no seu bucket Amazon S3.

Se um usuário fizer uma alteração acidental ou mesmo excluir maliciosamente um objeto no seu bucket S3, você pode restaurar o objeto ao seu estado original, simplesmente fazendo referência à ID da versão, além do bucket e da chave do objeto.

A versão está ativada no nível do bucket. Uma vez habilitado, o controle de versão não pode ser removido de um bucket; só pode ser suspenso.

MFA Delete

O MFA Delete adiciona outra camada de proteção de dados em cima do controle de versão do bucket.

O MFA Delete requer autenticação adicional para excluir permanentemente uma versão de objeto ou alterar o estado de versão de um bucket. Além das suas credenciais de segurança normais, o MFA delete requer um código de autenticação (uma senha temporária e única) gerada por um dispositivo de autenticação de fator múltiplo ou hardware (MFA). Observe que o MFA delete só pode ser ativado pela conta root. 

URLs pré-assinados (Pre-signed)

Todos os objetos do Amazon S3 por padrão são privados, o que significa que somente o proprietário tem acesso.

No entanto, o proprietário do objeto pode opcionalmente compartilhar objetos com outros criando uma URL pré-assinada, usando suas próprias credenciais de segurança para conceder permissões de tempo limitado para baixar os objetos.

Quando você cria uma URL pré-assinada para seu objeto, você deve fornecer suas credenciais de segurança e especificar um nome do bucket, uma chave de objeto, o método HTTP (GET para baixar o objeto) e uma data e hora de validade.

As URLs pré-assinadas são válidas somente para a duração especificada. Isso é particularmente útil para proteger contra “raspagem de conteúdo” (content scraping) de conteúdo da Web, como arquivos de mídia armazenados no Amazon S3.

Multipart Upload

Para melhor suportar o upload ou a cópia de objetos grandes, o Amazon S3 fornece a Multipart Upload API.

Isso permite que você carregue objetos grandes como um conjunto de peças, o que geralmente dá melhor utilização da rede (através de transferências paralelas), a capacidade de pausar e retomar, e a capacidade de carregar objetos onde o tamanho é inicialmente desconhecido.

Multipart upload é um processo de três passos: iniciação, upload das peças e conclusão (ou abortar). As peças podem ser carregadas de forma independente em ordem arbitrária, com retransmissão, se necessário. Depois de todas as peças serem carregadas, o Amazon S3 monta as peças para criar um objeto.

Em geral, você é comendado usar multipart upload para objetos maiores que 100 Mbytes, e você deve usar multipart upload para objetos maiores que 5 GB. Ao usar as APIs, você deve quebrar o arquivo para ser carregado em partes e acompanhar as peças. Ao usar as API de alto nível e os comandos Amazon S3 de alto nível na AWS CLI (aws s3 cp, aws s3 mv e aws s3 sync), o carregamento multipart é executado automaticamente para objetos grandes.

Você pode definir uma política do ciclo de vida do objeto em um bucket para abortar partes múltiplas incompletas de uploads após um determinado número de dias. Isso minimizará os custos de armazenamento associados aos carregamentos de várias partes que não foram concluídos.

Range GETs

É possível baixar (GET) apenas uma parte de um objeto no Amazon S3 e no Amazon Glacier usando o Range GET. Usando o cabeçalho HTTP Range na solicitação GET ou parâmetros equivalentes em uma das bibliotecas do wrapper do SDK, você especifica um intervalo de bytes do objeto. Isso pode ser útil para lidar com objetos grandes quando você tem conectividade fraca ou para baixar apenas uma parte conhecida de um grande backup da Glacier.

Replicação entre regiões (Cross-Region Replication)

A replicação entre regiões é uma característica do Amazon S3 que permite que você assíncronamente replicar todos os novos objetos no bucket de origem em uma região AWS para um bucket alvo em outra região.

Quaisquer metadados e ACLs associadas ao objeto também fazem parte da replicação.

Depois de configurar a replicação entre regiões no seu compartimento de origem, qualquer alteração nos dados, metadados ou ACL em um objeto desencadeia uma nova replicação para o bucket de destino.

Para habilitar a replicação entre regiões, o controle de versão deve ser ativado para os compartimentos de origem e de destino, e você deve usar uma política IAM para permitir a permissão do Amazon S3 replicar objetos em seu nome.

A replicação entre regiões é comumente usada para reduzir a latência necessária para acessar objetos no Amazon S3 colocando objetos mais perto de um conjunto de usuários ou para atender aos requisitos para armazenar dados de backup a uma certa distância dos dados originais.

Se ativado em um bucket existente, a replicação entre regiões apenas replicará novos objetos. Os objetos existentes não serão replicados e devem ser copiados para o novo bucket através de um comando separado.

Logging

Para rastrear pedidos para o seu bucket Amazon S3, você pode ativar os logs de acesso do servidor Amazon S3. O log está desativado por padrão, mas ele pode ser facilmente habilitado.

Quando você habilita o log para um bucket (o bucket de origem), você deve escolher onde os logs serão armazenados (o bucket de destino). Você pode armazenar logs de acesso no mesmo bucket ou em um bucket diferente.

De qualquer forma, é opcional (mas uma prática recomendada) para especificar um prefixo, como logs / bucket / logs /, para que você possa identificar mais facilmente seus logs.

Uma vez habilitado, os logs são entregues de forma mais eficiente com um pequeno atraso. Os logs incluem informações como:

  • Conta de solicitação e endereço IP
  • Nome do bucket
  • Tempo de solicitação
  • Ação (GET, PUT, LIST, e assim por diante)
  • Status de resposta ou código de erro

Notificações de eventos

As notificações de eventos do Amazon S3 podem ser enviadas em resposta a ações realizadas em objetos carregados ou armazenados no Amazon S3.

As notificações de eventos permitem que você execute fluxos de trabalho, envie alertas ou execute outras ações em resposta a mudanças em seus objetos armazenados no Amazon S3. Você pode usar as notificações de eventos do Amazon S3 para configurar disparadores para executar ações, como a transcodificação de arquivos de mídia quando eles são carregados, processando arquivos de dados quando eles estão disponíveis e sincronizando objetos do Amazon S3 com outros armazenamentos de dados.

As notificações de eventos do Amazon S3 estão configuradas no nível do bucket e você pode configurá-las através do console Amazon S3, através da API REST ou usando um SDK AWS.

O Amazon S3 pode publicar notificações quando novos objetos são criados (por uma execução de upload PUT, POST, COPY ou multipart), quando os objetos são removidos (por um DELETE) ou quando o Amazon S3 detecta que um objeto RRS foi perdido.

Você também pode configurar notificações de eventos com base em prefixos e sufixos de nomes de objetos. As mensagens de notificação podem ser enviadas através do Amazon Simple Notification Service (Amazon SNS) ou do Amazon Simple Queue Service (Amazon SQS) ou entregues diretamente à um AWS Lambda para invocar as funções da AWS Lambda.

Melhores Práticas, Padrões e Desempenho

É um padrão comum usar o armazenamento Amazon S3 em ambientes e aplicativos de TI híbridos.

Por exemplo, os dados em sistemas de arquivos, bancos de dados e arquivos de conformidade no local podem ser facilmente copiados pela Internet para Amazon S3 ou Amazon Glacier, enquanto o armazenamento principal de aplicativos ou banco de dados permanece no local.

Outro padrão comum é usar o Amazon S3 como armazenamento em massa “blob” para dados, mantendo um índice desses dados em outro serviço, como o Amazon DynamoDB ou Amazon RDS. Isso permite buscas rápidas e consultas complexas em nomes de chaves sem listar chaves continuamente.

O Amazon S3 escalará automaticamente para suportar taxas de solicitação muito altas, repartindo automaticamente seus buckets conforme necessário.

Se você precisar de taxas de solicitação superiores a 100 pedidos por segundo, você pode querer rever as diretrizes de melhores práticas do Amazon S3 no Guia do desenvolvedor. Para suportar taxas de solicitação mais altas, é melhor assegurar algum nível de distribuição aleatória de chaves, por exemplo, incluindo um hash como prefixo para nomes de chaves.

Se você estiver usando o Amazon S3 em um modo intensivo em GET, como uma hospedagem estática de sites, para melhor desempenho, você deve considerar usar uma distribuição Amazon CloudFront como uma camada de cache na frente do seu bucket Amazon S3.

Sobre o autor: Guilherme Teles é um cara qualquer que não dorme direito e acaba escrevendo. Sou Certificado CISSP, CHFI, CEH, LPIC-3, AWS CDA, AWS SAA, AWS SOAQuer assinar a newsletter do site e receber esse e outros artigos? Clique aqui! Aproveite e navegue pelo smeu blog. Quem sabe você não está exatamente precisando de uma ajuda ?