¿Cómo soluciono los problemas de permisos con Lambda?

Actualización más reciente: 26-10-2022

Tengo varios problemas de permisos asociados a mi función de AWS Lambda. ¿Qué medidas de solución de problemas debo tomar?

Descripción corta

Los problemas de permisos de la función Lambda surgen por los siguientes motivos:

  • La función Lambda no tiene permiso para ejecutar las acciones del código.
  • El servicio de AWS responsable de invocar la función Lambda no tiene permisos suficientes para invocar la función.
  • Una cuenta de usuario no tiene los permisos adecuados para crear, actualizar o eliminar recursos de Lambda.
  • Lambda no tiene permiso para crear una interfaz de red elástica debido a la falta de permisos de Amazon Elastic Compute Cloud (Amazon EC2).

Resolución

Consideraciones sobre permisos

  • Un rol de ejecución de una función Lambda es un rol de AWS Identity and Access Management que otorga a la función permisos para acceder a los servicios y recursos de AWS. Usted proporciona este rol cuando crea una función, y Lambda asume el rol cuando se invoca dicha función. Puede crear un rol de ejecución que tenga permisos para enviar registros a Amazon CloudWatch y cargar datos de rastreo en AWS X-Ray.
  • Puede agregar o eliminar permisos del rol de ejecución de una función Lambda en cualquier momento. También puede configurar la función Lambda para que utilice un rol diferente. Agregue permisos para cualquier servicio de AWS al que llame su función con un SDK de AWS. A continuación, agregue permisos para los servicios de AWS que Lambda usa para activar las funciones opcionales.
  • Se proporciona una función de ejecución al crear una función Lambda. Al invocar la nueva función Lambda, Lambda le proporciona automáticamente credenciales temporales a la función al asumir la función de ejecución. No tiene que llamar a sts:AssumeRole en el código de su función. Al agregar permisos a la función Lambda, actualice también el código o la configuración de la función. Al actualizar el código o la configuración de la función, las instancias en ejecución de la función se ven obligadas a detenerse para poder ser reemplazadas. Para obtener más información, consulte Uso de políticas basadas en recursos para Lambda.
  • Utilice políticas basadas en recursos para conceder permisos de uso a otras cuentas u organizaciones de AWS para cada recurso. Una política basada en recursos puede dar permiso a un servicio de AWS para invocar la función Lambda en su nombre.
  • Para invocar o administrar una función Lambda, conceda permiso a una cuenta. Cree una política única basada en recursos para conceder permisos a toda una organización en AWS Organizations. Utilice políticas basadas en recursos para conceder el permiso de invocación a un servicio de AWS, de modo que se pueda invocar una función en respuesta a las actividades específicas de la cuenta.
  • Las políticas basadas en recursos se aplican a una sola función, versión, alias o versión de capa. Las políticas basadas en recursos otorgan permisos a uno o más servicios y cuentas de AWS. Para las cuentas de confianza que necesitan acceso a varios recursos o para utilizar acciones de la API que las políticas basadas en recursos no admiten, utilice roles multicuenta. Para obtener más información, consulte Permisos de Lambda.
  • Utilice políticas de IAM basadas en la identidad para conceder a los usuarios de su cuenta el acceso a Lambda. Las políticas basadas en la identidad se pueden aplicar directamente a los usuarios o a los grupos y roles que están asociados a un usuario. Otorgue permisos a los usuarios de otra cuenta para que asuman un rol en su cuenta y accedan a sus recursos de Lambda.
  • Lambda proporciona políticas administradas por AWS que otorgan acceso a las acciones de la API de Lambda. Las políticas administradas pueden conceder acceso a otros servicios de AWS utilizados para desarrollar y administrar los recursos de Lambda. Lambda actualiza estas políticas administradas según sea necesario para garantizar que los usuarios tengan acceso a nuevas características cuando se publiquen. Para obtener más información, consulte Políticas de IAM basadas en identidad para Lambda.

Pasos de solución

1.    Si se supone que la función Lambda debe invocar otra función u otro servicio de AWS y está fallando, compruebe la función de ejecución de Lambda.
Para obtener más información, consulte Rol de ejecución de Lambda.

2.    Compruebe que el servicio o usuario de AWS tenga establecidos los permisos para la acción lambda:InvokeFunction.
Para obtener más información, consulte Acciones, recursos y claves de condición para AWS Lambda.

3.    En un escenario multicuenta, acceda a las cuentas de origen y destino para comprobar los permisos necesarios para asumir un rol de IAM e invocar la función Lambda.
Para obtener más información, consulte How do I configure a Lambda function to assume an IAM role in another AWS account? (¿Cómo configuro una función Lambda para que asuma un rol de IAM en otra cuenta de AWS?)

4.    Para conectarse a una VPC, el rol de ejecución de la función de Lambda debe tener los siguientes permisos:
ec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface

5.    Compare el conjunto de permisos que no funcionan con cualquiera de sus configuraciones de trabajo para resolver los problemas de permisos. También puede consultar la documentación de AWS para verificar los permisos.

6.    La cuenta de origen debe tener permiso para invocar la función Lambda. Revise los permisos de asignación de orígenes de eventos requeridos para la función Lambda. La asignación de origen de eventos utiliza los permisos del rol de ejecución de la función para leer y administrar los elementos del origen de eventos. Los permisos, la estructura de los eventos, la configuración y el comportamiento del sondeo varían según el origen de eventos. Para obtener más información, consulte Solución de problemas de identidad y acceso a AWS Lambda.

7.    Consulte los registros de AWS CloudTrail para rastrear las llamadas a la API realizadas a Lambda. Revise la información recopilada por CloudTrail para determinar:
La solicitud que se hizo a Lambda.
La dirección IP desde la que se realizó la solicitud.
Quién hizo la solicitud.
Cuándo se hizo la solicitud.
Para obtener más información, consulte Registro de llamadas a la API de Lambda con CloudTrail.

8.    Si sigue sin poder resolver el problema, abra un caso con AWS Support. Proporcione la siguiente información en el caso:

  • ARN de la función Lambda.
  • El flujo de trabajo en la configuración de la función de AWS Lambda con todos los servicios incluidos.
  • Detalles sobre si el problema es ocasional o continuo.
  • Detalles sobre si el problema es una situación entre cuentas.
  • Los permisos o los nombres de los roles de IAM involucrados.
  • Registros completos de CloudWatch en formato .txt desde que se produjo el problema. Estos registros de CloudWatch se utilizan para identificar errores de la función Lambda que incluyen problemas de tiempo de espera, duraciones iniciales y problemas de permisos.
  • La marca de tiempo exacta del problema con la zona horaria o marca de tiempo en UTC.

Nota: por motivos de seguridad y privacidad, los representantes de AWS Support no tienen acceso a los registros de CloudWatch de los clientes.