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

Exemplos de políticas de bucket

Com as políticas de bucket do Amazon S3, você pode proteger o acesso a objetos em seus buckets, para que somente usuários com as permissões apropriadas possam acessá-los. Você pode até mesmo impedir que usuários autenticados sem as permissões apropriadas acessem seus recursos do Amazon S3.

Esta seção apresenta exemplos de casos de uso típicos de políticas de bucket. Essas políticas de exemplo usam DOC-EXAMPLE-BUCKET como valor do recurso. Para testar essas políticas, substitua user input placeholders por suas informações (como o nome do seu bucket).

Para conceder ou negar permissões para um conjunto de objetos, você pode usar caracteres curinga (*) em nomes de recursos da Amazon (ARNs) e outros valores. Por exemplo, você pode controlar o acesso a grupos de objetos que começam com um prefixo ou termine com uma determinada extensão, como .html.

Para obter mais informações sobre a linguagem da política do AWS Identity and Access Management (IAM), consulte Políticas e permissões no Amazon S3.

nota

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 acessar um exemplo de demonstração que concede permissões aos usuários e testa essas permissões usando o console, consulte Controlar o acesso a um bucket com políticas de usuário.

Recursos adicionais para criar políticas de bucket

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

Você pode usar as configurações de política para conceder acesso a usuários anônimos públicos, o que é útil se estiver configurando o bucket como um site estático. Isso exige a desabilitação do Bloqueio de Acesso Público ao bucket. Para obter mais informações sobre como fazer isso e as políticas necessárias, consulte Configuração de permissões para acesso ao site. Para saber como configurar políticas mais restritivas para o mesmo propósito, consulte Como posso conceder acesso público de leitura a alguns objetos em um bucket do Amazon S3?.

Por padrão, o Amazon S3 bloqueia o acesso público à sua conta e aos seus buckets. Se quiser usar um bucket para hospedar um site estático, use estas etapas para editar as configurações de bloqueio de acesso público.

Atenção

Antes de concluir esta etapa, revise Bloquear o acesso público ao armazenamento do Amazon S3 para garantir que você entenda e aceite os riscos envolvidos em permitir o acesso público. Ao desativar as configurações de bloqueio de acesso público para tornar seu bucket público, qualquer pessoa na Internet pode acessá-lo. Recomendamos que você bloqueie todo o acesso público aos buckets.

  1. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Escolha o nome do bucket configurado como um site estático.

  3. Escolha Permissions (Permissões).

  4. Em Block public access (bucket settings) (Bloqueio de acesso público (configurações de bucket), escolha Edit (Editar).

  5. Desmarque Block all public access (Bloquear todo acesso público) e escolha Save changes (Salvar alterações).

    Atenção

    Antes de concluir esta etapa, revise Bloquear o acesso público ao armazenamento do Amazon S3 para garantir que você entenda e aceite os riscos envolvidos em permitir o acesso público. Ao desativar as configurações de bloqueio de acesso público para tornar seu bucket público, qualquer pessoa na Internet pode acessá-lo. Recomendamos que você bloqueie todo o acesso público aos buckets.

    O Amazon S3 desativa as configurações do Bloqueio de acesso público para seu bucket. Para criar um site público e estático, você também pode ter que editar as configurações de Bloqueio de acesso público para sua conta antes de adicionar uma política de bucket. Se as configurações da conta para bloquear acesso público estiverem ativadas no momento, você verá uma observação em Block public access (bucket settings) (Bloqueio de acesso público (configurações de bucket)).

Exigir criptografia

Exigir SSE-KMS para todos os objetos gravados em um bucket

O exemplo de política a seguir exige que cada objeto gravado no bucket seja criptografado com criptografia do lado do servidor usando chaves do AWS Key Management Service (AWS KMS) (SSE-KMS). Se o objeto não estiver criptografado com SSE-KMS, a solicitação será negada.

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMS", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "true" } } }] }

Exigir SSE-KMS com uma AWS KMS key específica para todos os objetos gravados em um bucket

O exemplo de política a seguir impede que objetos sejam gravados no bucket quando não estão criptografados com SSE-KMS usando um ID de chave do KMS específico. Mesmo que os objetos sejam criptografados com SSE-KMS usando um cabeçalho por solicitação ou criptografia padrão de bucket, os objetos não serão gravados no bucket se não tiverem sido criptografados com a chave do KMS especificada. Substitua o ARN da chave do KMS usado neste exemplo pelo ARN da sua chave do KMS.

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "ArnNotEqualsIfExists": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-2:111122223333:key/01234567-89ab-cdef-0123-456789abcdef" } } }] }

Gerenciar buckets usando ACLs predefinidas

Conceder permissões a várias contas para fazer upload de objetos ou definir ACLs de objetos para acesso público

O exemplo de política 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 de política do Amazon S3 e Exemplos de chave de condição do Amazon S3.

Atenção

A ACL predefinida public-read permite que qualquer pessoa no mundo veja os objetos em seu bucket. 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. Se você quiser habilitar configurações de bloqueio de acesso público para hospedagem de sites estáticos, consulte Tutorial: Configurar um site estático no Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPublicReadCannedAcl", "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õ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 na política especifica a chave de condição s3:x-amz-acl para expressar o requisito de ACL predefinida. Para ter mais informações, 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"} } } ] }

Gerenciar o acesso a objetos com marcação de objetos

Permitir que um usuário leia somente os objetos que têm a chave e o valor de uma etiqueta específica

A política de permissões a seguir limita a capacidade de leitura dos usuários para que leiam somente objetos que tenham a chave e o valor da tag environment: production. Essa política usa a chave de condição s3:ExistingObjectTag para especificar a chave e o valor da etiqueta.

{ "Version":"2012-10-17", "Statement":[ { "Principal":{ "AWS":"arn:aws:iam::111122223333:role/JohnDoe" }, "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringEquals":{ "s3:ExistingObjectTag/environment":"production" } } } ] }

