Skip to main content

Bucket Policy

O que é uma Bucket Policy?

Uma Bucket Policy é uma política baseada em recursos que pode ser aplicada a buckets do sistema de armazenamento de objetos. Ela define permissões específicas para operações que podem ser executadas dentro de um bucket e os objetos contidos nele. Essas políticas são escritas em formato JSON e seguem a mesma estrutura de uma política do IAM (Identity and Access Management) da AWS, mas com o escopo limitado ao bucket onde são aplicadas.

Objetivo Principal

O objetivo de uma Bucket Policy é fornecer um mecanismo flexível para controlar o acesso a um bucket e aos seus objetos, garantindo a segurança e o controle granular sobre os recursos armazenados.

Funcionamento de uma Bucket Policy

Apenas o proprietário do bucket pode associar uma Bucket Policy a ele. A política pode ser usada para conceder ou negar permissões de acesso a entidades (usuários, grupos ou outras contas). A grande vantagem das Bucket Policies é que elas podem definir permissões para usuários e grupos de fora da conta de proprietário (cross-account access), sem a necessidade de modificar as permissões em cada objeto individualmente.

No entanto, é importante observar que as permissões associadas ao bucket afetam somente os objetos que pertencem ao dono do bucket. Objetos carregados por outras contas, a menos que explicitamente configurado, podem ter suas próprias permissões individuais.

Cenário de Uso

  • Conceder permissões para que outras contas carreguem objetos no bucket.
  • Assegurar que o proprietário do bucket tenha controle total sobre os objetos enviados por terceiros.

Exemplo de Política

Permitir que qualquer usuário exclua objetos de um bucket específico:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:DeleteObject",
"Resource": "meu-bucket"
}
]
}

Estrutura de uma Bucket Policy

As Bucket Policies seguem um formato JSON estruturado, similar a políticas do IAM. Elas são compostas por vários blocos que definem como as permissões devem ser aplicadas. Abaixo, detalho cada um dos componentes principais de uma Bucket Policy.

Bloco de Versão

O bloco de versão é um campo obrigatório e define o esquema de políticas que está sendo utilizado. Atualmente, o valor suportado é "2012-10-17", que indica a versão de sintaxe de política.

Exemplo:

"Version": "2012-10-17"

Bloco de Identificação

O bloco de identificação, opcional, permite adicionar uma string de ID à política para identificação em auditorias e logs. É uma prática recomendada, mas não obrigatória.

Exemplo:

"Id": "Policy1234567890"

Bloco de Declarações (Statement)

O bloco mais importante, pois define as permissões que serão concedidas ou negadas. É composto por uma lista de declarações, onde cada declaração especifica uma permissão ou um conjunto de permissões.

"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:DeleteObject",
"Resource": "meu-bucket"
}
]

Componentes do Bloco de Declarações

  • Sid (String de Identificação): Opcional, usado para fornecer um identificador único para a declaração.Exemplo:

    "Sid": "Stmt1234567890"
  • Effect (Efeito): Campo obrigatório que define se a permissão é de Allow (permitir) ou Deny (negar).Exemplo:

    "Effect": "Allow"
  • Principal (Principal): Especifica para quem a permissão é concedida ou negada. Pode ser um usuário específico, um grupo, uma conta ou todos (*).Exemplo:

    "Principal": "*"
  • Action (Ação): Define quais ações podem ou não ser realizadas no bucket. Isso inclui operações como s3:PutObject, s3:GetObject, s3:DeleteObject. No exemplo abaixo, temos uma lista com todas as operações que temos disponíveis.Exemplo:

    "Action": [
    "s3:DeleteBucketPolicy",
    "s3:GetBucketAcl",
    "s3:GetBucketPolicy",
    "s3:GetBucketPolicyStatus",
    "s3:GetBucketTagging",
    "s3:GetBucketVersioning",
    "s3:ListBucket",
    "s3:ListBucketMultipartUploads",
    "s3:ListBucketVersions",
    "s3:PutBucketAcl",
    "s3:PutBucketPolicy",
    "s3:PutBucketTagging",
    "s3:PutBucketVersioning"
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectAttributes",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:GetObjectVersionAttributes",
    "s3:ListMultipartUploadParts",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectVersionAcl"
    ]
  • Resource (Recurso): Define em quais buckets ou objetos a política será aplicada. Pode ser o bucket (meu-bucket) ou objetos específicos dentro do bucket (meu-bucket/*).Exemplo:

    "Resource": "meu-bucket/*"

Exemplo Completo de Estrutura de uma Bucket Policy

Aqui está um exemplo completo de uma Bucket Policy que permite que qualquer entidade (*) exclua, carregue e acesse objetos dentro de um bucket específico:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "meu-bucket/*"
}
]
}

Gerenciamento de Bucket Policies no Magalu Cloud

No Magalu Cloud, você pode gerenciar suas Bucket Policies diretamente através do console de gerenciamento disponível em: https://console.magalu.cloud/.

Esse recurso proporciona um ambiente centralizado e de fácil uso para garantir que suas políticas estão configuradas de acordo com as melhores práticas de segurança e governança de dados.

Confira em nossa Documentação como fazer o gerenciamento de suas Bucket Policies, utilizando o console de gerenciamento ou CLI.

Considerações de Segurança

Ao definir permissões através de Bucket Policies, é importante tomar cuidados especiais para evitar vazamentos de dados ou acessos indevidos. Por exemplo:

  • Limitar o uso de Principal: "*", que concede permissão para qualquer entidade, somente quando absolutamente necessário.
  • Monitorar regularmente os logs de acesso e uso do bucket para garantir que apenas as entidades autorizadas estejam acessando os dados.