Por que recebi um erro de “Acesso negado” quando usei o endpoint de hospedagem de sites estáticos do Amazon S3?
Eu usei um bucket do Amazon Simple Storage Service (Amazon S3) para hospedar um site estático com o endpoint de hospedagem de sites estáticos do S3. Quero solucionar o erro “Access Denied” que recebi do endpoint de hospedagem de sites estáticos do S3.
Resolução
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Os objetos no bucket devem estar acessíveis ao público
Um endpoint de site estático do S3 oferece suporte somente a conteúdo acessível ao público. Para verificar se um objeto em seu bucket do S3 está acessível ao público, abra o URL do objeto em um navegador da web. Ou é possível executar um comando curl no URL.
Veja a seguir um exemplo de URL de um objeto do S3:
http://doc-example-bucket.s3-website-us-east-1.amazonaws.com/index.html
Se o navegador da Web ou o comando curl retornarem um erro de acesso negado, o objeto não estará acessível ao público. Para resolver esse problema, crie uma política de bucket que permita acesso público de leitura para todos os objetos no bucket.
A política de bucket do S3 deve permitir o acesso à ação s3:GetObject
Verifique se sua política de bucket contém instruções Deny que bloqueiam o acesso público de leitura à ação s3:GetObject. Mesmo quando você tem uma declaração de Permissão explícita para s3:GetObject em sua política de bucket, uma declaração de negação explícita sempre substitui uma instrução de permissão explícita.
Para verificar sua política de bucket, conclua as etapas a seguir:
- Abra o console do Amazon S3 e, em seguida, selecione seu bucket.
- Escolha a guia Permissões.
- Analise a política do bucket para obter declarações com “Action”: “s3:GetObject” ou “Action”: “s3:*”.
- Se um comando bloquear o acesso público de leitura a s3:GetObject, modifique a política do bucket.
A conta proprietária do bucket também deve ser proprietária dos objetos
Para permitir o acesso público de leitura a objetos, a conta da AWS que possui o bucket também deve ser proprietária dos objetos. A conta da identidade do AWS Identity and Access Management (AWS IAM) que criou o bucket ou objeto é proprietária do bucket ou objeto.
Observação: a propriedade de objetos do S3 não se aplica ao acesso público de leitura concedido pela lista de controle de acesso (ACL) do objeto.
É possível usar o console do Amazon S3 para verificar os proprietários do bucket e do objeto. É possível encontrar os proprietários na guia Permissões do bucket ou objeto.
Para usar a AWS CLI para verificar se a mesma conta possui seu bucket e objetos do Amazon S3, conclua as etapas a seguir:
-
Para recuperar o ID canônico do proprietário do bucket no S3, execute o comando list-buckets:
aws s3api list-buckets --query Owner.ID -
Para recuperar o ID canônico do proprietário do objeto no S3, execute o comando list-objects:
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.htmlObservação: o comando anterior retorna um único objeto. Para verificar vários objetos, execute o comando list.
-
Se os IDs canônicos do bucket e do proprietário do objeto não corresponderem, altere o proprietário do objeto para o proprietário do bucket. Na conta do proprietário do objeto, execute o comando get-object-acl para recuperar as permissões de ACL atribuídas ao objeto:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name -
Se o objeto não tiver permissões de ACL de controle total do proprietário do bucket, execute o comando put-object-acl na conta do proprietário do objeto:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control -
Se o objeto tiver permissões de ACL de controle total do proprietário do bucket, execute o comando a seguir na conta do proprietário do bucket:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARDObservação: o comando anterior copia o objeto sobre si mesmo e altera o proprietário do objeto.
Também é possível usar a propriedade de objetos do S3 para conceder a propriedade automática ao proprietário do bucket de qualquer objeto que usuários anônimos ou outras contas enviam.
Não é possível usar a criptografia do AWS KMS para os objetos
O AWS Key Management Service (AWS KMS) não oferece suporte a solicitações anônimas. Como resultado, os buckets do Amazon S3 que permitem acesso anônimo ou público não se aplicam aos objetos criptografados com o AWS KMS. Para excluir a criptografia do AWS KMS dos objetos, você deve usar o endpoint estático do site Amazon S3.
Observação: em vez da criptografia do AWS KMS, use a criptografia do lado do servidor com as chaves gerenciadas do Amazon S3 para criptografar seus objetos.
Para verificar se você usou a criptografia KMS em seus objetos, é possível usar o console do Amazon S3. Na página Visão geral do objeto, verifique se AWS-KMS está selecionado na caixa de diálogo Criptografia. Também é possível executar o comando head-object da AWS CLI. Se o comando retornar server-side encryption como aws:kms, o objeto será criptografado pelo AWS KMS.
Para usar o console do Amazon S3 para alterar as configurações de criptografia do objeto, consulte Especificando criptografia no lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3).
Para usar a AWS CLI para alterar as configurações de criptografia do objeto, verifique se o bucket do objeto não tem a criptografia padrão. Se o bucket não tiver criptografia padrão, execute o seguinte comando para copiar o objeto sobre si mesmo e remover a criptografia do objeto:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD --sse AES256
Aviso: o Amazon S3 remove as configurações da classe de armazenamento e local de redirecionamento do site quando você copia o objeto sobre si mesmo. Para manter essas configurações no novo objeto, certifique-se de especificar explicitamente os valores da classe de armazenamento ou do local de redirecionamento do site na solicitação de cópia.
Se você ativou o controle de versionamento em seu bucket, a criptografia padrão cria uma nova versão do objeto quando você altera a criptografia.
Os objetos solicitados devem existir no bucket do S3
Se um usuário que executa a solicitação não tiver permissões s3:ListBucket, ele receberá um erro de Acesso negado por objetos ausentes.
Para verificar se o objeto existe no bucket, execute o comando head-object da AWS CLI.
Observação: os nomes dos objetos do S3 diferenciam maiúsculas de minúsculas. Se a solicitação não tiver um nome de objeto válido, o Amazon S3 informará que o objeto está ausente.
Se o objeto existir no bucket, o erro de Acesso negado não mascara o erro 404 Not Found. Para resolver o erro de Acesso negado, verifique outros requisitos de configuração.
Se o objeto não existir no bucket, o erro de Acesso negado mascara o erro 404 Not Found. Solucione o problema relacionado ao objeto ausente.
Observação: é uma prática recomendada de segurança não ativar o acesso público ao s3:ListBucket. O acesso público ao s3:ListBucket permite que os usuários vejam e listem todos os objetos em um bucket. Esse acesso expõe os detalhes dos metadados do objeto, como chave e tamanho, aos usuários, mesmo que eles não tenham permissões para baixar o objeto.
Desative o Bloqueio de Acesso Público do Amazon S3 no bucket
O Bloqueio de Acesso Público do Amazon S3 pode substituir as permissões que permitem o acesso público de leitura. Confirme se você não definiu as configurações do Bloqueio de Acesso Público do Amazon S3 para seu bucket ou conta do S3.
Informações relacionadas
Hospedagem de sites estáticos HTTPS internos com Application Load Balancer, S3 e AWS PrivateLink
- Tópicos
- Storage
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
- Resposta aceita
feita há 9 meses
feita há um ano
feita há um ano