Exemplos de políticas de bucket - Amazon Simple Storage Service

Exemplos de políticas de bucket

Esta seção apresenta alguns exemplos de casos de uso típicos de políticas de bucket. As políticas usam strings DOC-EXAMPLE-BUCKET no valor do recurso. Para testar essas políticas, será necessário substituir essas sequências pelo nome do bucket. Para obter informações sobre políticas de bucket, consulte Uso de políticas de bucket. Para obter mais informações sobre o texto das políticas, consulte Políticas e permissões no Amazon S3.

Uma política de bucket é baseada em recursos que você pode usar para conceder permissões de acesso ao bucket e aos objetos contidos nele. Só o proprietário do bucket pode associar uma política a um bucket. As permissões anexadas ao bucket se aplicam a todos os objetos do bucket que pertencem ao proprietário do bucket. Essas permissões não se aplicam a objetos de propriedade de outras Contas da AWS.

Por padrão, quando outra Conta da AWS carrega um objeto no bucket do S3, essa conta (que gravou o objeto) é a proprietária do objeto, tem acesso a ele e pode conceder acesso a outros usuários por meio de listas de controle de acesso (ACLs). É possível usar Object Ownership para alterar esse comportamento padrão para que as ACLs sejam desabilitadas e você, como proprietário do bucket, automaticamente seja proprietário de todos os objetos de seu bucket. Como resultado, o controle de acesso para seus dados é baseado em políticas, como políticas do IAM, políticas de bucket do S3, políticas de endpoint da Virtual Private Cloud (VPC) e políticas de controle de serviço (SCPs) do AWS Organizations. Para obter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Para obter mais informações sobre políticas de bucket, consulte Uso de políticas de bucket.

nota

As políticas de bucket são limitadas a 20 KB.

Você pode usar o AWS Policy Generator para criar uma política de bucket para o bucket do Amazon S3. Depois, use o documento gerado para definir a política de bucket usando o console do Amazon S3, por meio de várias ferramentas de terceiros ou pela sua aplicação.

Importante

Ao testar as permissões usando o console do Amazon S3, você deve conceder as permissões adicionais que o console exige: s3:ListAllMyBuckets, s3:GetBucketLocation e s3:ListBucket. Para obter um exemplo de passo a passo que concede permissões aos usuários e testa-as usando o console, consulte Controlar o acesso a um bucket com políticas de usuário.

Conceder permissões a várias contas com condições adicionadas

A política de exemplo a seguir concede as permissões s3:PutObject e s3:PutObjectAcl a várias Contas da AWS e exige que as solicitações para essas operações incluam a lista de controle de acesso (ACL) public-read predefinida. Para obter mais informações, consulte Ações do Amazon S3 e Exemplos de chave de condição do Amazon S3.

Atenção

Tenha cautela ao conceder acesso anônimo ao seu bucket do Amazon S3 ou ao desabilitar as configurações de bloqueio de acesso público. Quando você concede acesso anônimo, qualquer pessoa no mundo pode acessar seu bucket. Recomendamos nunca conceder acesso anônimo ao seu bucket do Amazon S3, a menos que seja especificamente necessário, como com a hospedagem de site estático.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddCannedAcl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:root" ] }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": [ "public-read" ] } } } ] }

Conceder permissão somente leitura para um usuário anônimo

A política de exemplo a seguir concede a permissão s3:GetObject aos usuários anônimos públicos. Para obter uma lista de permissões e as operações que elas permitem, consulte Ações do Amazon S3 Essa permissão permite que qualquer pessoa leia os dados do objeto, o que é útil quando você configura o bucket como um site e deseja que todos possam ler os objetos do bucket. Antes de usar uma política de bucket para conceder permissão somente leitura a um usuário anônimo, é necessário desabilitar as configurações de bloqueio de acesso público ao seu bucket. Para obter mais informações, consulte Configuração de permissões para acesso ao site.

Atenção

Tenha cautela ao conceder acesso anônimo ao seu bucket do Amazon S3 ou ao desabilitar as configurações de bloqueio de acesso público. Quando você concede acesso anônimo, qualquer pessoa no mundo pode acessar seu bucket. Recomendamos nunca conceder acesso anônimo ao seu bucket do Amazon S3, a menos que seja especificamente necessário, como com a hospedagem de site estático.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }

Limitar o acesso a endereços IP específicos