Restringir quais chaves de etiqueta de objeto os usuários podem adicionar

O exemplo de política a seguir concede ao usuário permissão para executar a ação s3:PutObjectTagging, que permite que o usuário adicione etiquetas a um objeto existente. A condição usa a chave de condição s3:RequestObjectTagKeys para especificar as chaves de etiqueta permitidas, como Owner ou CreationDate. Para obter mais informações, consulte Criar uma condição que testa vários valores de chave no Guia do usuário do IAM.

A política garante que cada chave de etiqueta especificada na solicitação seja uma chave de etiqueta autorizada. O qualificador ForAnyValue na condição garante que pelo menos uma das chaves especificadas esteja presente na solicitação.

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:role/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

Exigir a chave e o valor de uma etiqueta específica ao permitir que os usuários adicionem etiquetas de objeto

O exemplo de política a seguir concede ao usuário permissão para executar a ação s3:PutObjectTagging, que permite que o usuário adicione etiquetas a um objeto existente. A condição requer que o usuário inclua uma chave de etiqueta específica (como Project) com o valor definido como X.

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X" } } } ] }

Permitir que um usuário adicione somente objetos com a chave e o valor de uma etiqueta específica

O exemplo de política a seguir concede ao usuário permissão para realizar a ação s3:PutObject para que possa adicionar objetos a um bucket. No entanto, a instrução Condition restringe as chaves e os valores de etiqueta permitidos nos objetos enviados. Neste exemplo, o usuário só pode adicionar objetos que tenham a chave de etiqueta específica (Department) com o valor definido como Finance no bucket.

{ "Version": "2012-10-17", "Statement": [{ "Principal":{ "AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Department": "Finance" } } }] }

Gerenciar o acesso a objetos usando chaves de condição globais

As chaves de condição globais são chaves de condição com um prefixo aws. Os Serviços da AWS podem oferecer suporte a chaves de condição globais ou chaves específicas do serviço que incluem seu prefixo de serviço. É possível usar o elemento Condition de uma política JSON para comparar chaves em uma solicitação com os valores de chave especificados em sua política.

Restringir o acesso somente às entregas de logs de acesso ao servidor do Amazon S3

No exemplo de política de bucket a seguir, a chave de condição global aws:SourceArn é usada para comparar o nome do recurso da Amazon (ARN), fazendo uma solicitação de serviço a serviço com o ARN especificado na política. A chave de condição global aws:SourceArn é usada para impedir que o serviço Amazon S3 seja usado como um representante confuso durante transações entre os serviços. Somente o serviço Amazon S3 tem permissão para adicionar objetos ao bucket do Amazon S3.

