
Olá, estou com um problema, recebo AccessDenied no meu domínio
Eu carrego meu site em um AWS S3 Bucket, torno público, crio uma página estática, mas quando acesso através do meu domínio.com/mypage recebo um AccessDenied.
Do aws mydomain.s3.amazonaws.com/mypage funciona bem.
O DNS do meu domínio está configurado assim
;; ANSWER SECTION:
mydomain.com. 2101 IN CNAME mydomain.s3.amazonaws.com.
mydomain.s3.amazonaws.com. 41342 IN CNAME s3-1-w.amazonaws.com.
s3-1-w.amazonaws.com. 219 IN CNAME s3-w.us-east-1.amazonaws.com.
s3-w.us-east-1.amazonaws.com. 3 IN A 52.217.69.36
Algum conselho para resolver isso?
Responder1
Isso éda documentação de suporte da Amazon:
Pequena descrição:
Para solucionar erros de acesso negado, determine se o nome de domínio de origem da sua distribuição é um endpoint de site do S3 ou um endpoint da API REST do S3. Siga estas etapas para determinar o tipo de endpoint:
- Abra o console do CloudFront.
- Escolha sua distribuição do CloudFront e escolha Configurações de distribuição.
- Escolha a guia Origens e Grupos de Origens.
- Escolha a guia Origens e Grupos de Origens.
Revise o nome de domínio em Nome e caminho de domínio de origem e determine o tipo de terminal com base no formato do nome de domínio.
Os endpoints da API REST usam este formato:
DOC-EXAMPLE-BUCKET.s3.amazonaws.com
Observação: siga as regras para nomear buckets do Amazon S3.
Os endpoints do site usam este formato:
DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com
Observação: dependendo da região da AWS, o formato do endpoint pode usar o formato de traço (s3-website-Region) ou o formato de ponto (s3-website.Region).
Se sua distribuição estiver usando um endpoint da API REST, consulte Estou usando um endpoint da API REST S3 como origem da minha distribuição do CloudFront.Por que estou recebendo erros 403 Acesso negado?
Se sua distribuição estiver usando um endpoint de site, verifique os seguintes requisitos para evitar erros de acesso negado:
- Os objetos no bucket devem ser acessíveis publicamente.
- Os objetos no bucket não podem ser criptografados pelo AWS Key Management Service (AWS KMS).
- A política de bucket deve permitir acesso a s3:GetObject.
- Se a política de bucket conceder acesso público de leitura, a conta da AWS que possui o bucket também deverá possuir o objeto. 5.Os objetos solicitados devem existir no bucket.
- O acesso público ao bloco do Amazon S3 deve estar desabilitado no bucket.
- Se o Pagamento do Solicitante estiver ativado, a solicitação deverá incluir o parâmetro request-payer.
- Se você estiver usando um cabeçalho Referer para restringir o acesso do CloudFront à sua origem S3, revise o cabeçalho personalizado.
Observação: Se você não deseja permitir público (anônimo) aos seus objetos S3 e, em seguida, altere sua configuração para usar o endpoint da API REST do S3 como origem de sua distribuição. Em seguida, configure sua distribuição e bucket S3 para restringir o acesso usando uma identidade de acesso de origem (OAI). Para obter instruções, consulte Usar um endpoint da API REST como origem com acesso restrito por um OAI em Como usar o CloudFront para servir um site estático hospedado no Amazon S3?
Resolução
Os objetos no bucket devem ser acessíveis publicamente
Uma distribuição que usa um endpoint de site oferece suporte apenas a conteúdo acessível publicamente. Para determinar se um objeto em seu bucket S3 é acessível publicamente, abra o URL do objeto em um navegador da web. Ou você pode executar um comando curl no URL.
A seguir está um exemplo de URL de um objeto S3:
http://DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com/index.html
Se o navegador da web ou o comando curl retornar um erro de acesso negado, o objeto não estará acessível publicamente.
Permita o acesso público de leitura ao objeto de uma das seguintes maneiras:
- Crie uma política de bucket que permita acesso público de leitura para todos os objetos no bucket.
- Use o console do Amazon S3 para permitir acesso público de leitura ao objeto.
- Os objetos no bucket não podem ser criptografados pelo AWS KMS
- As distribuições do CloudFront não oferecem suporte a objetos criptografados pelo AWS KMS. Você deve remover a criptografia KMS dos objetos S3 que deseja servir usando a distribuição.
Observação: em vez de usar a criptografia AWS KMS, use AES-256 para criptografar seus objetos.
Use uma das seguintes maneiras para verificar se um objeto no seu bucket está criptografado por KMS:
Use o console do Amazon S3 para visualizar as propriedades do objeto. Revise a caixa de diálogo Criptografia. Se AWS-KMS for selecionado, o objeto será criptografado por KMS. Execute o comando head-object usando a AWS Command Line Interface (AWS CLI). Se o comando retornar ServerSideEncryption como aws:kms, o objeto será criptografado por KMS. Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI. Para alterar as configurações de criptografia do objeto usando o console do Amazon S3, consulte Como adicionar criptografia a um objeto S3?
Para alterar as configurações de criptografia do objeto usando oCLI da AWS, primeiro verifique se o bucket do objeto não tem criptografia padrão. Se o bucket não tiver criptografia padrão, execute o seguinte comando para remover a criptografia do objeto, copiando o objeto sobre si mesmo:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Aviso: copiar o objeto sobre si mesmo remove as configurações de classe de armazenamento e
localização de redirecionamento de site. Para manter essas configurações no novo objeto, certifique-se de especificar explicitamente os valores de classe de armazenamento ou local de redirecionamento de site na solicitação de cópia.A política de bucket deve permitir acesso a s3:GetObject Para usar uma distribuição com um endpoint de site S3, sua política de bucket não deve ter uma instrução deny que bloqueie o acesso de leitura pública à ação s3:GetObject.
Mesmo que você tenha uma instrução de permissão explícita para s3:GetObject em sua política de bucket, confirme se não há uma instrução de negação explícita conflitante. Uma instrução deny explícita sempre substitui uma instrução explícita de permissão.
Siga estas etapas para revisar sua política de bucket para s3:GetObject:
Abra seu bucket S3 no console do Amazon S3.
Escolha a guia Permissões.
Escolha Política de bucket.
Revise a política do bucket para obter instruções com "Action": "s3:GetObject" ou "Action": "s3:*".
O exemplo de política a seguir contém uma instrução de permissão explícita para acesso público a s3:GetObject. No entanto, há também uma instrução deny explícita para s3:GetObject que bloqueia o acesso, a menos que a solicitação seja de uma Amazon Virtual Private Cloud (Amazon VPC) específica.
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "Allow-OAI-Access-To-Bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Allow-Public-Access-To-Bucket", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }
- Modifique a política de bucket para remover ou editar instruções que bloqueiam o acesso público de leitura a s3:GetObject.
Observação: o CloudFront armazena em cache os resultados de um erro de acesso negado pelo período de tempo especificado no TTL mínimo de armazenamento em cache de erros. O valor padrão é um minuto. Depois de remover uma instrução deny da política de bucket, você poderá executar uma invalidação na sua distribuição para remover o objeto do cache.
Se a política de bucket conceder acesso de leitura público, a conta da AWS que possui o bucket também deverá possuir o objeto. Para que uma política de bucket permita acesso de leitura pública a objetos, a conta da AWS que possui o bucket também deverá possuir os objetos. Um bucket ou objeto pertence à conta da identidade do AWS Identity and Access Management (IAM) que criou o bucket ou objeto.
Observação: o requisito de propriedade de objeto se aplica ao acesso de leitura público concedido por uma política de bucket. Não se aplica ao acesso de leitura público concedido pela lista de controle de acesso (ACL) do objeto.
Siga estas etapas para verificar se o bucket e os objetos têm o mesmo proprietário:
- Execute este comando AWS CLI para obter o ID canônico S3 do proprietário do bucket:
aws s3api list-buckets --query Owner.ID
- Execute este comando para obter o ID canônico S3 do proprietário do objeto:
Nota: Este exemplo mostra um único objeto, mas você pode usar o comando list para verificar vários objetos.
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
- Se os IDs canônicos não corresponderem, o bucket e o objeto terão proprietários diferentes.
Observação: você também pode usar o console do Amazon S3 para verificar os proprietários do bucket e do objeto. Os proprietários são encontrados na guia Permissões do respectivo bucket ou objeto.
Siga estas etapas para alterar o proprietário do objeto para proprietário do bucket:
- Na conta do proprietário do objeto, execute este comando para recuperar as permissões ACL atribuídas ao objeto:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
- Se o objeto tiver permissões ACL de controle total do proprietário do bucket, pule para a etapa 3. Se o objeto não tiver permissões de ACL de controle total do proprietário do bucket, execute este comando na conta do proprietário do objeto:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control
- Na conta do proprietário do bucket, execute este comando para alterar o proprietário do objeto copiando o objeto sobre si mesmo:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Os objetos solicitados devem existir no bucketSe um usuário não tiver permissões s3:ListBucket, o usuário receberá erros de acesso negado para objetos ausentes em vez de erros 404 não encontrados. Execute o comando head-object da AWS CLI para verificar se existe um objeto no bucket.
Observação: confirme se a solicitação de objeto enviada ao CloudFront corresponde exatamente ao nome do objeto S3. Os nomes de objetos S3 diferenciam maiúsculas de minúsculas. Se a solicitação não tiver o nome de objeto correto, o Amazon S3 responderá como se o objeto estivesse faltando. Para identificar qual objeto o CloudFront está solicitando do Amazon S3, use o registro de acesso ao servidor.
Se o objeto existir no bucket, o erro Acesso negado não será mascarando um erro 404 não encontrado. Verifique outros requisitos de configuração para resolver o erro de acesso negado.
Se o objeto não estiver no bucket, o erro Acesso negado será mascarando um erro 404 não encontrado. Resolva o problema relacionado ao objeto ausente.
Observação: não é uma prática recomendada de segurança habilitar o acesso público ao s3:ListBucket. Habilitar o acesso público s3:ListBucket permite que os usuários vejam e listem todos os objetos em um bucket. Isso expõe detalhes de metadados do objeto (por exemplo, chave e tamanho) aos usuários, mesmo que os usuários não tenham permissões para fazer download do objeto.
O acesso público ao bloco do Amazon S3 deve estar desabilitado no bucketConfirme se não há configurações de bloqueio de acesso público do Amazon S3 aplicadas ao bucket. Essas configurações podem substituir permissões que permitem acesso público de leitura. As configurações de bloqueio de acesso público do Amazon S3 podem ser aplicadas a buckets individuais ou contas da AWS.
Se o Pagamento do solicitante estiver ativado, a solicitação deverá incluir o parâmetro request-payer. Se o Pagamento do solicitante estiver ativado em um bucket, o acesso anônimo ao bucket não será permitido. Os usuários de outras contas devem especificar o parâmetro request-payer ao enviar solicitações ao bucket. Caso contrário, esses usuários receberão um erro de acesso negado.
Se você estiver usando um cabeçalho Referer para restringir o acesso do CloudFront à origem do S3, revise o cabeçalho personalizado. Se você estiver usando o cabeçalho Referer para restringir o acesso do CloudFront à origem do endpoint do site S3, verifique o valor secreto ou o conjunto de tokens na política de bucket S3. Em seguida, confirme se o valor secreto ou token corresponde ao valor no cabeçalho personalizado de origem do CloudFront.
Se você estiver usando uma instrução deny explícita na política de bucket, confirme se também há uma instrução de permissão que concede acesso com base no cabeçalho Referer. Você não pode conceder acesso apenas com uma instrução deny explícita.
Por exemplo, a política de bucket a seguir concederá acesso à origem do S3 quando a solicitação contiver a string "aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER":
{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from my CloudFront with referer header", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"} } } ] }
Com este exemplo de política de bucket, o cabeçalho personalizado de origem do CloudFront deve ser:
- Cabeçalho: Referente
- Valor:MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER
Observação: A política de bucket de exemplo concede acesso público (anônimo) ao bucket porque o Principal é um valor curinga ("Principal":"*"). No entanto, devido à instrução de condição, o acesso à origem S3 será concedido somente se a solicitação incluir o cabeçalho Referer e o valor do cabeçalho corresponder ao valor na política do bucket.