O exemplo a seguir nega permissões a qualquer usuário para executar quaisquer operações do Amazon S3 em objetos no bucket do S3 especificado, a menos que a solicitação tenha origem no intervalo de endereços IP especificados na condição.

A condição nessa instrução identifica 54.240.143.0/24 como o intervalo de endereços IP do Internet Protocol versão 4 (IPv4) permitidos.

O bloco Condition usa a condição NotIpAddress e a chave de condição aws:SourceIp, que é uma chave de condição que abrange toda a AWS. Para obter mais informações sobre essas chaves de condição, consulte Exemplos de chave de condição do Amazon S3. Os valores IPv4 aws:SourceIp usam a notação CIDR padrão. Para obter mais informações, consulte Referência de elementos de política JSON do IAM no Guia do usuário do IAM.

Atenção

Antes de usar essa política, substitua o intervalo de endereços IP 54.240.143.0/24 desse exemplo por um valor apropriado para o seu caso de uso. Caso contrário, você perderá a capacidade de acessar seu bucket.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "54.240.143.0/24" } } } ] }

Permitir endereços IPv4 e IPv6

Ao começar a usar os endereços IPv6, recomendamos que você atualize todas as políticas da sua organização com os intervalos de endereços IPv6 além dos intervalos de IPv4 existentes para garantir que as políticas continuem a funcionar ao fazer a transição para o IPv6.

O exemplo da política de bucket a seguir mostra como misturar intervalos de endereços IPv4 e IPv6 para cobrir todos os endereços IP válidos de sua organização. A política de exemplo permite acesso aos endereços IP 54.240.143.1 e 2001:DB8:1234:5678::1 e nega acesso aos endereços 54.240.143.129 e 2001:DB8:1234:5678:ABCD::1.

Os valores de IPv6 para aws:SourceIp devem estar em formato CIDR padrão. Para IPv6, oferecemos suporte ao uso de :: para representar um intervalo de IPv6 (por exemplo 2032001:DB8:1234:5678::/64). Para obter mais informações, consulte Operadores de condição de endereço IP no Guia do usuário do IAM.

Atenção

Substitua os intervalos de endereços IP neste exemplo por valores apropriados para o seu caso de uso antes de usar esta política. Caso contrário, você pode perder a capacidade de acessar seu bucket.