Este exemplo de política de bucket concede permissões de s3:PutObject somente à entidade principal do serviço de registro em log (logging.s3.amazonaws.com).

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjectS3ServerAccessLogsPolicy", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111111111111" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::EXAMPLE-SOURCE-BUCKET" } } }, { "Sid": "RestrictToS3ServerAccessLogs", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs/*", "Condition": { "ForAllValues:StringNotEquals": { "aws:PrincipalServiceNamesList": "logging.s3.amazonaws.com" } } } ] }

Permitir o acesso somente à sua organização

Se você quiser exigir que todas as entidades principais do IAM que acessam um recurso sejam de uma Conta da AWS em sua organização (incluindo a conta de gerenciamento do AWS Organizations), poderá usar a chave de condição global aws:PrincipalOrgID.

Para conceder ou restringir esse tipo de acesso, defina a condição aws:PrincipalOrgID e defina o valor como o ID da sua organização na política de bucket. O ID da organização é usado para controlar o acesso ao bucket. Quando você usa a condição aws:PrincipalOrgID, as permissões da política de bucket também são aplicadas a todas as novas contas adicionadas à organização.

Aqui está um exemplo de política de bucket baseada em recursos que você pode usar para conceder a entidades principais do IAM específicas em sua organização acesso direto ao bucket. Ao adicionar a chave de condição global aws:PrincipalOrgID à sua política de bucket, agora é necessário que a conta da entidade principal esteja em sua organização para obter acesso ao recurso. Mesmo que você acidentalmente especifique uma conta incorreta ao conceder acesso, a chave de condição global aws:PrincipalOrgID atuará como uma proteção adicional. Quando uma chave global é usada em uma política, ela impede que todas as entidades principais fora da organização especificada acessem o bucket do S3. Somente entidades principais de contas na organização listada podem obter acesso ao recurso.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowGetObject", "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": ["o-aa111bb222"] } } }] }

Gerenciar o acesso com base em endereços IP específicos

Restringir o acesso a endereços IP específicos

O exemplo a seguir impede que todos os usuários executem operações do Amazon S3 em objetos nos buckets especificados, a menos que a solicitação tenha origem no intervalo de endereços IP especificado.

nota

Ao restringir o acesso a um endereço IP específico, especifique quais endpoints da VPC, endereços IP de origem VPC ou endereços IP externos podem acessar o bucket do S3. Caso contrário, você poderá perder o acesso ao bucket se a sua política negar aos usuários a execução de qualquer operação do S3 em objetos no bucket sem as permissões adequadas já em vigor.

A instrução Condition dessa política identifica 192.0.2.0/24 como o intervalo de endereços IP IPv4 (Internet Protocol versão 4) 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. A chave de condição aws:SourceIp só pode ser usada para intervalos de endereços IP públicos. 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 192.0.2.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": "192.0.2.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. Isso ajudará a garantir que as políticas continuem funcionando à medida que você faz a transição para 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 192.0.2.1 e 2001:DB8:1234:5678::1 e nega acesso aos endereços 203.0.113.1 e 2001:DB8:1234:5678:ABCD::1.

A chave de condição aws:SourceIp só pode ser usada para intervalos de endereços IP públicos. 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 2001: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": [ "192.0.2.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

Gerenciar o acesso com base em solicitações HTTP ou HTTPS

Restringir o acesso somente a solicitações HTTPS

Se você quiser evitar que possíveis invasores manipulem o tráfego de rede, poderá usar HTTPS (TLS) para permitir somente conexões criptografadas e, ao mesmo tempo, restringir o acesso de solicitações HTTP ao seu bucket. Para determinar se a solicitação é HTTP ou HTTPS, use a chave de condição global aws:SecureTransport em sua política de bucket do S3. A chave de condição aws:SecureTransport verifica se uma solicitação foi enviada usando HTTP.

Se uma solicitação retornar true, isso significa que ela foi enviada por HTTPS. Se a solicitação retornar false, isso significa que ela foi enviada por HTTP. Depois, você pode permitir ou negar acesso ao bucket com base no esquema de solicitação desejado.

No exemplo a seguir, a política de bucket nega explicitamente as solicitações HTTP.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" }] }

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 em seu bucket chamado 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 de que a solicitação GET deve se originar de páginas específicas da Web. A política a seguir restringe as solicitações usando a condição StringLike com a chave de condição aws:Referer.

