Restringir acesso ao conteúdo do Amazon S3 usando uma identidade do acesso de origem (OAI) - Amazon CloudFront

Restringir acesso ao conteúdo do Amazon S3 usando uma identidade do acesso de origem (OAI)

Para restringir o acesso ao conteúdo fornecido dos buckets do Amazon S3, siga estas etapas:

  1. Crie um usuário especial do CloudFront chamado de uma identidade de acesso de origem (OAI) e associe-o à sua distribuição.

  2. Configure as permissões do bucket do S3 para que o CloudFront possa usar a OAI para acessar os arquivos do bucket e fornecê-los aos usuários. Verifique se os usuários não podem usar um URL direto para o bucket do S3 a fim de acessar um arquivo nele.

Depois de executar essas etapas, os usuários só poderão acessar os arquivos por meio do CloudFront, e não diretamente do bucket do S3.

nota

Se restringir o acesso a arquivos usando signed URLs ou signed cookies do CloudFront, você também não vai querer que as pessoas possam visualizar os arquivos simplesmente usando o URL do Amazon S3 direto do arquivo. Em vez disso, você quer que eles acessem os arquivos usando o URL do CloudFront para que suas proteções funcionem. Para mais informações sobre como usar cookies e URLs assinados, consulte Veicular conteúdo privado com signed URLs e cookies.

Este tópico explica em detalhes como configurar o OAI e conceder permissões para manter um acesso seguro aos arquivos do S3.

Importante

Se usar um bucket do Amazon S3 configurado como um endpoint de site, você deverá configurá-lo com o CloudFront como uma origem personalizada. Não é possível usar o recurso de identidade de acesso de origem descrito neste tópico. No entanto, é possível restringir o acesso ao conteúdo de uma origem personalizada configurando cabeçalhos personalizados e sua origem para solicitá-los. Para mais informações, consulte Restringir o acesso a arquivos em origens personalizadas.

Visão geral da configuração da OAI

Ao configurar um bucket do Amazon S3 como a origem de uma distribuição do CloudFront, você concede permissão de leitura aos arquivos no seu bucket. Isso permite que qualquer pessoa acesse seus arquivos por meio do CloudFront ou usando o URL do Amazon S3. O CloudFront não expõe URLs do Amazon S3, mas seus usuários podem ter esses URLs se a sua aplicação fornecer arquivos diretamente do Amazon S3 ou se alguém fornecer links diretos para arquivos específicos no Amazon S3.

Se você usa signed URLs ou signed cookies do CloudFront para restringir o acesso a arquivos em seu bucket do Amazon S3, talvez também seja adequado impedir que os usuários acessem seus arquivos do Amazon S3 usando URLs do Amazon S3. Se os usuários acessarem seus arquivos diretamente no Amazon S3, eles ignorarão os controles fornecidos por signed URLs ou signed cookies do CloudFront. Isso inclui controle sobre a data e hora em que um usuário não pode mais acessar seu conteúdo, bem como controle sobre quais endereços IP podem ser usados para acessar o conteúdo. Além disso, se os usuários acessarem arquivos por meio do CloudFront e diretamente usando URLs do Amazon S3, os logs de acesso do CloudFront serão menos úteis porque estarão incompletos.

Para garantir que seus usuários acessem seus arquivos usando somente URLs do CloudFront, independentemente de serem signed URLs, sigas estas etapas:

  1. Crie uma identidade de acesso de origem, que é um usuário especial do CloudFront, e associe-a à sua distribuição. Associe a identidade de acesso de origem às origens, para que você possa proteger todo ou parte do conteúdo do Amazon S3. Você também pode criar uma identidade de acesso de origem e adicioná-la à sua distribuição ao criar a distribuição. Para mais informações, consulte Criar uma OAI do CloudFront e adicioná-la à sua distribuição.

  2. Altere as permissões em seu bucket do Amazon S3 ou nos arquivos no bucket para que somente a identidade de acesso de origem tenha permissão de leitura. Quando os visualizadores acessam seus arquivos do Amazon S3 por meio do CloudFront, a identidade de acesso de origem do CloudFront obtém os arquivos em seu nome. Se os visualizadores solicitarem arquivos diretamente, usando URLs do Amazon S3, o acesso será negado. A identidade de acesso de origem tem permissão para acessar arquivos em seu bucket do Amazon S3, ao contrário dos visualizadores. Para mais informações, consulte Conceder à OAI permissão para ler arquivos em seu bucket do Amazon S3.

Criar uma OAI do CloudFront e adicioná-la à sua distribuição

Uma conta da AWS pode ter até 100 identidades do acesso de origem (OAIs) do CloudFront. No entanto, é possível adicionar uma OAI a quantas distribuições desejar, portanto, uma OAI é geralmente suficiente.

Se não criou uma OAI e a adicionou à sua distribuição ao criá-la, você poderá criar e adicionar uma agora usando o console ou a API do CloudFront:

Criar uma OAI e adicioná-la à sua distribuição

Se você não criou uma OAI ao criar a distribuição, faça o seguinte.

Como criar uma OAI do CloudFront usando o console do CloudFront

  1. Faça login no AWS Management Console e abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v3/home.

  2. Escolha o ID de uma distribuição que tenha uma origem do S3.

  3. Escolha a guia Origins (Origens).

  4. Selecione a origem do Amazon S3 e escolha Edit (Editar).

  5. Em S3 bucket access (Acesso ao bucket do S3), escolha Yes use OAI (Sim usar OAI).

  6. Se você já tiver uma OAI que deseja usar, selecione o OAI na lista suspensa. Se já tiver uma OAI, recomendamos que a reutilize para simplificar a manutenção.

    Se quiser criar uma OAI, escolha Create a New Identity (Criar uma nova identidade). Se desejar, você pode substituir o nome da OAI gerado automaticamente por um nome personalizado.

  7. Se você quiser que o CloudFront atualize automaticamente a política de bucket do Amazon S3 para permitir acesso de leitura à OAI, escolha Yes, update the bucket policy (Sim, atualizar a política de bucket).

    Importante

    Se você escolher Yes, update the bucket policy (Sim, atualizar a política de bucket), o CloudFront atualizará as permissões do bucket para conceder permissão à OAI especificada para ler os arquivos do seu bucket. No entanto, o CloudFront não remove permissões existentes. Se os usuários tiverem permissão para acessar os arquivos do bucket usando URLs do Amazon S3, eles continuarão tendo essa permissão depois de o CloudFront atualizar as permissões do seu bucket. Para visualizar ou remover as permissões existentes do bucket, use um método fornecido pelo Amazon S3.

    Se você quiser atualizar manualmente as permissões do bucket do Amazon S3, escolha No, I will update the bucket policy (Não, eu atualizarei a política do bucket). Para mais informações, consulte Conceder à OAI permissão para ler arquivos em seu bucket do Amazon S3.

  8. Na parte inferior da página, escolha Save changes (Salvar alterações).

  9. Se você tiver mais de uma origem do Amazon S3, repita as etapas para adicionar uma OAI para cada uma delas.

Criar uma OAI usando a API do CloudFront

Se você já tiver uma identidade de acesso de origem e quiser reutilizá-la, em vez de criar outra, pule para Adicionar uma OAI à sua distribuição usando a API do CloudFront.

Para criar uma OAI do CloudFront usando a API do CloudFront, use a ação CreateCloudFrontOriginAccessIdentity da API. A resposta inclui um Id e um S3CanonicalUserId para a nova OAI. Anote esses valores, pois serão usados posteriormente no processo. Para mais informações, consulte CreateCloudFrontOriginAccessIdentity na Referência da API do Amazon CloudFront.

Adicionar uma OAI à sua distribuição usando a API do CloudFront

É possível usar a API do CloudFront para adicionar uma OAI do CloudFront a uma distribuição existente ou para criar uma nova distribuição que inclua uma OAI. Em qualquer um dos casos, inclua um elemento OriginAccessIdentity. Esse elemento contém o valor do elemento Id que a ação CreateCloudFrontOriginAccessIdentity da API retornou quando você criou a OAI. Você pode adicionar o elemento OriginAccessIdentity a uma ou mais origens.

Consulte os seguintes tópicos na Referência da API do Amazon CloudFront:

Conceder à OAI permissão para ler arquivos em seu bucket do Amazon S3

Ao criar uma OAI ou adicionar uma a uma distribuição com o console do CloudFront, é possível atualizar automaticamente a política de bucket do Amazon S3 para conceder à OAI permissão para acessar seu bucket. Você também pode optar por criar ou atualizar manualmente a política do bucket. Seja qual for o método usado, você ainda deverá revisar as permissões para se certificar de que:

  • Sua OAI do CloudFront pode acessar arquivos no bucket em nome dos visualizadores que os solicitam por meio do CloudFront.

  • Os visualizadores não podem usar URLs do Amazon S3 para acessar seus arquivos fora do CloudFront.

Importante

Se você configurar o CloudFront para aceitar e encaminhar todos os métodos HTTP compatíveis com o CloudFront, certifique-se de conceder à OAI do CloudFront as permissões desejadas. Por exemplo, se você configurar o CloudFront para aceitar e encaminhar solicitações que usem o método DELETE, configure sua política de bucket para lidar com as solicitações DELETE de maneira adequada, para que os visualizadores possam excluir somente os arquivos desejados.

Usar políticas de bucket do Amazon S3

É possível conceder a uma OAI do CloudFront acesso a arquivos em um bucket do Amazon S3 criando ou atualizando a política de bucket das seguintes maneiras:

  • Usando a guia Permissions (Permissões) do bucket do Amazon S3 no console do Amazon S3.

  • Usando o PutBucketPolicy na API do Amazon S3.

  • Usando o console do CloudFront. Ao adicionar uma OAI às suas configurações de origem no console do CloudFront, é possível escolher Yes, update the bucket policy (Sim, atualizar a política de bucket) para informar o CloudFront para atualizar a política de bucket em seu nome.