{ "Id": "PolicyId2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIPmix", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "54.240.143.128/30", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

Restringir o acesso a um indicador HTTP específico

Suponha que você tenha um site com nome de domínio (www.example.com ou example.com) com links para fotos e vídeos armazenados no bucket do Amazon S3, DOC-EXAMPLE-BUCKET. Por padrão, todos os recursos do Amazon S3 são privados e, portanto, somente a Conta da AWS que criou os recursos pode acessá-los. Para permitir acesso de leitura a esses objetos em seu site, você pode adicionar uma política de bucket que conceda a permissão s3:GetObject com uma condição, usando a chave aws:Referer, de que a solicitação GET deve se originar de páginas específicas da web. A política a seguir especifica a condição StringLike com a chave de condição aws:Referer.

{ "Version":"2012-10-17", "Id":"HTTP referer policy example", "Statement":[ { "Sid":"Allow GET requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

Certifique-se de que os navegadores que você usa incluam o cabeçalho HTTP referer na solicitação.

Atenção

Recomendamos cuidado ao usar a chave de condição aws:Referer. É perigoso incluir um valor de cabeçalho do indicador HTTP conhecido publicamente. Partes não autorizadas podem usar navegadores personalizados ou modificados para fornecer qualquer valor de aws:Referer que escolherem. Assim sendo, não use aws:Referer para impedir que partes não autorizadas façam solicitações diretas à AWS.

A chave de condição aws:Referer é oferecida apenas para permitir que os clientes protejam o conteúdo digital, como o conteúdo armazenado no Simple Storage Service (Amazon S3), evitando que seja referenciado em sites de terceiros não autorizados. Para obter mais informações, consulteaws:Referer no Guia do usuário do IAM.

Conceder permissão para uma OAI do Amazon CloudFront

A seguinte política de bucket de exemplo concede uma permissão de identidade de acesso de origem (OAI – Origin Access Identity) do CloudFront para obter (ler) todos os objetos em seu bucket do Amazon S3. Você pode usar uma OAI do CloudFront para permitir que os usuários acessem objetos em seu bucket por meio do CloudFront, mas não diretamente pelo Amazon S3. Para obter mais informações, consulte Restringir acesso ao conteúdo do Amazon S3 usando uma identidade de acesso de origem no Guia do desenvolvedor do Amazon CloudFront.

A política a seguir usa o ID da OAI como Principal da política. Para obter mais informações sobre o uso de políticas de bucket do S3 para conceder acesso a uma OAI do CloudFront, consulte Usar políticas de bucket do Amazon S3 no Guia do desenvolvedor do Amazon CloudFront.

Para usar este exemplo:

  • Substitua EH1HDMB1FH2TC pelo ID da OAI. Para localizar o ID da OAI, consulte a página Origin Access Identity (Identidade do acesso de origem) no console do CloudFront ou use ListCloudFrontOriginAccessIdentities na API do CloudFront.

  • Substitua DOC-EXAMPLE-BUCKET pelo nome do bucket do Amazon S3.

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Adicionar uma política de bucket para exigir MFA

O Amazon S3 oferece suporte a acesso à API protegido por MFA, um recurso que pode impor a autenticação multifator para acessar os recursos do Amazon S3. A autenticação multifator fornece um nível extra de segurança que pode ser aplicado a seu ambiente da AWS. MFA é um recurso de segurança que exige que os usuários comprovem a posse física de um dispositivo MFA fornecendo um código válido de MFA. Para obter mais informações, consulte Autenticação multifator da AWS. É possível exigir a autenticação MFA para todas as solicitações de acesso a seus recursos do Amazon S3.

Para impor o requisito de MFA, use a chave aws:MultiFactorAuthAge em uma política de bucket. AWS Identity and Access Management Os usuários do IAM podem acessar os recursos do Amazon S3 usando credenciais temporárias emitidas pelo AWS Security Token Service (AWS STS). Forneça o código da MFA no momento da solicitação do AWS STS.

Quando o Amazon S3 recebe uma solicitação com autenticação multifator, a chave aws:MultiFactorAuthAge fornece um valor numérico que indica há quanto tempo (em segundos) a credencial temporária foi criada. Se a credencial temporária fornecida na solicitação não foi criada usando um dispositivo MFA, esse valor de chave será nulo (ausente). Em uma política de bucket, você pode adicionar uma condição para verificar esse valor, conforme mostrado no exemplo a seguir. O exemplo de política negará qualquer operação do Amazon S3 na pasta /taxdocuments do bucket DOC-EXAMPLE-BUCKET se a solicitação não for autenticada usando MFA. Para saber mais sobre MFA, consulte Uso da autenticação multifator (MFA) na AWS no Guia do usuário do IAM.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

A condição Null no bloco Condition será avaliada como true se o valor da chave aws:MultiFactorAuthAge for nulo, o que indica que as credenciais de segurança temporárias da solicitação foram criadas sem um dispositivo de MFA.

A política de bucket a seguir é uma extensão da política de bucket anterior. A política inclui duas declarações de política. Uma instrução concede a permissão s3:GetObject em um bucket (DOC-EXAMPLE-BUCKET) a todos. Outra instrução restringe ainda mais o acesso à pasta DOC-EXAMPLE-BUCKET/taxdocuments no bucket ao exigir MFA.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Opcionalmente, você pode usar uma condição numérica para limitar a duração na qual a chave aws:MultiFactorAuthAge é válida, independentemente do ciclo de vida da credencial de segurança temporária usada para autenticar a solicitação. Por exemplo, a seguinte política de bucket, além de exigir autenticação MFA, também verifica há quanto tempo a sessão temporária foi criada. A política negará qualquer operação se o valor da chave aws:MultiFactorAuthAge indicar que a sessão temporária foi criada há mais de uma hora (3.600 segundos).

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Conceder permissões entre contas para fazer upload de objetos garantindo que o proprietário do bucket tenha controle total

O exemplo a seguir mostra como permitir que outra Conta da AWS faça upload de objetos no bucket e, ao mesmo tempo, garantir controle total sobre os objetos carregados. Essa política concede a uma Conta da AWS específica (111122223333) a capacidade de carregar objetos se essa conta incluir a ACL pré-configurada bucket-owner-full-control no carregamento. A condição StringEquals da política especifica a chave s3:x-amz-acl condition para expressar essa exigência (consulte Exemplos de chave de condição do Amazon S3).

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"111122223333"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

Conceder permissões para o Amazon S3 Inventory e a análise do Simple Storage Service (Amazon S3)

O Amazon S3 Inventory cria listas dos objetos em um bucket do Amazon S3, e a exportação da análise do Amazon S3 cria arquivos de saída dos dados usados na análise. O bucket para o qual o inventário lista objetos é chamado de bucket de origem. O bucket onde o arquivo de inventário ou arquivo de exportação da análise é gravado é chamado de bucket de destino. Ao configurar a exportação de um inventário ou uma análise, você deve criar uma política de bucket para o bucket de destino. Para obter mais informações, consulte Inventário do Amazon S3 e Análise do Amazon S3 – Análise de classe de armazenamento.

O exemplo da política de bucket a seguir concede permissão ao Amazon S3 para gravar objetos (solicitações PUT) da conta do bucket de origem para o bucket de destino. Use uma política de bucket como esta no bucket de destino ao configurar o Amazon S3 Inventory e a exportação da análise do Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InventoryAndAnalyticsExamplePolicy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destinationbucket/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "111122223333", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Restringir o acesso a um relatório do Amazon S3 Inventory

Inventário do Amazon S3 cria listas dos objetos em um bucket do S3 e dos metadados de cada objeto. Com s3:PutInventoryConfiguration, o usuário tem permissão para criar um relatório de inventário que inclui todos os campos de metadados de objetos que estão disponíveis e especificar o bucket de destino para armazenar o inventário. Um usuário com acesso de leitura aos objetos no bucket de destino pode acessar todos os campos de metadados do objeto que estão disponíveis no relatório de inventário. Para obter mais informações sobre os campos de metadados que estão disponíveis no S3 Inventory, consulte Lista do Amazon S3 Inventory.

Para impedir que um usuário configure um relatório do S3 Inventory de todos os metadados de objetos disponíveis, remova a permissão s3:PutInventoryConfiguration do usuário.

Para impedir que um usuário acesse seu relatório do S3 Inventory em um bucket de destino, crie uma política de bucket como o exemplo a seguir no bucket de destino. Esse exemplo de política de bucket impede que todas as entidades principais, exceto a usuária Ana, acessem o relatório de inventário DOC-EXAMPLE-DESTINATION-BUCKET-INVENTORY no bucket de destino DOC-EXAMPLE-DESTINATION-BUCKET.

{ "Id": "GetObjectPolicy", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowListBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ], "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/Ana" ] } }, { "Sid": "AllowACertainUserToReadObject", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/DOC-EXAMPLE-DESTINATION-BUCKET-INVENTORY/*", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/Ana" ] } }, { "Sid": "DenyAllTheOtherUsersToReadObject", "Action": [ "s3:GetObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/DOC-EXAMPLE-DESTINATION-BUCKET-INVENTORY/*", "Principal": { "AWS": "*" }, "Condition": { "ArnNotEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:user/Ana" } } } ] }

Conceder permissões para o Amazon S3 Storage Lens

O Amazon S3 Storage Lens agrega suas métricas de uso e atividade e exibe as informações no snapshot da conta na página inicial do console (Buckets) do Amazon S3, em painéis interativos ou por meio de uma exportação de métricas que você pode obter por download no formato CSV ou Parquet. Você pode usar o painel para visualizar insights e tendências, sinalizar discrepâncias e receber recomendações para otimizar os custos de armazenamento e aplicar as práticas recomendadas de proteção de dados. Você pode usar o S3 Storage Lens por meio do AWS Management Console, da AWS CLI, de AWS SDKs ou da API REST.

O S3 Storage Lens pode agregar seu uso de armazenamento às exportações de métricas em um bucket do Amazon S3 para análise posterior. O bucket em que o S3 Storage Lens coloca as exportações de métricas dele é conhecido como bucket de destino. Ao configurar a exportação de métricas do S3 Storage Lens, você deve ter uma política para o bucket de destino. Para mais informações, consulte Avaliação de sua atividade de armazenamento e uso com o Amazon S3 Storage Lens.

O exemplo de política de bucket a seguir concede ao Amazon S3 permissão para gravar objetos (solicitações PUT) em um bucket de destino. Você usa uma política de bucket como essa no bucket de destino ao configurar uma exportação de métricas do S3 Storage Lens.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": "storage-lens.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/111122223333/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:s3:Região da AWS:111122223333:storage-lens/storage-lens-dashboard-configuration-id" } } } ] }

Ao configurar uma exportação de métricas no nível da organização do S3 Storage Lens, use a modificação a seguir na declaração Resource da política de bucket anterior.

"Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/your-organization-id/*",