Restringir o acesso ao conteúdo do Amazon S3 - Amazon CloudFront

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Restringir o acesso ao conteúdo do Amazon S3

CloudFront fornece duas maneiras de enviar solicitações autenticadas para uma origem do Amazon S3: controle de acesso de origem (OAC) e identidade de acesso de origem (OAI). Recomendamos o uso do OAC porque ele é compatível com:

  • Todos os buckets do Amazon S3 em todas as Regiões da AWS; por exemplo, regiões opcionais lançadas após dezembro de 2022.

  • Criptografia do lado do servidor com o AWS KMS (SSE-KMS) do Amazon S3

  • Solicitações dinâmicas (PUT e DELETE) para o Amazon S3

A identidade do acesso de origem (OAI) não funciona para cenários na lista anterior, ou exige outras soluções alternativas nesses casos. Os tópicos a seguir descrevem como usar o controle de acesso de origem (OAC) com uma origem do Amazon S3. Para obter informações sobre como migrar da identidade do acesso de origem (OAI) para o controle de acesso de origem (OAC), consulte Migrar da identidade do acesso de origem (OAI) para o controle de acesso à origem (OAC).

Observações
  • Ao usar o CloudFront OAC com origens de bucket do Amazon S3, você deve definir a propriedade de objeto do Amazon S3 como Bucket Owner Enforced, o padrão para novos buckets do Amazon S3. Se você precisar de ACLs, use a configuração preferida do proprietário do Bucket para manter o controle sobre os objetos enviados via CloudFront.

  • Se sua origem for um bucket do Amazon S3 configurado como um endpoint de site, você deverá configurá-lo CloudFront como uma origem personalizada. Isso significa que você não pode usar o OAC (nem a OAI). O OAC não oferece suporte ao redirecionamento de origem usando o Lambda @Edge.

Tópicos

Criar um controle de acesso à origem

Conclua as etapas descritas nos tópicos a seguir para configurar um novo controle de acesso de origem em CloudFront.

Pré-requisitos

Antes de criar e configurar o controle de acesso de origem (OAC), você deve ter uma CloudFront distribuição com uma origem de bucket do Amazon S3. Essa origem deve ser um bucket normal do S3, não um bucket configurado como endpoint de site. Para obter mais informações sobre como configurar uma CloudFront distribuição com uma origem de bucket do S3, consulteComeçando com uma CloudFront distribuição simples.

nota

Quando você usa o OAC para proteger a origem do seu bucket do S3, a comunicação entre o Amazon S3 CloudFront e o Amazon S3 é sempre por meio de HTTPS, independentemente de suas configurações específicas.

Conceder permissão ao controle de acesso à origem para acessar o bucket do S3

Antes de criar um controle de acesso de origem (OAC) ou configurá-lo em uma CloudFront distribuição, certifique-se de que o OAC tenha permissão para acessar a origem do bucket do S3. Faça isso depois de criar uma CloudFront distribuição, mas antes de adicionar o OAC à origem do S3 na configuração de distribuição.

Para dar permissão ao OAC para acessar o bucket do S3, use uma política de bucket do S3 para permitir que o CloudFront service principal (cloudfront.amazonaws.com) acesse o bucket. Use um Condition elemento na política para permitir o acesso CloudFront ao bucket somente quando a solicitação for em nome da CloudFront distribuição que contém a origem do S3.

Para obter informações sobre como adicionar ou modificar uma política de bucket, consulte Adicionar uma política de bucket usando o console do Amazon S3 no Guia do usuário do Amazon S3.

Veja a seguir exemplos de políticas de bucket do S3 que permitem que um CloudFront OAC acesse uma origem do S3.

exemplo Política de bucket do S3 que permite acesso somente de leitura a um OAC CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Conta da AWS ID>:distribution/<CloudFront distribution ID>" } } } }
exemplo Política de bucket do S3 que permite acesso de leitura e gravação a um CloudFront OAC
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadWrite", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Conta da AWS ID>:distribution/<CloudFront distribution ID>" } } } }

SSE-KMS

Se os objetos na origem do bucket do S3 forem criptografados usando criptografia do lado do servidor com o AWS Key Management Service (SSE-KMS), o OAC deverá ter permissão para usar a chave do AWS KMS. Para conceder permissão ao OAC para usar a chave do KMS, adicione uma instrução à política de chaves do KMS. Para obter informações sobre como modificar uma política de chaves, consulte Alterar uma política de chaves no Guia do desenvolvedor do AWS Key Management Service.

