Como soluciono erros HTTP 403 do API Gateway?

10 minuto de leitura
0

Quando chamo uma API do Amazon API Gateway, recebo um erro 403.

Breve descrição

Um código de resposta HTTP 403 significa que um cliente está proibido de acessar um URL válido. O servidor entende a solicitação, mas não consegue atendê-la devido a problemas do lado do cliente.

As APIs do API Gateway podem retornar respostas 403 por qualquer um dos seguintes motivos:

ProblemaCabeçalho de respostaMensagem de erroCausa raiz
Acesso negado"x-amzn-errortype" = "AccessDeniedException"“O usuário não está autorizado a acessar este recurso com uma negação explícita”O chamador não está autorizado a acessar uma API que está usando um autorizador Lambda do API Gateway.
Acesso negado"x-amzn-errortype" = "AccessDeniedException""Usuário: <user-arn> não está autorizado a executar: execute-api:Invoke no recurso: <api-resource-arn> com uma negação explícita”O chamador não está autorizado a acessar uma API que está usando a autorização do AWS Identity and Access Management (IAM). Ou a API tem uma política de recursos anexada que nega explicitamente o acesso ao chamador.<br><br>Para obter mais informações, consulte Política de recursos e autenticação do IAM.
Acesso negado"x-amzn-errortype" = "AccessDeniedException""Usuário: anonymous não está autorizado a executar: execute-api:Invoke no recurso:<api-resource-arn>"O chamador não está autorizado a acessar uma API que está usando a autorização do IAM. Ou a API tem uma política de recursos anexada que não permite explicitamente que o chamador invoque a API.<br><br>Para obter mais informações, consulte Política de recursos e autenticação do IAM.
Acesso negado"x-amzn-errortype" = "AccessDeniedException""The security token included in the request is invalid."O chamador usou chaves do IAM que não são válidas para acessar uma API que está usando autorização do IAM.
Token de autenticação ausente"x-amzn-errortype" = "MissingAuthenticationTokenException""Token de autenticação ausente"Não foi encontrado um token de autenticação na solicitação.
O token de autenticação expirou"x-amzn-errortype" = "InvalidSignatureException"“Assinatura expirada”O token de autenticação da solicitação expirou.
A chave da API não é válida"x-amzn-errortype" = "ForbiddenException"“Identificador de chave de API inválido especificado”O chamador usou uma chave de API que não é válida para um método que exige uma chave de API.
A assinatura não é válida"x-amzn-errortype" = "InvalidSignatureException"“A assinatura de solicitação que calculamos não corresponde à assinatura que você forneceu. Verifique sua chave de acesso secreta da AWS e o método de assinatura.”A assinatura da solicitação não corresponde àquela do servidor ao acessar uma API que usa autorização do IAM.
AWS WAF filtrado"x-amzn-errortype" = "ForbiddenException""Proibido"A solicitação é bloqueada pela filtragem de firewall de aplicativos web quando o AWS WAF está ativado na API.
O caminho do recurso não existe"x-amzn-errortype" = "MissingAuthenticationTokenException""Token de autenticação ausente"Uma solicitação sem cabeçalho "Autorização" é enviada para um caminho de recurso da API que não existe.<br><br>Para obter mais informações, consulte Como soluciono erros 403 "Token de autenticação ausente" do endpoint da API REST do API Gateway?
O caminho do recurso não existe"x-amzn-errortype" = "IncompleteSignatureException""O cabeçalho da autorização requer o parâmetro 'Credential'. O cabeçalho da autorização requer o parâmetro 'Signature'. O cabeçalho da autorização requer o parâmetro 'SignedHeaders'. O cabeçalho de autorização requer a existência de um cabeçalho 'X-Amz-Date' ou 'Date'. Authorization=allow"Uma solicitação com um cabeçalho “Authorization” é enviada para um caminho de recurso da API que não existe.
Invocação de uma API privada usando nomes DNS públicos de maneira incorreta"x-amzn-errortype" = "ForbiddenException""Proibido"Invocação de uma API privada de dentro de uma Amazon Virtual Private Cloud (Amazon VPC) usando nomes DNS públicos de maneira incorreta. Por exemplo: o cabeçalho "Host" ou "x-apigw-api-id" está ausente da solicitação.<br><br>Para obter mais informações, consulte Invocar a API privada usando nomes de host DNS públicos específicos de endpoint.
Invocação de uma API REST que tem um nome de domínio personalizado usando o endpoint execute-api padrão"x-amzn-errortype" = "ForbiddenException""Proibido"O chamador usa o endpoint execute-api padrão para invocar uma API REST depois de desativar o endpoint padrão.<br><br>Para obter mais informações, consulte Desativar o endpoint padrão para uma API REST
Invocação de um nome de domínio personalizado do API Gateway que exige Transport Layer Security (TLS) mútuo usando um certificado de cliente que não é válido."x-amzn-errortype" = "ForbiddenException""Proibido"O certificado de cliente apresentado na solicitação da API não é emitido pelo truststore do nome de domínio personalizado ou não é válido.<br><br>Para obter mais informações, consulte Como soluciono problemas de erros HTTP 403 Forbidden de um nome de domínio personalizado do API Gateway que requer TLS mútuo?
Invocação de um nome de domínio personalizado sem um mapeamento de caminho base"x-amzn-errortype" = "ForbiddenException""Proibido"O chamador invoca um domínio personalizado sem que um caminho base seja mapeado para uma API.<br><br>Para obter mais informações, consulte Configurar nomes de domínio personalizados para APIs REST.
Invocação de uma API com domínio personalizado ativado quando o URL do domínio inclui o estágio"x-amzn-errortype" = "MissingAuthenticationTokenException""Token de autenticação ausente"Um mapeamento de API especifica uma API, um estágio e, opcionalmente, um caminho a ser usado para o mapeamento. Portanto, quando o estágio de uma API é mapeado para um domínio personalizado, você não precisa mais incluir o estágio no URL.<br><br>Para obter mais informações, consulte Como trabalhar com mapeamentos de API para APIs REST.
O estágio do URL da solicitação não é válido"x-amzn-errortype" = "ForbiddenException""Proibido"O URL da solicitação do chamador inclui um estágio que não existe. Verifique se o estágio existe e se a ortografia do URL da solicitação está correta.<br><br>Para obter mais informações, consulte Chamar uma API REST no Amazon API Gateway.

