Acesso à frente da nuvem da AWS negado ao balde S3

estou a tentar configurar CloudFront para servir ficheiros estáticos hospedados no meu balde S3. Tenho a distribuição de configuração, mas consigo AccessDenied ao tentar navegar pelo ficheiro CSS (/CSS/stlyle.css) dentro do balde S3:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>E193C9CDF4319589</RequestId>
    <HostId>
xbU85maj87/jukYihXnADjXoa4j2AMLFx7t08vtWZ9SRVmU1Ijq6ry2RDAh4G1IGPIeZG9IbFZg=
    </HostId>
</Error>

ajustei a minha distribuição da frente da nuvem para o meu balde S3 e criei um novo Origin Access Identity policy que foi adicionado automaticamente ao balde S3:

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E21XQ8NAGWMBQQ"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::myhost.com.cdn/*"
        }
    ]
}
Perdi alguma coisa?

Quero que todos os meus ficheiros neste balde S3 sejam servidos através da CloudFront...

* actualizar *

Este guia diz:

por padrão, seu balde Amazon S3 e todos os objetos nele são privados-apenas a conta AWS que criou o balde tem permissão para ler ou escrever os objetos nele. Se você quiser permitir que qualquer um Acesse os objetos em seu balde Amazon S3 usando URLs CloudFront, você deve conceder permissões de leitura pública para os objetos. (Este é um dos erros mais comuns quando se trabalha com CloudFront e Amazon S3. Você deve explicitamente conceder privilégios a cada objeto em um balde Amazon S3.)

por isso, com base nisto, adicionei novas permissões a todos os objectos dentro do balde S3 para Everyone Read/Download. Agora posso aceder aos ficheiros.

Mas agora quando acedo ao ficheiro como {[8] } isto está a ser redireccionado para S3 URI e HTTP. Como é que desactivo isto?

Author: Primoz Rome, 2017-02-15

4 answers

Para ajudar na sua pergunta, recriei a situação através de:
  • criou um balde Amazon S3 sem Política de balde
  • [12] Uploaded public.jpg e torná-lo público através de"tornar público"
  • carregado privado.jpg e manteve-o privado
  • criou uma Amazon CloudFront distribuição web :
    • nome do domínio de origem: seleccionou o meu balde S3 da lista
    • Restringir Balde Acesso: Sim
    • identidade de acesso à origem: criar uma nova identidade
    • Sim, actualizar a Política do balde
Verifiquei o balde e a CloudFront adicionou uma política semelhante à tua.

A distribuição foi marcada como In Progress durante algum tempo. Uma vez que ele disse Enabled, eu acessei os arquivos através do xxx.cloudfront.net URL:

  • xxx.cloudfront.net/public.jpg redireccionou-me para o URL S3 http://bucketname.s3.amazonaws.com/public.jpg. Sim, podia. veja o arquivo, mas ele não deve usar um redirecionamento.
  • xxx.cloudfront.net/private.jpg redirecionei eu também, mas então recebi Access Denied porque é um arquivo privado em S3.
Então eu fiz algumas pesquisas e descobri que esta é uma ocorrência bastante comum. Algumas pessoas usam um workaround, apontando sua distribuição CloudFront para o site hospedado estático URL , mas isso tem a desvantagem de que ele não vai funcionar com a identidade de acesso origem e eu também suspeito que não vai receba o desconto 'free S3 traffic to the edge'. Então, esperei durante a noite, testei-o esta manhã e está tudo a funcionar bem.

Resumindo: mesmo que diga ENABLED, as coisas podem levar várias horas (por exemplo, durante a noite) para se acertarem. Funcionará então como documentado.

 26
Author: John Rotenstein, 2017-02-16 21:31:23

No meu caso, eu estava a usar várias origens com comportamentos de "Padrão de caminho", juntamente com um caminho de origem no meu balde S3:

Má configuração:

Comportamento À Frente Da Nuvem: /images/* -> My-S3-origin

A minha origem-S3: Localização Da Origem: /images

Ficheiros S3: / images / my-image.jpg

Obter pedido: / images / my-image.jpg - > 403

O que estava a acontecer era que todo o pedido de recepção da CloudFront fosse enviado para a origem: /image/my-image.jpg prefixado pela localização da origem: /images, por isso o pedido para o S3 parece Que não existe.

Solução

Remover A Localização Da Origem.

 2
Author: Scott Jungwirth, 2017-11-08 01:08:59

Em vez de escolher o balde S3 predefinido para o nome do domínio de origem, indique por favor a <bucket-name>.s3-website.<region>.amazonaws.com Como Nome de domínio de origem(você pode obter este URL no site estático hospedagem propriedade sob S3 bucket properties).

 1
Author: uday reddy, 2018-06-11 23:00:39

Adicionei "índice".html 'in {[[0]} sob a página Geral da cloudFront 'Distribution Settings' e funcionou para mim. Como índice.html era o ficheiro raiz do meu projecto!

 0
Author: Zohab Ali, 2018-06-10 08:46:36