Restringir o acesso a uma origem do Amazon Simple Storage Service
O CloudFront fornece duas maneiras para enviar solicitações autenticadas a uma origem do Amazon S3: controle de acesso à origem (OAC) e identidade do acesso de origem (OAI). O OAC ajuda a proteger suas origens, assim como no Amazon S3. 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
eDELETE
) 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 Proprietário do bucket aplicado, o padrão para novos buckets do Amazon S3. Se você precisar de ACLs, use a configuração Proprietário do bucket preferido para manter o controle sobre os objetos enviados via CloudFront.
-
Se usar um bucket do Amazon S3 configurado como um endpoint de site, você deverá configurá-lo com o CloudFront como uma origem personalizada. Isso significa que você não pode usar o OAC (nem a OAI). O OAC não é compatível com o 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 à origem no CloudFront.
Tópicos
Pré-requisitos
Antes de criar e configurar o controle de acesso à origem (OAC), você deve ter uma distribuição do CloudFront 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 distribuição do CloudFront com uma origem de bucket do S3, consulte Conceitos básicos de uma distribuição básica do CloudFront.
nota
Ao usar o OAC para proteger sua origem de bucket do S3, a comunicação entre o 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 à origem (OAC) ou configurá-lo em uma distribuição do CloudFront, verifique se o OAC tem permissão para acessar a origem do bucket do S3. Faça isso depois de criar uma distribuição do CloudFront, mas antes de adicionar o OAC à origem do S3 na configuração de distribuição.
Para conceder permissão ao OAC para acessar o bucket do S3, use uma política de bucket do S3 para possibilitar que a entidade principal de serviço do CloudFront (cloudfront.amazonaws.com
) acesse o bucket Use um elemento Condition
na política para permitir que o CloudFront acesse o bucket somente quando a solicitação for em nome da distribuição do CloudFront 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 OAC do CloudFront acesse uma origem do S3.
exemplo Política de bucket do S3 que permite acesso somente leitura a um OAC do 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::111122223333
:distribution/<CloudFront distribution ID>
" } } } }
exemplo Política de bucket do S3 que permite acesso de leitura e gravação a um OAC do CloudFront
{ "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::111122223333
: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 do KMS que permite a um OAC do CloudFront acessar uma chave KMS para o SSE-KMS
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "Service": [ "cloudfront.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::
111122223333
:distribution/<CloudFront distribution ID>
" } } }
Criar o controle de acesso à origem
Para criar um controle de acesso à origem (OAC), você pode usar o AWS Management Console, o AWS CloudFormation, a AWS CLI ou a API do CloudFront.
Excluir uma distribuição com um OAC anexado a um bucket do S3
Se precisar excluir uma distribuição com um OAC anexado a um bucket do S3, exclua a distribuição antes de excluir a origem do bucket do S3. Como alternativa, inclua a Região no nome de domínio de origem. Se isso não for possível, é possível remover o OAC da distribuição mudando para público antes da exclusão. Para ter mais informações, consulte Excluir uma distribuição do .
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 o 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::111122223333
: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 à origem do CloudFront inclui configurações avançadas destinadas somente 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, o CloudFront sempre assina todas as solicitações enviadas à 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, o CloudFront não assina nenhuma solicitação enviada à 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 ao público, o CloudFront não poderá acessar a origem. A origem do bucket do S3 retorna erros ao CloudFront e o CloudFront transmite esses erros 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 que o CloudFront assine solicitações de origem somente quando a solicitação do visualizador correspondente não incluir um cabeçalhoAuthorization
. Com essa configuração, o CloudFront transmite o cabeçalhoAuthorization
da solicitação do visualizador quando houver, mas assina a solicitação de origem (adicionando seu próprio cabeçalhoAuthorization
) quando a solicitação do visualizador não inclui um cabeçalhoAuthorization
.Atenção
Para transmitir o cabeçalho
Authorization
da solicitação do visualizador, você deve adicionar o cabeçalhoAuthorization
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 de acesso à origem (herdada, não recomendado)
A identidade do acesso de origem (OAI) do CloudFront fornece funcionalidade semelhante ao controle de acesso à 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
ouDELETE
) 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 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 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 console do CloudFront Security (Segurança), Origin access (Acesso à origem), Identities (legacy) (Identidades [legado]). Como alternativa, 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 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 políticas de bucket do Amazon S3 que permitem que a OAI do CloudFront acesse um bucket do S3.
Encontre o ID do OAI no console do CloudFront Security (Segurança), Origin access (Acesso à origem), Identities (legacy) (Identidades [legado]). Como alternativa, use ListCloudFrontOriginAccessIdentities na API do CloudFront.
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 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
<origin access identity ID>
" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>
/*" } ] }
Usar 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.
É 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:
-
Usando a guia Permissions (Permissões) do objeto do Amazon S3 no console do Amazon S3
. -
Usando PutObjectAcl na API do Amazon S3.
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 console do CloudFront, é possível encontrar este ID em Security (Segurança), Origin access (Acesso à origem), Identities (legacy) (Identidades [legado]). 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.
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
ePATCH
são compatíveis sem qualificações. -
As solicitações
POST
não são compatíveis.