https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-permissions-work-in-aws-lambda-dr/E_AWS-permissions_1200x600.png

Cómo funcionan los permisos en AWS Lambda

Publicado el May 18, 2021

Tiempo de lectura: 2 minutos

Cuando se trabaja con AWS Lambda, muchos usuarios luchan con los permisos que utilizan otros servicios de AWS. Más concretamente, cómo acceder a servicios como S3, RDS, Transcribe u otros.

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Muchos crean un nuevo usuario IAMy establecen AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en variables de entorno. El SDK de AWS utiliza "automáticamente" esas claves o valores de un archivo de credenciales de AWS. (Véase la documentación sobre cómo el SDK utiliza esos valores). Sin embargo, añadir esas credenciales para un Lambda sería un error.

Identidad equivocada

El intento de .env impide que una aplicación acceda a los servicios de AWS desde Lambda. El fallo de conexión es independiente de cómo haya configurado el usuario IAM.

AWS_ACCESS_KEY_ID={{YOUR-ACCESS-KEY-HERE}} AWS_SECRET_ACCESS_KEY={{YOUR-SECRET-HERE}}

A medida que la función Lambda se despliega, las variables de entorno mostradas anteriormente son generadas por Lambda. Es decir, los valores del fichero .env no se establecen como se esperaba.

Para leer más sobre el despliegue con Serverless, echa un vistazo a AWS Lambda con PHP utilizando Bref y Serverless Framework o Python sin servidor con AWS Lambda.

Establecer permisos

Con las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY establecidas por Lambda, también es necesario establecer los permisos de la función durante la implementación. Todos los servicios de AWS también se gestionan directamente en la función de Lambda en lugar de un usuario de IAM.

A continuación se muestra un ejemplo yaml parcial que utiliza el marco Serverless para implementar una función AWS Lambda.

provider:
    name: aws
    region: us-east-1
    runtime: provided
    iamRoleStatements:
        - Effect: Allow
          Action:
              - s3:PutObject
              - s3:GetObject
              - s3:DeleteObject
          Resource: 'arn:aws:s3:::bucket-name/*'
        - Effect: Allow
          Action: transcribe:*
          Resource: '*'

Observe el bloque iamRoleStatements del ejemplo anterior. En él, se concede a la lambda s3:PutObject, s3:GetObjecty s3:DeleteObject al recurso bucket-name y a todo lo que contenga. Además, la función tiene acceso a transcribe:* servicios.

El ejemplo anterior es muy similar a cómo se establecen los permisos IAM en los ejemplos siguientes:

aws_iam_s3_policyAWS IAM S3 Policy Example

amazon_iam_transcribe_policyAWS IAM Transcribe Policy Example

Examinar los permisos

Tras la implementación correcta en AWS Lambda, los permisos activos de la función se pueden ver en la consola de AWS. Para ello, vaya a la pestaña Permisos de la consola de la función.

lambda_function_permissionsAWS Lambda Function Permissions

Desde ahí, puedes hacer clic en los permisos de cada servicio para obtener un desglose más detallado de cómo los has configurado.

¿Qué sigue?

La documentación sobre los posibles permisos para varios servicios de AWS está disponible en la Documentación de AWS Identity and Access Management. Además, esté atento a futuras publicaciones con ejemplos de uso de estos permisos en acción.

Compartir:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAntiguos alumnos de Vonage

Adam es un desarrollador y consultor al que le gusta correr a toda velocidad, bloguear y ayudar a otros a domar la tecnología para conseguir cosas increíbles, con un deseo insaciable de servir de mentor y ayudar.