Se você atualizar a política de bucket manualmente, certifique-se de:

  • Especificar a OAI correta como Principal na política.

  • Conceder à OAI as permissões necessárias para acessar objetos em nome dos visualizadores.

Para obter mais informações, consulte as seções a seguir.

Especificar uma OAI como Principal em uma política de bucket

Para especificar uma OAI como Principal em uma política de bucket do Amazon S3, use o nome de recurso da Amazon (ARN) da OAI, que inclui o ID da OAI. Por exemplo:

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }

Para usar o exemplo anterior, substitua EH1HDMB1FH2TC pelo ID da OAI. Para localizar o ID da OAI, consulte a página Origin access identities (Identidades de acesso de origem) no console do CloudFront, ou use ListCloudFrontOriginAccessIdentities na API do CloudFront.

Conceder permissões a uma OAI

Para conceder permissões à OAI para acessar objetos em seu bucket do Amazon S3, use palavras-chave na política que se relacionem a operações de API específicas Amazon S3. Por exemplo, a permissão s3:GetObject possibilita que a OAI leia objetos no bucket. Para obter mais informações, consulte os exemplos na seção a seguir, ou consulte Ações do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

Exemplos de política de bucket do Amazon S3

Os exemplos a seguir mostram políticas de bucket do Amazon S3 que concedem acesso a uma OAI do CloudFront. Para usar estes exemplos:

  • Substitua EH1HDMB1FH2TC pelo ID da OAI. Para localizar o ID da OAI, consulte a página Origin access identities (Identidades de 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.

exemplo Política de bucket do Amazon S3 que concede à OAI acesso de leitura

O exemplo a seguir permite que a OAI leia objetos no bucket especificado (s3:GetObject).

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

exemplo Política de bucket do Amazon S3 que concede à OAI acesso de leitura e gravação

O exemplo a seguir permite que a OAI leia e grave objetos no bucket especificado (s3:GetObject e s3:PutObject). Isso permite que os visualizadores façam upload de arquivos no bucket do Amazon S3 por meio do CloudFront.

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

Uso de ACLs de objeto do Amazon S3 (não recomendado)

Importante

Recomendamos o uso de políticas de bucket do Amazon S3 para conceder a uma OAI acesso a um bucket do S3. Você pode usar ACLs conforme descrito nesta seção, mas não recomendamos fazê-lo.

O Amazon S3 recomenda a configuração de S3 Object Ownership (Propriedade do objeto do S3) como bucket owner enforced (aplicado pelo proprietário do bucket), o que significa que as ACLs estão desabilitadas para o bucket e os objetos nele contidos. Ao aplicar essa configuração para Object Ownership (Propriedade de objeto), você deve usar políticas de bucket para conceder acesso à OAI (consulte a seção anterior).

Esta seção a seguir é apenas para casos de uso herdados que exigem ACLs.

É possível conceder a uma OAI do CloudFront acesso a arquivos em um bucket do Amazon S3 criando ou atualizando a ACL do arquivo das seguintes maneiras:

Ao conceder acesso a uma OAI usando uma ACL, é necessário especificar a OAI por meio de seu ID de usuário canônico do Amazon S3. Este é o valor do Amazon S3 Canonical User ID (ID de usuário canônico do Amazon S3 na página Origin access identities (Identidades de acesso de origem) no console do CloudFront. Se estiver usando a API do CloudFront, use o valor do elemento S3CanonicalUserId retornado quando você criou a OAI ou chame ListCloudFrontOriginAccessIdentities na API do CloudFront.

Usar uma OAI em regiões do Amazon S3 que ofereçam suporte somente à autenticação do Signature Version 4

As regiões mais recentes do Amazon S3 exigem o uso do Signature Version 4 para solicitações autenticadas. (Para ver as versões de assinatura com suporte em cada região do Amazon S3, consulte Endpoints e cotas do Amazon Simple Storage Service na Referência geral da AWS.) Se estiver usando uma identidade de acesso de origem e seu bucket estiver em uma das regiões que exijam o Signature versão 4, observe o seguinte:

  • As solicitações DELETE, GET, HEAD, OPTIONS e PATCH são compatíveis sem qualificações.

  • Se quiser enviar solicitações PUT para o CloudFront carregar arquivos no seu bucket do Amazon S3, será necessário adicionar um cabeçalho x-amz-content-sha256 à solicitação, e o valor dele deverá conter um hash SHA-256 do corpo da solicitação. Para mais informações, consulte a documentação sobre o cabeçalho x-amz-content-sha256 na página Cabeçalhos de solicitação comuns na Referência da API do Amazon Simple Storage Service.

  • As solicitações POST não são compatíveis.