Resolução

Considere a origem do erro

Se o erro 403 tiver sido relatado por outros recursos, talvez haja uma causa diferente para o erro. Por exemplo:

  • Se o erro foi relatado em um navegador da Web, esse erro pode ter sido causado por uma configuração incorreta do proxy. O servidor proxy retornará um erro 403 se o acesso HTTP não for permitido.
  • Se houver outro serviço da AWS na frente da API, esse serviço poderá rejeitar a solicitação com um erro 403 na resposta. Por exemplo: Amazon CloudFront.

Identifique o que está causando o erro

Se você ainda não o fez, configure o registro em log de acesso do Amazon CloudWatch para sua API. Em seguida, visualize os logs de execução da sua API no CloudWatch para determinar se as solicitações estão chegando à API.

Observação: as APIs HTTP não oferecem suporte a registro em log de execução. Para solucionar erros 403 retornados por um nome de domínio personalizado que exige TLS mútuo e invoca uma API HTTP, é preciso fazer o seguinte:

1.Crie um novo mapeamento de API para seu nome de domínio personalizado que invoque uma API REST apenas para fins de teste.

2.Identifique o que está causando os erros visualizando os logs de execução da API REST no CloudWatch.

3.Depois que o erro for identificado e solucionado, redirecione o mapeamento da API do seu nome de domínio personalizado de volta para a API HTTP.

Confirme se o recurso solicitado existe na definição da API

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

Verifique o seguinte usando o console do API Gateway ou a AWS CLI:

  • A API foi implantada com a definição de API mais recente.
  • O recurso solicitado existe na definição da API.

Use curl para obter detalhes de solicitação e resposta

Se o erro puder ser reproduzido, use o comando curl -v para obter mais detalhes entre o cliente e a API, como o seguinte:

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

Observação: para obter mais informações, consulte o site do projeto curl.

Verifique se o cabeçalho da solicitação está correto

Se o erro for resultado de uma chave de API inválida, verifique se o cabeçalho "x-api-key" foi enviado na solicitação.

Verifique se a configuração de DNS em todos os endpoints da Amazon VPC da interface está definida corretamente

Observação: confirme o seguinte para as APIs invocadas de uma Amazon VPC que tem somente um endpoint da VPC da interface.

Verifique se a configuração de DNS do endpoint de interface está definida corretamente com base no tipo de API em utilização.

Lembre-se:

  • Para invocar uma API regional de dentro de uma Amazon VPC, os nomes DNS privados devem ser desativados no endpoint de interface. Em seguida, o nome do host do endpoint pode ser resolvido por um DNS público. Para obter mais informações, consulte Criar uma API privada no Amazon API Gateway.
  • Para invocar uma API privada de dentro de uma Amazon VPC usando o nome DNS privado da API, os nomes DNS privados devem estar ativados no endpoint de interface. Em seguida, o nome do host do endpoint de interface pode ser resolvido para os recursos de sub-rede locais do Amazon VPC. Para obter mais informações, consulte Como invocar uma API privada.
    Observação: você não precisa configurar um DNS privado se estiver invocando a API privada por meio de um dos seguintes procedimentos:
    O nome DNS público da API privada.
    -ou-
    Um alias do Amazon Route 53.

Examine a política de recursos da API

Examine a política de recursos da API para verificar o seguinte:

Examine as mensagens de solicitação e resposta HTTP

Reproduza o erro em um navegador da Web, se possível. Em seguida, use as ferramentas de rede do navegador para capturar as mensagens de solicitação e resposta HTTP e examiná-las para determinar onde o erro ocorreu.

Observação: para análise off-line, salve as mensagens em um arquivo HTTP Archive (HAR).

Informações relacionadas

Erros comuns - Amazon API Gateway

Como faço para permitir que somente endereços IP específicos acessem minha API REST do API Gateway?

Como soluciono problemas ao me conectar a um endpoint de API privada do API Gateway?

Como faço para ativar o CloudWatch Logs para solucionar problemas com minha API REST do API Gateway ou API WebSocket?