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.
HTTP
. Como é que desactivo isto?
4 answers
- 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
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 S3http://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 recebiAccess Denied
porque é um arquivo privado em S3.
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.
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 - > 403O 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.
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).
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!