Saltar al contenido

¿Cómo soluciono los errores «HTTP 403 Forbidden» al utilizar un autorizador de Lambda con una API de REST de API Gateway?

6 minutos de lectura
0

Tras crear un autorizador de AWS Lambda para mi API de REST de Amazon API Gateway, recibo el error «403 Forbidden» en las llamadas a la API.

Descripción breve

Nota: Este artículo aborda los errores 403 relacionados con los autorizadores de Lambda que están configurados únicamente para una API de REST. Para obtener información sobre cómo solucionar otros tipos de errores 403, consulta ¿Cómo puedo solucionar los errores HTTP 403 desde API Gateway?

Los errores «403 Forbidden» pueden producirse por los siguientes motivos:

  • El documento de política de AWS Identity and Access Management (IAM) devuelto por la función de autorizador de Lambda deniega explícitamente el acceso a la persona que llama.
  • El documento de política de IAM devuelto por la función de autorizador de Lambda no permite o deniega implícitamente el acceso a la persona que llama. La política de recursos adjunta a la API tampoco permite o deniega implícitamente el acceso a la persona que llama.
  • La API tiene una política de recursos adjunta que deniega explícitamente el acceso a la persona que llama.

Si la llamada a la API contiene un token u orígenes de identidad que faltan, son nulos o no están validados, aparece un error «401 Unauthorized». Para obtener más información, consulta ¿Por qué aparecen los errores «401 Unauthorized» de API Gateway después de crear un autorizador de Lambda?

Resolución

Confirmación de la causa del error

Si aún no lo has hecho, activa Registros de Amazon CloudWatch para tu API de REST de API Gateway. Si cambias la configuración del autorizador, vuelve a desplegar la API.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Consultar el mensaje del registro de errores

En la respuesta de API Gateway, busca un mensaje de registro de errores en los siguientes ejemplos.

Ejemplo de mensaje de error para las funciones de autorizador de Lambda que devuelven un documento de política de IAM con una denegación explícita:

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

Ejemplo de mensaje de error para las API de REST que tienen una política de recursos adjunta que deniega implícitamente el acceso a la persona que llama:

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

Ejemplo de mensaje de error para las API de REST que tienen una política de recursos adjunta que deniega explícitamente el acceso a la persona que llama:

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

Nota: Para obtener más información sobre las API de API Gateway que controla una política de IAM, consulta las tablas de resultados de la evaluación de políticas.

Consultar los registros de API Gateway

Para revisar el flujo de trabajo de autorización, consulta los registros de ejecución de API Gateway en Registros de CloudWatch. Ten en cuenta el resultado del autorizador de Lambda y el resultado de la evaluación de la política de recursos de API Gateway. Busca un mensaje de error de registro en los siguientes ejemplos.

Ejemplo de mensaje de registro de errores si falta un token obligatorio o no coincide con la validación del token:

Extended Request Id: EXAMPLEabcIdGxzR=Unauthorized request: request-id

Nota: El valor del ID de solicitud extendido en tus registros es diferente porque se genera de forma aleatoria.

Ejemplo de mensaje de registro de errores si un autorizador de Lambda devuelve una política que deniega el acceso:

Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/lambda-authorizer-arn/invocationsAuthorizer 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.

Nota: La política devuelta depende de tu autorizador de Lambda. Si el resource-arn de la política devuelta no incluye el recurso solicitante, la política deniega implícitamente las solicitudes.

Ejemplo de mensaje de registro de errores si la política de recursos de API Gateway deniega la solicitud:

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

Resolución de los errores «not authorized to access this resource» del autorizador de Lambda

Es posible que recibas los errores «not authorized to access this resource» de forma intermitente debido al almacenamiento en caché de políticas. Para confirmar que el almacenamiento en caché de autorización está activado, revisa la configuración del autorizador de Lambda en la consola de API Gateway. A continuación, realiza una de las siguientes acciones:

  • Para realizar una prueba única, ejecuta el comando flush-stage-authorizers-cache.de la AWS CLI. Una vez vaciadas las entradas de la caché del autorizador, vuelve a llamar a la API.
  • Desactiva el almacenamiento en caché de políticas, vuelve a desplegar tu API para confirmar los cambios y, a continuación, vuelve a llamar a la API.
    Nota: Si el almacenamiento en caché de políticas está desactivado para un autorizador basado en parámetros de solicitud, API Gateway no valida las llamadas a la API antes de invocar la función de autorizador de Lambda.
  • Para cambiar la clave de caché del autorizador, actualiza el nombre del encabezado especificado en Origen del token (para autorizadores basados en token) u Orígenes de identidad (para autorizadores basados en parámetros de solicitud). Vuelve a desplegar la API para confirmar los cambios. A continuación, vuelve a llamar a la API con el encabezado del token o los orígenes de identidad recién configurados.

Para determinar por qué el autorizador deniega explícitamente el acceso a la persona que llama, revisa el código de la función de autorizador de Lambda. Si determinas que el problema se debe al almacenamiento en caché, actualiza el código para permitir el acceso a la persona que llama.

Para obtener instrucciones, consulta ¿Por qué mi recurso de proxy de API Gateway con un autorizador de Lambda que tiene activado el almacenamiento en caché devuelve errores HTTP 403 «User is not authorized to access this resource»?

Resolución de los errores «not authorized to perform: execute-api:Invoke»

Para determinar si la política de recursos de la API no es válida o si deniega explícitamente el acceso a las llamadas, consulta la política de recursos de la API. Puedes ver los registros de ejecución de la API para obtener el resultado de la respuesta de la política de recursos. Para obtener más información, consulta Descripción general del lenguaje de la política de acceso de Amazon API Gateway y Política de autorizadores y recursos de Lambda.

Información relacionada

Uso de los autorizadores de Lambda de API Gateway

Control y administración del acceso a las API de REST en API Gateway