{ "Version":"2012-10-17", "Id":"HTTP referer policy example", "Statement":[ { "Sid":"Allow only 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.

Gerenciar o acesso de usuários a pastas específicas

Conceder acesso a pastas específicas para os usuários

Suponha que você esteja tentando conceder a uma pasta específica para os usuários. Se o usuário do IAM e o bucket do S3 pertencerem à mesma Conta da AWS, você poderá usar uma política do IAM para conceder acesso a uma pasta de bucket específica para os usuários. Com essa abordagem, você não precisa atualizar sua política de bucket para conceder acesso. Você pode adicionar a política do IAM a um perfil do IAM para o qual vários usuários podem mudar.

Se a identidade do IAM e o bucket do S3 pertencerem a Contas da AWS diferentes, você deverá conceder acesso entre contas tanto na política do IAM quanto na política de bucket. Para obter mais informações sobre como conceder acesso entre contas, consulte Proprietário do bucket concedendo permissões de bucket entre contas.

O exemplo de política de bucket a seguir concede a JohnDoe acesso total ao console somente na pasta dele (home/JohnDoe/). Ao criar uma pasta home e conceder as permissões apropriadas aos seus usuários, você pode fazer com que vários usuários compartilhem um único bucket. Essa política consiste em três instruções Allow:

  • AllowRootAndHomeListingOfCompanyBucket: permite que o usuário (JohnDoe) liste objetos no nível raiz do bucket DOC-EXAMPLE-BUCKET e na pasta home. Essa instrução também permite que o usuário pesquise o prefixo home/ usando o console.

  • AllowListingOfUserFolder: permite que o usuário (JohnDoe) liste todos os objetos na pasta home/JohnDoe/ e em quaisquer subpastas.

  • AllowAllS3ActionsInUserFolder: permite que o usuário execute todas as ações do Amazon S3 ao conceder as permissões Read, Write e Delete. As permissões são limitadas à pasta inicial do proprietário do bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringEquals": { "s3:prefix": ["", "home/", "home/JohnDoe"], "s3:delimiter": ["/"] } } }, { "Sid": "AllowListingOfUserFolder", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringLike": { "s3:prefix": ["home/JohnDoe/*"] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:*"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/JohnDoe/*"] } ] }

Gerenciar o acesso para logs de acesso

Conceder acesso ao Application Load Balancer para habilitar logs de acesso

Ao habilitar os logs de acesso para o Application Load Balancer, você deve especificar o nome do bucket do S3 em que o balanceador de carga armazenará os logs. O bucket deve ter uma política anexada que conceda ao Elastic Load Balancing permissão para gravar no bucket.

No exemplo a seguir, a política de bucket concede ao Elastic Load Balancing (ELB) permissão para gravar os logs de acesso no bucket:

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::elb-account-id:root" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/prefix/AWSLogs/111122223333/*" } ] }
nota

Substitua elb-account-id pelo ID da Conta da AWS do Elastic Load Balancing para sua Região da AWS. Para ver a lista de regiões do Elastic Load Balancing, consulte Anexar uma política ao seu bucket do S3 no Guia do usuário do Elastic Load Balancing.

