DEV Community

Cover image for Amazon S3: Exemplos de políticas do bucket
Alexandre Freire
Alexandre Freire

Posted on

Amazon S3: Exemplos de políticas do bucket

Esta seção apresenta alguns exemplos de casos de uso típicos de políticas de bucket. As políticas usam as sequências bucket e examplebucket no valor do recurso. Para testar essas políticas, você precisará substituir essas sequências pelo nome do bucket. Para obter informações sobre a linguagem de políticas de acesso, consulte Visão geral da linguagem da política de acesso.

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

Você pode usar o Gerador de politicas da AWS para criar uma política de bucket para o bucket do Amazon S3. Em seguida, você pode usar o documento gerado para definir a política de bucket usando o Console do Amazon S3, várias ferramentas de terceiros ou seu aplicativo.

Importante

Ao testar as permissões usando o console do Amazon S3, você precisará conceder permissões adicionais necessárias para o console — as permissões —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 Uma demonstração de exemplo: uso de políticas de usuário para controlar o acesso ao bucket.

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 todas as solicitações para essas operações incluam a ACL public-read predefinida. Para obter mais informações, consulte Especificação de permissões em uma política e Especificação de condições em uma política.

{
  "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:::examplebucket/*"],
      "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}}
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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 Especificação de permissões em uma política 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.

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Atenção

Tenha cuidado ao conceder acesso anônimo ao bucket do S3. Quando você concede acesso anônimo, qualquer pessoa no mundo pode acessar seu bucket. É altamente recomendável que você nunca conceda nenhum tipo de acesso anônimo de gravação ao seu bucket do S3.

Restringir o acesso a endereços IP específicos

O exemplo a seguir concede permissões a qualquer usuário para executar qualquer operação do Amazon S3 em objetos no bucket especificado. No entanto, a solicitação deve se originar no intervalo de endereços IP especificados na condição.

A condição nesta instrução identifica o intervalo 54.240.143.* de endereços IP do protocolo de internet versão 4 (IPv4), com uma exceção: 54.240.143.188.

O bloco da Condition usa as condições IpAddress e 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 Especificação de condições em uma política. Os valores IPv4 aws:sourceIp usam a notação CIDR padrão. Para obter mais informações, consulte Operadores de condição de endereço IP no Guia do usuário do IAM.

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
         "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
      } 
    } 
  ]
}
Enter fullscreen mode Exit fullscreen mode

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 permitirá acesso aos endereços IP de exemplo 54.240.143.1 e 2001:DB8:1234:5678::1 e negará o acesso para os 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 0s, 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.

{
  "Id":"PolicyId2",
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AllowIPmix",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:*",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "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"
          ]
        }
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Restringir o acesso a um indicador HTTP específico

Suponha que você tem um site com nome de domínio (www.example.com ou example.com) com links para fotos e vídeos armazenados em seu bucket do S3, examplebucket. Por padrão, todos os recursos do S3 são privados, 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",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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

Você pode proteger ainda mais o acesso aos objetos no bucket examplebucket adicionando negação explícita à política de bucket conforme mostrado no exemplo a seguir. A negação explícita substitui qualquer permissão que você possa conceder no bucket examplebucket usando outros meios, como ACLs ou políticas de usuário.

{
   "Version": "2012-10-17",
   "Id": "http referer policy example",
   "Statement": [
     {
       "Sid": "Allow get requests referred by www.example.com and example.com.",
       "Effect": "Allow",
       "Principal": "*",
       "Action": "s3:GetObject",
       "Resource": "arn:aws:s3:::examplebucket/*",
       "Condition": {
         "StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
       }
     },
      {
        "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::examplebucket/*",
        "Condition": {
          "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
        }
      }
   ]
}
Enter fullscreen mode Exit fullscreen mode

Conceder permissão a uma identidade de origem do Amazon CloudFront

A política de bucket do exemplo a seguir concede uma permissão de identidade de origem do CloudFront para obter (listar) todos os objetos no bucket do Amazon S3. A identidade de origem do CloudFront é usada para permitir o recurso de conteúdo privado do CloudFront. A política usa o prefixo CanonicalUser, em vez de AWS, para especificar um ID canônico de usuário. Para saber mais sobre o suporte ao CloudFront para atender a conteúdo privado, visite o tópico Atender a conteúdo privado no Guia do desenvolvedor do Amazon CloudFront. Você deve especificar o ID canônico do usuário para a identidade de acesso de origem de sua distribuição do CloudFront. Para obter instruções sobre como localizar o ID canônico do usuário, consulte Especificação de um principal em uma política.

{
   "Version":"2012-10-17",
   "Id":"PolicyForCloudFrontPrivateContent",
   "Statement":[
     {
       "Sid":" Grant a CloudFront Origin Identity access to support private content",
       "Effect":"Allow",
       "Principal":{"CanonicalUser":"CloudFront Origin Identity Canonical User ID"},
       "Action":"s3:GetObject",
       "Resource":"arn:aws:s3:::examplebucket/*"
     }
   ]
}
Enter fullscreen mode Exit fullscreen mode

