O Object Lock é usado para proteger objetos no S3 contra exclusão e modificação por um período específico. Esse recurso garante a imutabilidade dos dados durante todo o tempo de armazenamento. O Object Lock é especialmente útil para trabalhar com arquivos de arquivo importantes, backups e outras informações críticas que precisam de proteção contra ações acidentais ou intencionais.
O Object Lock só pode ser ativado no momento da criação do bucket. Atualmente, esse recurso não pode ser habilitado pelo console de gerenciamento, portanto o bucket deve ser criado usando clientes ou ferramentas de terceiros. Abaixo está um exemplo de criação de bucket usando a AWS CLI.
Criar um bucket:
aws s3api create-bucket \
--bucket object-lock-bucket \
--endpoint-url https://s3.hmstorage.net \
--object-lock-enabled-for-bucket
Você também pode criar um bucket com a classe de armazenamento cold:
aws s3api create-bucket \
--bucket object-lock-bucket \
--endpoint-url https://s3.hmstorage.net \
--create-bucket-configuration LocationConstraint=us:us-2-cold \
--object-lock-enabled-for-bucket
Não é possível especificar o tamanho do bucket no momento da criação. Ao criar um bucket por meio de clientes de terceiros, sempre é definido o tamanho mínimo possível: 10 GB para a classe de armazenamento standard e 1 GB para a classe de armazenamento cold. Depois que o bucket é criado, o tamanho pode ser aumentado pelo painel de controle.
Para verificar se o Object Lock está ativado, execute:
aws s3api get-object-lock-configuration \
--bucket object-lock-bucket \
--endpoint-url https://s3.hmstorage.net
Resposta esperada:
{
"ObjectLockConfiguration": {
"ObjectLockEnabled": "Enabled"
}
}
O Object Lock só funciona se o versionamento estiver ativado. Para verificar se o versionamento está ativo, execute:
aws s3api get-bucket-versioning \
--bucket object-lock-bucket \
--endpoint-url https://s3.hmstorage.net
A resposta mostrará o status do versionamento:
{
"Status": "Enabled",
"MFADelete": "Disabled"
}
O Object Lock oferece suporte a dois modos de proteção de objetos:
Na implementação atual do armazenamento S3, apenas um usuário é criado com permissões completas, incluindo
BypassGovernanceRetention. Portanto, ao usar o modo GOVERNANCE, esse usuário sempre poderá excluir objetos ignorando o bloqueio.
Vamos ver exemplos de como trabalhar com os modos COMPLIANCE e GOVERNANCE.
Fazer upload de um arquivo com bloqueio de 30 dias:
aws s3api put-object \
--bucket object-lock-bucket \
--key compliance-file.txt \
--body compliance-file.txt \
--object-lock-mode COMPLIANCE \
--object-lock-retain-until-date "$(date -d '+30 days' --utc +%Y-%m-%dT%H:%M:%SZ)" \
--endpoint-url https://s3.hmstorage.net
Descrição dos parâmetros:
--bucket: Nome do bucket para onde o objeto será enviado.--key: Nome (caminho) do objeto dentro do bucket.--body: Caminho para o arquivo que será enviado.--object-lock-mode: Modo de bloqueio.--object-lock-retain-until-date: Data de expiração do bloqueio no formato YYYY-MM-DDTHH:MM:SSZ. O objeto não poderá ser excluído antes dessa data.Verificar se o bloqueio foi aplicado:
aws s3api get-object-retention \
--bucket object-lock-bucket \
--key compliance-file.txt \
--endpoint-url https://s3.hmstorage.net
Saída esperada:
{
"Retention": {
"Mode": "COMPLIANCE",
"RetainUntilDate": "2025-04-04T10:02:21.000000000Z"
}
}
Agora vamos tentar excluir o objeto:
aws s3api delete-object \
--bucket object-lock-bucket \
--key compliance-file.txt \
--endpoint-url https://s3.hmstorage.net
O arquivo desaparecerá da aba Objetos no painel de controle e também dos clientes de terceiros. Será criado um marcador de exclusão, mas o objeto continuará no bucket.
Verificar as versões do objeto:
aws s3api list-object-versions \
--bucket object-lock-bucket \
--prefix compliance-file.txt \
--endpoint-url https://s3.hmstorage.net
A versão será mantida e um marcador de exclusão será criado. A versão excluída pode ser restaurada seguindo as instruções de recuperação.
Você não conseguirá excluir uma versão específica com um bloqueio ativo:
aws s3api delete-object \
--bucket object-lock-bucket \
--key compliance-file.txt \
--version-id <VersionId_of_object> \
--endpoint-url https://s3.hmstorage.net
Até a data de expiração do bloqueio, o comando retornará um erro:
An error occurred (AccessDenied) when calling the DeleteObject operation: forbidden by object lock
Fazer upload de um arquivo com bloqueio de 30 dias:
aws s3api put-object \
--bucket object-lock-bucket \
--key governance-file.txt \
--body governance-file.txt \
--object-lock-mode GOVERNANCE \
--object-lock-retain-until-date "$(date -d '+30 days' --utc +%Y-%m-%dT%H:%M:%SZ)" \
--endpoint-url https://s3.hmstorage.net
Descrição dos parâmetros:
--bucket: Nome do bucket para onde o objeto será enviado.--key: Nome (caminho) do objeto dentro do bucket.--body: Caminho para o arquivo que será enviado.--object-lock-mode: Modo de bloqueio.--object-lock-retain-until-date: Data de expiração do bloqueio no formato YYYY-MM-DDTHH:MM:SSZ. O objeto não poderá ser excluído antes dessa data.Verificar se o bloqueio foi aplicado:
aws s3api get-object-retention \
--bucket object-lock-bucket \
--key governance-file.txt \
--endpoint-url https://s3.hmstorage.net
Saída esperada:
{
"Retention": {
"Mode": "GOVERNANCE",
"RetainUntilDate": "2025-04-04T10:07:44.000000000Z"
}
}
Tentar excluir o objeto:
aws s3api list-object-versions \
--bucket object-lock-bucket \
--prefix governance-file.txt \
--endpoint-url https://s3.hmstorage.net
O arquivo desaparecerá da aba Objetos no painel de controle e dos clientes de terceiros. Será criado um marcador de exclusão, mas o objeto continuará no bucket.
Verificar as versões do objeto:
aws s3api list-object-versions \
--bucket object-lock-bucket \
--prefix governance-file.txt \
--endpoint-url https://s3.hmstorage.net
A versão do objeto e o marcador de exclusão estarão visíveis. A versão excluída pode ser restaurada seguindo as instruções de recuperação.
Agora vamos tentar excluir um objeto ignorando o bloqueio. Diferentemente do modo COMPLIANCE, objetos no modo GOVERNANCE podem ser excluídos antes do término do bloqueio usando a flag --bypass-governance-retention.
aws s3api delete-object \
--bucket object-lock-bucket \
--key governance-file.txt \
--bypass-governance-retention \
--version-id <VersionId_of_object> \
--endpoint-url https://s3.hmstorage.net
Agora verifique novamente as versões do objeto:
aws s3api list-object-versions \
--bucket object-lock-bucket \
--prefix governance-file.txt \
--endpoint-url https://s3.hmstorage.net
Apenas o marcador de exclusão será exibido.