Se sua Região da AWS não aparecer na lista de regiões compatíveis do Elastic Load Balancing, use a política a seguir, que concede permissões ao serviço de entrega de logs especificado.

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/prefix/AWSLogs/111122223333/*" } ] }

Depois, configure os logs de acesso do Elastic Load Balancing habilitando-os. Você pode verificar as permissões de bucket criando um arquivo de teste.

Gerenciar o acesso para uma OAI do Amazon CloudFront

Conceder permissão para uma OAI do Amazon CloudFront

O exemplo de política de bucket a seguir concede uma permissão de identidade do acesso de origem (OAI) do CloudFront para obter (ler) todos os objetos em seu bucket do 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 do 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 como usar políticas de bucket do S3 para conceder acesso a uma OAI do CloudFront, consulte Migrar da identidade do acesso de origem (OAI) para o controle de acesso à origem (OAC) no Guia do desenvolvedor do Amazon CloudFront.

Para usar este exemplo:

{ "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/*" } ] }

Gerenciar o acesso para a Lente de Armazenamento do Amazon S3

Conceder permissões para a Lente de Armazenamento do Amazon S3

A Lente de Armazenamento do S3 agrega suas métricas e exibe as informações na seção Account snapshot (Snapshot da conta) na página Buckets do console do Amazon S3. A Lente de Armazenamento do S3 também oferece um painel interativo 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. O painel tem opções de detalhamento para gerar e visualizar insights no nível da organização, conta, Região da AWS, classe de armazenamento, bucket, prefixo ou grupo de Lente de Armazenamento. Você também pode enviar uma exportação diária de métricas em CSV ou no formato Parquet para um bucket do S3.

A Lente de Armazenamento do S3 pode exportar as métricas de uso de armazenamento agregadas 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 ter mais informações, consulte Avaliação de sua atividade de armazenamento e uso com a Lente de Armazenamento do Amazon S3.

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:region-code:111122223333:storage-lens/storage-lens-dashboard-configuration-id" } } } ] }

Ao configurar uma exportação de métricas da organização da Lente de Armazenamento do S3, use a modificação a seguir na instrução Resource da política de bucket anterior.

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

Gerenciar permissões para o Inventário do S3, análises do S3 e relatórios do Inventário do S3

Conceder permissões para o Inventário do S3 e análises do S3

O Inventário do S3 cria listas dos objetos em um bucket do, e a exportação da análise da classe de armazenamento do 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 essa no bucket de destino ao configurar o Inventário do S3 e a exportação da análise do S3.

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

Controlar a criação da configuração de relatórios do Inventário S3

Inventário do Amazon S3 cria listas dos objetos em um bucket do S3 e dos metadados de cada objeto. Com a permissão s3:PutInventoryConfiguration, o usuário tem autorização para criar uma configuração de inventário que inclui todos os campos de metadados de objetos que estão disponíveis por padrão 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 Inventário S3, remova a permissão s3:PutInventoryConfiguration do usuário.

Alguns campos de metadados de objetos nas configurações de relatório do Inventário S3 são opcionais, o que significa que estão disponíveis por padrão, mas podem ser restritos quando você concede a permissão s3:PutInventoryConfiguration a um usuário. É possível controlar se os usuários podem incluir esses campos de metadados opcionais em seus relatórios usando a chave de condição s3:InventoryAccessibleOptionalFields. Consulte uma lista dos campos de metadados opcionais disponíveis no Inventário S3 em OptionalFields na Referência de API do Amazon Simple Storage Service.

Para conceder permissão ao usuário para criar uma configuração de inventário com campos de metadados opcionais específicos, use a chave de condição s3:InventoryAccessibleOptionalFields para refinar as condições na política de bucket.

O exemplo de política a seguir concede a um usuário (Ana) permissão para criar uma configuração de inventário condicionalmente. A condição ForAllValues:StringEquals na política usa a chave de condição s3:InventoryAccessibleOptionalFields para especificar os dois campos de metadados opcionais permitidos, a saber Size e StorageClass. Então, quando Ana está criando uma configuração de inventário, os únicos campos de metadados opcionais que ela pode incluir são Size e StorageClass.

{ "Id": "InventoryConfigPolicy", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreationConditionally", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAllValues:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "Size", "StorageClass" ] } } } ] }

Para impedir que um usuário configure um relatório do Inventário S3 que inclua campos de metadados opcionais específicos, adicione uma instrução Deny explícita à política do bucket de origem. O exemplo de política de bucket a seguir impede que a usuária Ana crie uma configuração de inventário no bucket de origem DOC-EXAMPLE-SOURCE-BUCKET que inclua os campos de metadados opcionais ObjectAccessControlList ou ObjectOwner. A usuária Ana ainda pode criar uma configuração de inventário com outros campos de metadados opcionais.

{ "Id": "InventoryConfigSomeFields", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", }, { "Sid": "DenyCertainInventoryFieldCreation", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAnyValue:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "ObjectOwner", "ObjectAccessControlList" ] } } } ] }
nota

O uso da chave de condição s3:InventoryAccessibleOptionalFields nas políticas de bucket não afeta a entrega de relatórios de inventário com base nas configurações de inventário existentes.

Importante

É recomendável usar ForAllValues com efeito Allow ou ForAnyValue com efeito Deny, conforme mostrado nos exemplos anteriores.

Não use ForAllValues com efeito Deny nem ForAnyValue com efeito Allow, pois essas combinações podem ser excessivamente restritivas e bloquear a exclusão da configuração do inventário.

Para saber mais sobre os operadores do conjunto de condições ForAllValues e ForAnyValue, consulte Multivalued context keys no Guia do usuário do IAM.

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 de condição aws:MultiFactorAuthAge em uma política de bucket. 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 de condição 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 de condição 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 validade da chave aws:MultiFactorAuthAge. A duração que você especifica com a chave aws:MultiFactorAuthAge não depende 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/*" } ] }