Adição de uma política de bucket para exigir MFA

O Amazon S3 oferece suporte ao acesso de API protegido por MFA, um recurso que pode impor a autenticação multifator (MFA) 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. É 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 AWS Multi-Factor Authentication. Você pode exigir a autenticação MFA para todas as solicitações de acesso a seus recursos do Amazon S3.

Você pode impor o requisito de autenticação MFA usando a chave aws:MultiFactorAuthAge em uma política de bucket. Os usuários do IAM podem acessar recursos do Amazon S3 usando as credenciais temporárias emitidas pelo AWS Security Token Service (STS). Você fornece o código da MFA no momento da solicitação do STS.

Quando o Amazon S3 recebe uma solicitação com autenticação MFA, 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 de política de bucket a seguir. A política negará qualquer operação do Amazon S3 na pasta /taxdocuments no bucket examplebucket se a solicitação não for autenticada pela MFA. Para saber mais sobre a autenticação MFA, consulte Usar a 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:::examplebucket/taxdocuments/*",
        "Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
      }
    ]
 }
Enter fullscreen mode Exit fullscreen mode

A condição Null no bloco Condition é avaliada como verdadeira se o valor da chave aws:MultiFactorAuthAge for nulo indicando que as credenciais de segurança temporárias na solicitação foram criadas sem a chave 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 declaração concede a permissão s3:GetObjectem um bucket (examplebucket) para todos, e outra declaração restringe ainda mais o acesso à pasta examplebucket/taxdocuments no bucket exigindo a autenticação MFA.

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

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:::examplebucket/taxdocuments/*",
        "Condition": {"Null": {"aws:MultiFactorAuthAge": true }}
      },
      {
        "Sid": "",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
        "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }}
       },
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": "*",
         "Action": ["s3:GetObject"],
         "Resource": "arn:aws:s3:::examplebucket/*"
       }
    ]
 }
Enter fullscreen mode Exit fullscreen mode

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

Você pode permitir que outra conta da AWS faça upload de objetos em seu bucket. No entanto, você pode decidir que, como proprietário do bucket, você deve ter controle total sobre os objetos carregados no bucket. A política a seguir impõe que uma conta específica da AWS (111111111111) não tenha permissão para fazer upload de objetos a menos que essa conta conceda acesso de controle total ao proprietário do bucket identificado pelo endereço de e-mail (xyz@amazon.com). A condição StringNotEquals na política especifica a chave de condição s3:x-amz-grant-full-control para expressar a exigência.

{
   "Version":"2012-10-17",
   "Statement":[
     {
       "Sid":"111",
       "Effect":"Allow",
       "Principal":{"AWS":"1111111111"},
       "Action":"s3:PutObject",
       "Resource":"arn:aws:s3:::examplebucket/*"
     },
     {
       "Sid":"112",
       "Effect":"Deny",
       "Principal":{"AWS":"1111111111" },
       "Action":"s3:PutObject",
       "Resource":"arn:aws:s3:::examplebucket/*",
       "Condition": {
         "StringNotEquals": {"s3:x-amz-grant-full-control":["emailAddress=xyz@amazon.com"]}
       }
     }
   ]
}
Enter fullscreen mode Exit fullscreen mode

Conceder permissões para o inventário do Amazon S3 e a análise do Amazon S3

O inventário do Amazon S3 cria listas dos objetos em um bucket do 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 é gravado e o bucket onde o arquivo de exportação da análise é gravado é chamado de bucket de destino. Você deve criar uma política de bucket para o bucket de destino ao configurar o inventário de um bucket do S3 e ao configurar a exportação da análise. 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 (PUTs) da conta do bucket de origem para o bucket de destino. Você usa uma política de bucket como essa no bucket de destino ao configurar o inventário do Amazon S3 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:::destination-bucket/*"],
      "Condition": {
          "ArnLike": {
              "aws:SourceArn": "arn:aws:s3:::source-bucket"
           },
         "StringEquals": {
             "aws:SourceAccount": "1234567890",
             "s3:x-amz-acl": "bucket-owner-full-control"
          }
       }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Collapse
 
823_30191 profile image
823_30191

Fala Alexandre bom dia;

Primeiramente, excelente tópico.

Gostaria de tirar uma duvida com você, seguinte criei uma regra de exclusão de arquivos em um dos meus Buckets no S3, a regra esta baseada em um prefixo. O prefixo em questão é o seguinte: TST-1/DIFF/File01.diff

Pasta {TST-1} Sub pasta {DIFF} Arquivo a ser apagado {File01.diff} - é correto usar um prefixo dessa forma ?

Esse é um teste, mas na verdade o que eu estou tentando fazer é um prefixo informando para que tudo que esteja na pasta TST-1/ Sub pasta/DIFF com a extensão.diff seja apagado.

Muito Obrigado pelo seu tempo em analisar a minha duvida.