Configurando Imutabilidade no Object Storage S3
Instalando AWS CLI
Neste artigo vamos instalar e configurar o cliente AWS CLI, um cliente em linha de comando, para Object Storage que roda em sistemas operacionais Linux, Mac e Windows.
Passo 1 – Baixe o arquivo de instalação
Use o comando “curl”: A opção “-o” especifica o nome do arquivo no qual o pacote baixado é gravado. As opções no comando de exemplo a seguir gravam o arquivo baixado no diretório atual com o nome local “awscliv2.zip”.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
URL utilizada: https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
Passo 2 – Descompacte o instalador. Se sua distribuição Linux não possuir comando Unzip integrado, use um equivalente para descompactá-lo. O comando de exemplo a seguir descompacta o pacote e cria um diretório nomeado AWS no diretório atual.
unzip awscliv2.zip
Passo 3 – Execute o programa de instalação.
O comando de instalação usa um arquivo nomeado install no diretório recém-descompactado AWS. Por padrão, os arquivos são todos instalados em /user/local/aws-cli, e um link simbólico é criado em /user/local/bin. O comando sudo (se necessário) inclui conceder permissões de gravação a esses diretórios.
sudo ./aws/install
Passo 4 – Confirme a instalação com o seguinte comando.
aws --version
Configure a AWS CLI para se conectar ao Object Storage S3
Em seu terminal insira o comando “aws configure” para inserir as credenciais de acesso ao Object Storage S3 conforme exemplo abaixo
*Access Key: Portal Web
*Secret Key: Portal Web
*Default Region: (Deixar em branco e apertar Enter)
*Default output format: (Deixar em branco e apertar Enter)
Criando um bucket e ativando os parâmetros de Imutabilidade via AWS CLI S3API
Insira o comando em seu terminal alterando as variáveis em negrito:
aws –endpoint-url Endpoint(URL do S3) s3api create-bucket –object-lock-enabled-for-bucket –bucket nomedoseubucket
Exemplo:
aws --endpoint-url https://s3-dc3-001.mspclouds.com s3api create-bucket --object-lock-enabled-for-bucket --bucket bucket-teste
Definindo/alterando a configuração padrão de retenção:
Insira o comando abaixo no seu terminal, alterando a quantidade de dias no parâmetro “Days”
aws --endpoint-url https://s3-dc3-001.mspclouds.com s3api put-object-lock-configuration \
--bucket bucket-teste --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 3 }}}'
Diferenças entre os modos
O S3 Object Lock fornece dois modos de retenção, esses modos aplicam diferentes níveis de proteção aos seus objetos:
COMPLIANCE: No modo de compliance, uma versão de objeto protegido não pode ser substituída ou excluída por qualquer usuário, incluindo o usuário root
GOVERNANCE: No modo de governance, os usuários não podem substituir e excluir uma versão do objeto ou alterar suas configurações de bloqueio, a menos que tenham permissões especiais.
Abaixo imagem evidenciando que após subir alguns arquivos, e tentar fazer algumas alterações, ocorreu o versionamento de cada alteração
Cada objeto possui um cabeçalho “Headers”. Quando o bucket é criado com a opção de imutabilidade ele aplica a variável x-amz-object-lock-retain-until-date em todo novo objeto. É nesse parâmetro que é configurado a retenção, ou seja, até que a data da variável x-amz-object-lock-retain-until-date seja atingida, o objeto não poderá ser alterado.
Na imagem abaixo, é apresentando as informações do cabeçalho, onde a data do campo x-amz-object-lock-retain-until-date é superior à data da variável Date. Sendo assim este arquivo não poderá ser alterado ou excluído até que seja atingida a data da variável x-amz-object-lock-retain-until-date.
Evidência da variável Date
Pontos importantes:
- A imutabilidade pode ser habilitada APENAS quando está sendo criado o Bucket.
- O volume do bucket aumenta toda vez que um arquivo é versionado. A formula a ser considerada para cálculo do volume é: quantidade de versões x tamanho do arquivo.
- É possível fazer a recuperação de versionamento a qualquer momento.
- Enquanto existirem objetos versionados com a data de retenção superior à variável date, não será possível fazer a deleção do bucket. (através de acesso com accesskey secretkey)
- Cada objeto pode receber a variável x-amz-object-lock-retain-until-date independente do bucket, ou seja, a informação mais específica sobrepõe as informações do bucket;
- É possível fazer a criação de uma nova versão de um determinado objeto fazendo uma alteração na variável x-amz-object-lock-retain-until-date.
- Não houve diferença no comportamento do S3 utilizando os parâmetros GOVERNANCE ou COMPLIANCE na variável x-amz-object-lock-mode.
Nos dois formatos, não foi possível efetuar a deleção dos objetos versionados. Em todo caso recomendamos FORTEMENTE a utilização do parâmetro COMPLIANCE.
- O volume total do bucket é a soma de todos os arquivos, considerando os versionamentos. É importante tomar cuidado, pois as ferramentas (ex. S3Browser) desconsideram as informações de utilização de versionamento.
Links úteis:
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-aws-cli&locale=pt-BR
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-lock-configuration.html
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html