Como soluciono os erros “HTTP 403 Forbidden” ao usar um autorizador do Lambda com uma API REST do API Gateway?

6 minuto de leitura
0

As chamadas para minha API REST do Amazon API Gateway estão recebendo erros “403 Forbidden” depois que eu criei um autorizador do AWS Lambda . Como soluciono esses erros?

Breve descrição

Esse erro pode ocorrer se:

Se a chamada para sua API tiver um token ou fontes de identidade ausentes, nulas ou não validadas, você receberá um erro “401 Unauthorized”. Para obter mais informações, consulte Por que estou recebendo erros “401 Unauthorized” depois de criar um autorizador do Lambda?

Observação: este artigo aborda erros 403 relacionados aos autorizadores do Lambda configurados somente para uma API REST. Para obter informações sobre como solucionar outros tipos de erros 403, consulte Como soluciono erros “HTTP 403 Forbidden” do API Gateway?

Resolução

Confirme a causa do erro

Observação:

1.    Analise a mensagem de erro na resposta do API Gateway. Procure uma mensagem de erro semelhante a uma das seguintes.

Exemplo de mensagem de erro para funções do autorizador do Lambda que retornam um documento de política do IAM com uma negação explícita

{
    "message": "User is not authorized to access this resource with an explicit deny"
}

Exemplo de mensagem de erro para funções do autorizador do Lambda que retornam um documento de política do IAM com uma negação implícita

{
    "message": "User is not authorized to access this resource"
}

Exemplo de mensagem de erro para APIs REST que têm uma política de recursos anexada que nega implicitamente o acesso ao chamador

{
    "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn>"
}

Exemplo de mensagem de erro para APIs REST que têm uma política de recursos anexada que nega explicitamente o acesso ao chamador

{
    "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny"
}

Observação: para obter mais informações sobre o comportamento resultante quando o acesso a uma API do API Gateway é controlado por uma política do IAM, consulte Tabelas de resultados de avaliação de política.

2.    Veja os logs de execução do API Gateway no CloudWatch para analisar o fluxo de trabalho de autorização. Observe o resultado do autorizador do Lambda e o resultado da avaliação da política de recursos do API Gateway. Você recebe uma mensagem de erro de log semelhante a uma das seguintes.

Exemplo de mensagem de erro de log para quando um token necessário está ausente ou não corresponde à validação do token

Extended Request Id: MY92nHDwwwIdGxzR=
Unauthorized request: <request-id>

Observação: o ID de solicitação estendida é gerado aleatoriamente. O valor do ID de solicitação estendida em seus logs é diferente.

Exemplo de mensagem de erro de log para quando um autorizador do Lambda retorna uma política que nega o acesso

Sending request to https://lambda.<region>.amazonaws.com/2015-03-31/functions/<lambda-authorizer-arn>/invocations
Authorizer result body before parsing:
{
  "principalId": "user",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "<resource-arn>"
      }
    ]
  }
}
Using valid authorizer policy for principal: <principal>
Successfully completed authorizer execution
The client is not authorized to perform this operation.

Observação: a política devolvida depende do seu autorizador do Lambda. Se o resource-arn da política retornada não incluir o recurso solicitante, a solicitação será negada implicitamente.

Exemplo de mensagem de erro de log quando a política de recursos do API Gateway nega a solicitação

Extended Request Id: MY-BIVb4GEdGeZB=
ExplicitDenyException User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny: <request-id>

Resolva erros de “não autorizado a acessar este recurso” do autorizador do Lambda

Você pode obter erros não autorizado a acessar esse recurso de forma intermitente devido ao armazenamento de políticas em cache. Para confirmar se o Armazenamento de autorizações em cache está ativado, revise a configuração do autorizador do Lambda no console do API Gateway. Em seguida, faça o seguinte:

  • Para um teste único, execute o comando da AWS CLI flush-stage-authorizers-cache. Com as entradas de cache do autorizador apagadas, chame sua API novamente.
  • Desative o cache de políticas e chame sua API novamente.
    Observação: quando você desativa o cache de políticas para um autorizador baseado em parâmetros de solicitação, o API Gateway não valida as chamadas para sua API antes de invocar a função autorizadora do Lambda.
  • Altere a chave de cache do autorizador atualizando o nome do cabeçalho especificado em Fonte do token (para autorizadores baseados em token) ou em Fontes de identidade (para autorizadores baseados em parâmetros de solicitação). Reimplante sua API para confirmar as alterações. Em seguida, chame sua API novamente usando o cabeçalho do token recém-configurado ou as fontes de identidade.

Se você encontrar os erros de forma consistente, determine por que seu autorizador nega explicitamente o acesso ao chamador revisando o código da função autorizadora do Lambda. Se você determinou que o problema é causado pelo armazenamento em cache, você pode atualizar o código para que ele permita o acesso ao chamador. Para obter instruções, consulte Por que meu recurso de proxy do API Gateway com um autorizador do Lambda e com o cache ativado está retornando erros HTTP 403?

Resolva os erros “não autorizado a executar: execute-api:Invoke”

Verifique se sua política de recursos de APIs não é válida ou se ela nega explicitamente o acesso às suas chamadas revisando a política de recursos da sua API. Você pode ver os registros de execução da sua API para obter o resultado da resposta para a política de recursos.

Para obter mais informações, consulte Visão geral da linguagem da política de acesso para o Amazon API Gateway e a política de autorizadores e recursos do Lambda.


Informações relacionadas

Use autorizadores do Lambda do API Gateway

Atualizações em uma API REST que exigem reimplantação

Como controlar e gerenciar o acesso a uma API REST no API Gateway