O exemplo a seguir mostra uma declaração de política de chaves do KMS que permite ao OAC usar a chave do KMS.

exemplo Declaração de política de chaves KMS que permite que um CloudFront OAC acesse uma chave KMS para SSE-KMS
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Conta da AWS ID>:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Conta da AWS ID>:distribution/<CloudFront distribution ID>" } } }

Criar um controle de acesso à origem

Para criar um controle de acesso de origem (OAC), você pode usar oAWS Management Console, AWS CloudFormationAWS CLI, the ou a CloudFront API.

Console
Como criar um controle de acesso à origem
  1. Faça login no AWS Management Console e abra o CloudFront console emhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. No painel de navegação, selecione Origem access (Acesso à origem).

  3. Selecione Create control setting (Criar configuração de controle).

  4. No formulário Create control setting (Criar configuração de controle), faça o seguinte:

    1. No painel Details (Detalhes), insira um Name (Nome) e (opcionalmente) uma Description (Descrição) para o controle de acesso à origem.

    2. No painel Settings (Configurações), recomendamos que você deixe a configuração padrão (Sign requests (recommended) [Solicitações de assinatura (recomendado)]. Para ter mais informações, consulte Configurações avançadas para controle de acesso à origem.

  5. Selecione S3 no menu suspenso Origin type (Tipo de origem).

  6. Selecione Create.

    Depois que o OAC for criado, anote o Name (Nome). Você precisará dele no procedimento a seguir.

Como adicionar um controle de acesso à origem a uma origem do S3 em uma distribuição
  1. Abra o CloudFront console emhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Escolha uma distribuição com uma origem do S3 à qual você deseja adicionar o OAC e, depois, selecione a guia Origins (Origens).

  3. Selecione a origem do S3 à qual você deseja adicionar o OAC e, depois, Edit (Editar).

  4. Para acessar o Origin, escolha as configurações de controle de acesso do Origin (recomendado).

  5. No menu suspenso Origin access control (Controle de acesso à origem), selecione o OAC que você deseja usar.

  6. Escolha Salvar alterações.

A distribuição começa a ser implantada em todos os pontos CloudFront periféricos. Quando um local da borda recebe a nova configuração, ele assina todas as solicitações enviadas à origem do bucket do S3.

CloudFormation

Para criar um controle de acesso à origem (OAC) com o AWS CloudFormation, use o tipo de recurso AWS::CloudFront::OriginAccessControl. O exemplo a seguir mostra a sintaxe do modelo AWS CloudFormation no formato YAML, para criar um controle de acesso à origem.

Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: ExampleOAC OriginAccessControlOriginType: s3 SigningBehavior: always SigningProtocol: sigv4

Para obter mais informações, consulte AWS::CloudFront::OriginAccessControle no Guia AWS CloudFormation do Usuário.

CLI

Para criar um controle de acesso à origem com a AWS Command Line Interface (AWS CLI), use o comando aws cloudfront create-origin-access-control. É possível usar um arquivo de entrada para fornecer os parâmetros de entrada do comando, em vez de especificar cada parâmetro individual como entrada na linha de comando.

Como criar um controle de acesso à origem (CLI com arquivo de entrada)
  1. Use o comando a seguir para criar um arquivo chamado origin-access-control.yaml. Esse arquivo contém todos os parâmetros de entrada para o comando create-origin-access-control.

    aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
  2. Abra o arquivo origin-access-control.yaml que você acabou de criar. Edite o arquivo para adicionar um nome para o OAC, uma descrição (opcional) e alterar SigningBehavior para always. Salve o arquivo.

    Para obter mais informações sobre outras configurações de OAC, consulte Configurações avançadas para controle de acesso à origem.

  3. Use o comando a seguir para criar o controle de acesso à origem usando parâmetros de entrada do arquivo origin-access-control.yaml.

    aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml

    Anote o valor do Id na saída do comando. Você precisa dele para adicionar o OAC a uma origem de bucket do S3 em uma CloudFront distribuição.

Como anexar um OAC a uma origem de bucket do S3 em uma distribuição existente (CLI com arquivo de entrada)
  1. Use o comando a seguir para salvar a configuração de CloudFront distribuição da distribuição à qual você deseja adicionar o OAC. A distribuição deve ter uma origem de bucket do S3.

    aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
  2. Abra o arquivo chamado dist-config.yaml que você acabou de criar. Edite o arquivo fazendo as seguintes alterações:

    • No objeto Origins, adicione o ID do OAC ao campo chamado OriginAccessControlId.

    • Remova o valor do campo chamado OriginAccessIdentity, se houver.

    • Renomeie o campo ETag para IfMatch, mas não altere o valor do campo.

    Ao concluir, salve o arquivo.

  3. Use o comando a seguir para atualizar a distribuição para usar o controle de acesso à origem.

    aws cloudfront update-distribution --id <CloudFront distribution ID> --cli-input-yaml file://dist-config.yaml

A distribuição começa a ser implantada em todos os pontos CloudFront periféricos. Quando um local da borda recebe a nova configuração, ele assina todas as solicitações enviadas à origem do bucket do S3.

API

Para criar um controle de acesso de origem com a CloudFront API, use CreateOriginAccessControl. Para obter mais informações sobre os campos especificados nessa chamada de API, consulte a documentação de referência de API do seu AWS SDK ou de outro cliente de API.

Assim que criar um controle de acesso à origem, você pode anexá-lo a uma origem de bucket do S3 em uma distribuição usando uma das seguintes chamadas de API:

Para as duas chamadas de API, forneça o ID de controle de acesso à origem no campo OriginAccessControlId, dentro de uma origem. Para mais informações sobre os outros campos especificados nessas chamadas de API, consulte Valores especificados ao criar ou atualizar uma distribuição e a documentação de referência da API do AWS SDK ou de outro cliente de API.

Migrar da identidade do acesso de origem (OAI) para o controle de acesso à origem (OAC)

Para migrar de uma identidade do acesso de origem (OAI) herdada para um controle de acesso à origem (OAC), primeiro atualize a origem do bucket do S3 para permitir que a OAI e o OAC acessem o conteúdo do bucket. Isso garante que CloudFront nunca perca o acesso ao bucket durante a transição. Para permitir que a OAI e o OAC acessem um bucket do S3, atualize a política de bucket para incluir duas declarações, uma para cada tipo de entidade principal.

O exemplo de política de bucket do S3 a seguir permite que uma OAI e um OAC acessem uma origem do S3.

exemplo Política de bucket do S3 que permite acesso somente leitura a uma OAI e um OAC
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Conta da AWS ID>:distribution/<CloudFront distribution ID>" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }

Depois de atualizar a política de bucket da origem do S3 para permitir o acesso à OAI e ao OAC, você pode atualizar a configuração de distribuição para usar o OAC em vez da OAI. Para ter mais informações, consulte Criar um controle de acesso à origem.

Depois que a distribuição estiver totalmente implantada, você poderá remover a declaração na política de bucket que permite o acesso à OAI. Para ter mais informações, consulte Conceder permissão ao controle de acesso à origem para acessar o bucket do S3.

Configurações avançadas para controle de acesso à origem

O recurso de controle de acesso de CloudFront origem inclui configurações avançadas destinadas apenas a casos de uso específicos. Use as configurações recomendadas, a menos que você precise usar as configurações avançadas para uma necessidade específica.

O controle de acesso à origem contém uma configuração chamada Signing behavior (Comportamento de assinatura) (no console) ou SigningBehavior (na API, na CLI e no AWS CloudFormation). Essa configuração fornece as seguintes opções:

Always sign origin requests (recommended setting) [Sempre assinar solicitações de origem (configuração recomendada)]

Recomendamos usar essa configuração, chamada Sign requests (recommended) [Assinar solicitações (recomendado)] no console, ou always na API, na CLI e no AWS CloudFormation. Com essa configuração, CloudFront sempre assina todas as solicitações enviadas para a origem do bucket do S3.

Never sign origin requests (Nunca assinar solicitações de origem)

Essa configuração é chamada Do not sign requests (Não assinar solicitações) no console ou never na API, na CLI e no AWS CloudFormation. Use essa configuração para desativar o controle de acesso à origem para todas as origens em todas as distribuições que usam esse controle. Isso pode economizar tempo e esforço em comparação com a remoção individual de um controle de acesso à origem de todas as origens e distribuições que o usam. Com essa configuração, CloudFront não assina nenhuma solicitação enviada para a origem do bucket do S3.

Atenção

Para usar essa configuração, a origem do bucket do S3 deve estar acessível ao público. Se você usar essa configuração com uma origem de bucket do S3 que não esteja acessível publicamente, CloudFront não poderá acessar a origem. A origem do bucket do S3 retorna erros CloudFront e os CloudFront transmite aos visualizadores.

Não substituir o cabeçalho Authorization do visualizador (cliente)

Essa configuração é chamada Do not override authorization header (Não substituir o cabeçalho de autorização) no console ou no-override na API, na CLI e no AWS CloudFormation. Use essa configuração quando quiser CloudFront assinar solicitações de origem somente quando a solicitação correspondente do visualizador não incluir um Authorization cabeçalho. Com essa configuração, CloudFront transmite o Authorization cabeçalho da solicitação do visualizador quando há uma, mas assina a solicitação de origem (adicionando seu próprio Authorization cabeçalho) quando a solicitação do visualizador não inclui um Authorization cabeçalho.

Atenção

Para transmitir o cabeçalho Authorization da solicitação do visualizador, você deve adicionar o cabeçalho Authorization a uma política de cache para todos os comportamentos de cache que usam origens de bucket do S3 associadas a esse controle de acesso à origem.

Usar uma identidade do acesso de origem (herdada, não recomendada)

CloudFront a identidade de acesso de origem (OAI) fornece funcionalidade semelhante ao controle de acesso de origem (OAC), mas não funciona em todos os cenários. É por isso que recomendamos usar o OAC em vez da OAI. O OAI não é compatível especificamente com:

  • Buckets do Amazon S3 em todas as Regiões da AWS, inclusive regiões opcionais.

  • Criptografia do lado do servidor com o AWS KMS (SSE-KMS) do Amazon S3

  • Solicitações dinâmicas (PUT, POST ou DELETE) para o Amazon S3

  • Novas Regiões da AWS lançadas após dezembro de 2022

Para obter informações sobre como migrar de OAI para OAC, consulte Migrar da identidade do acesso de origem (OAI) para o controle de acesso à origem (OAC).

Ao criar um OAI ou adicionar um a uma distribuição com o CloudFront console, você pode atualizar automaticamente a política de bucket do Amazon S3 para dar permissão ao OAI 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:

  • Seu CloudFront OAI pode acessar arquivos no bucket em nome dos espectadores que os estão solicitando. CloudFront

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

Importante

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

Usar políticas de bucket do Amazon S3

Você pode conceder a um CloudFront OAI acesso aos arquivos em um bucket do Amazon S3 criando ou atualizando a política do bucket das seguintes formas:

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

  • Usando PutBucketPolicyna API do Amazon S3.

  • Usar o console do CloudFront. Ao adicionar um OAI às suas configurações de origem no CloudFront console, você pode escolher Sim, atualizar a política do bucket para solicitar a atualização CloudFront da política do 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 do recurso da Amazon (ARN) da OAI, que inclui o respectivo ID. Por exemplo: .

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }

Encontre o ID do OAI no CloudFront console em Segurança, Acesso ao Origin, Identidades (legado). Como alternativa, use ListCloudFrontOriginAccessIdentitiesna CloudFront API.

Conceder permissões a uma OAI

Para conceder permissões à OAI para acessar objetos em seu bucket do Amazon S3, use ações na política que se relacionem a operações de API específicas do Amazon S3. Por exemplo, a açã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 as políticas de bucket do Amazon S3 que permitem que a CloudFront OAI acesse um bucket do S3.

Encontre o ID do OAI no CloudFront console em Segurança, Acesso ao Origin, Identidades (legado). Como alternativa, use ListCloudFrontOriginAccessIdentitiesna CloudFront API.

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 <origin access identity ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }
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 para seu bucket do Amazon S3 por meio de. CloudFront

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }

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 listas de controle de acesso (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.

Você pode conceder a um CloudFront OAI acesso aos arquivos em um bucket do Amazon S3 criando ou atualizando a ACL do arquivo das seguintes formas:

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. No CloudFront console, você pode encontrar esse ID em Segurança, Acesso ao Origin, Identidades (legado). Se você estiver usando a CloudFront API, use o valor do S3CanonicalUserId elemento que foi retornado quando você criou a OAI ou chame ListCloudFrontOriginAccessIdentitiesa CloudFront API.

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.

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