Configuración de permisos y roles de IAM para Lambda@Edge - Amazon CloudFront

Configuración de permisos y roles de IAM para Lambda@Edge

Para configurar Lambda@Edge, debe tener los siguientes permisos y roles de IAM para Lambda:

Permisos de IAM necesarios para asociar funciones de Lambda@Edge con distribuciones de CloudFront

Además de los permisos de IAM necesarios para Lambda, necesita los siguientes permisos para asociar funciones de Lambda a las distribuciones de CloudFront:

  • lambda:GetFunction: concede permisos para obtener información de configuración para la función de Lambda y una URL prefirmada para descargar un archivo .zip que contiene la función.

  • lambda:EnableReplication*: concede permisos a la política de recursos de modo que el servicio de replicación de Lambda pueda obtener una configuración y un código de función.

  • lambda:DisableReplication*: concede permisos a la política de recursos de modo que el servicio de replicación de Lambda pueda eliminar la función.

    importante

    Debe agregar el asterisco (*) al final de las acciones lambda:EnableReplication* y lambda:DisableReplication*.

  • Para el recurso, especifique el ARN de la versión de la función que desea ejecutar cuando se produzca un evento de CloudFront, como en el ejemplo siguiente:

    arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2

  • iam:CreateServiceLinkedRole: concede permiso para crear un rol vinculado a un servicio que utiliza Lambda@Edge para replicar funciones de Lambda en CloudFront. Después de configurar Lambda@Edge por primera vez, el rol vinculado a un servicio se crea automáticamente. No es necesario agregar este permiso a otras distribuciones que utilizan Lambda@Edge.

  • cloudfront:UpdateDistribution o cloudfront:CreateDistribution: concede permiso para actualizar o crear una distribución.

Para obtener más información, consulte los temas siguientes:

Rol de ejecución de funciones para las entidades principales del servicio

Debe crear un rol de IAM que las entidades principales de servicio lambda.amazonaws.com y edgelambda.amazonaws.com puedan asumir cuando ejecuten su función.

sugerencia

Cuando crea la función en la consola de Lambda, puede elegir crear un nuevo rol de ejecución utilizando una plantilla de políticas de AWS. En este paso, se agregan automáticamente los permisos de Lambda@Edge necesarios para ejecutar la función. Consulte el Paso 5 del tutorial: creación de una función de Lambda@Edge sencilla.

Para obtener más información sobre cómo crear un rol de IAM manualmente, consulte Creación de roles y asociación de políticas (consola) en la Guía del usuario de IAM.

ejemplo Ejemplo: Política de confianza de rol

Puede agregar este rol en la pestaña Relación de confianza en la consola de IAM. No agregue esta política en la pestaña Permisos.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "edgelambda.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

Para obtener más información sobre los permisos que debe conceder al rol de ejecución, consulte Permisos de acceso a recursos de Lambda en la Guía para desarrolladores de AWS Lambda.

Notas
  • De forma predeterminada, siempre que un evento de CloudFront desencadene una función de Lambda, los datos se escriben en CloudWatch Logs. Si desea utilizar estos registros, el rol de ejecución necesita permiso para escribir datos en CloudWatch Logs. Puede utilizar la política predefinida AWSLambdaBasicExecutionRole para conceder permisos al rol de ejecución.

    Para obtener más información acerca de Registros de CloudWatch, consulte Registros de funciones perimetrales.

  • Si el código de la función de Lambda tiene acceso a otros recursos de AWS, como, por ejemplo, la lectura de un objeto de un bucket de S3, el rol de ejecución necesita permiso para realizar esa acción.

Roles vinculados a servicios para Lambda@Edge

Lambda@Edge utiliza roles vinculados a servicios de IAM. Un rol vinculado a un servicio es un tipo único de rol de IAM que está vinculado directamente a un servicio. Los roles vinculados a servicios están predefinidos por el servicio e incluyen todos los permisos que el servicio requiere para llamar a otros servicios de AWS en su nombre.

Lambda@Edge usa los siguientes roles vinculados a servicios de IAM:

  • AWSServiceRoleForLambdaReplicator Lambda@Edge utiliza este rol para permitir que Lambda@Edge replique funciones en Regiones de AWS.

    Cuando se agrega un desencadenador de Lambda@Edge por primera vez en CloudFront, se crea automáticamente un rol denominado AWSServiceRoleForLambdaReplicator para permitir que Lambda@Edge replique funciones en Regiones de AWS. Este rol es necesario para utilizar las funciones de Lambda@Edge. El ARN del rol AWSServiceRoleForLambdaReplicator tiene el aspecto del siguiente ejemplo:

    arn:aws:iam::123456789012:role/aws-service-role/replicator.lambda.amazonaws.com/AWSServiceRoleForLambdaReplicator

  • AWSServiceRoleForCloudFrontLogger: CloudFront utiliza este rol para insertar archivos de registro en CloudWatch. Puede usar archivos de registro para depurar los errores de validación de Lambda@Edge.

    El rol AWSServiceRoleForCloudFrontLogger se crea automáticamente al agregar una asociación de función de Lambda@Edge para permitir que CloudFront envíe archivos de registro de errores de Lambda@Edge a CloudWatch. El ARN del rol AWSServiceRoleForCloudFrontLogger tiene este aspecto:

    arn:aws:iam::account_number:role/aws-service-role/logger.cloudfront.amazonaws.com/AWSServiceRoleForCloudFrontLogger

Los roles vinculados a servicios simplifican la configuración y el uso de Lambda@Edge porque no será necesario añadir manualmente los permisos necesarios. Lambda@Edge define los permisos de sus roles vinculados a servicios y solo Lambda@Edge puede asumir estos roles. Los permisos definidos incluyen la política de confianza y la política de permisos. No se puede adjuntar la política de permisos a ninguna otra entidad de IAM.

Debe eliminar los recursos de CloudFront o de Lambda@Edge asociados para poder eliminar un rol vinculado a servicio. Esto ayuda a proteger sus recursos de Lambda@Edge de modo que no elimine un rol vinculado a un servicio que sigue siendo necesario para obtener acceso a los recursos activos.

Para obtener más información acerca de los roles vinculados a servicios, consulte Roles vinculados a servicios para CloudFront.

Permisos de roles vinculados a servicios para Lambda@Edge

Lambda@Edge utiliza dos roles vinculados a servicios, denominados AWSServiceRoleForLambdaReplicator y AWSServiceRoleForCloudFrontLogger. En las siguientes secciones se describen los permisos de cada uno de estos roles.

Permisos del rol vinculado a servicio para el replicador de Lambda

Este rol vinculado a servicio permite que Lambda replique las funciones de Lambda@Edge en Regiones de AWS.

El rol vinculado a servicios AWSServiceRoleForLambdaReplicator confía en el servicio replicator.lambda.amazonaws.com para asumir el rol.

La política de permisos del rol permite que Lambda@Edge realice las siguientes acciones en los recursos especificados:

  • lambda:CreateFunction del arn:aws:lambda:*:*:function:*

  • lambda:DeleteFunction del arn:aws:lambda:*:*:function:*

  • lambda:DisableReplication del arn:aws:lambda:*:*:function:*

  • iam:PassRole del all AWS resources

  • cloudfront:ListDistributionsByLambdaFunction del all AWS resources

Permisos de rol vinculado a servicio para el registrador de CloudFront

Este rol vinculado a un servicio permite que CloudFront envíe archivos de registro a CloudWatch de modo que pueda depurar errores de validación de Lambda@Edge.

El rol vinculado a servicios AWSServiceRoleForCloudFrontLogger confía en el servicio logger.cloudfront.amazonaws.com para asumir el rol.

La política de permisos de rol permite que Lambda@Edge realice las siguientes acciones en el recurso de arn:aws:logs:*:*:log-group:/aws/cloudfront/* especificado:

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

Debe configurar permisos para permitir que una entidad de IAM (como un usuario, grupo o rol) elimine los roles vinculados a servicios de Lambda@Edge. Para obtener más información, consulte Permisos de roles vinculados a servicios en la Guía del usuario de IAM.

Creación de roles vinculados a servicios para Lambda@Edge

Normalmente no es necesario crear manualmente los roles vinculados a servicios para Lambda@Edge. El servicio crea los roles automáticamente en los siguientes casos:

  • Cuando se crea un desencadenador por primera vez, el servicio crea el rol AWSServiceRoleForLambdaReplicator (si aún no existe). Este rol permite que Lambda replique las funciones de Lambda@Edge en Regiones de AWS.

    Si elimina el rol vinculado a servicio, el rol se creará de nuevo al añadir un nuevo disparador para Lambda@Edge en una distribución.

  • Cuando se actualiza o se crea una distribución de CloudFront que tiene una asociación de Lambda@Edge, el servicio crea un rol AWSServiceRoleForCloudFrontLogger (si no existe ya). Este rol permite a CloudFront insertar sus archivos de registro en CloudWatch.

    Si elimina el rol vinculado al servicio, el rol se creará de nuevo al actualizar o crear una distribución de CloudFront que tiene una asociación de Lambda@Edge.

Para crear manualmente estos roles vinculados a servicios, ejecute los siguientes comandos de la AWS Command Line Interface (AWS CLI):

Para crear el rol de AWSServiceRoleForLambdaReplicator
  • Ejecute el siguiente comando de la .

    aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com
Para crear el rol de AWSServiceRoleForCloudFrontLogger
  • Ejecute el siguiente comando de la .

    aws iam create-service-linked-role --aws-service-name logger.cloudfront.amazonaws.com

Edición de roles vinculados a servicios de Lambda@Edge

Lambda@Edge no permite editar los roles vinculados a servicios AWSServiceRoleForLambdaReplicator o AWSServiceRoleForCloudFrontLogger. Una vez que el servicio ha creado un rol vinculado a un servicio, no puede cambiarle el nombre, ya que varias entidades pueden hacer referencia a él. Sin embargo, puede utilizar IAM para editar la descripción del rol. Para obtener más información, consulte Editar un rol vinculado a servicios en la Guía del usuario de IAM.

Regiones de AWS admitidas para roles vinculados a servicios de CloudFront

CloudFront admite el uso de roles vinculados a servicios para Lambda@Edge en las siguientes Regiones de AWS:

  • Este de EE. UU. (Norte de Virginia) – us-east-1

  • Este de EE. UU. (Ohio) – us-east-2

  • Oeste de EE. UU. (Norte de California) – us-west-1

  • Oeste de EE. UU. (Oregón) – us-west-2

  • Asia-Pacífico (Bombay) – ap-south-1

  • Asia-Pacífico (Seúl) (ap-northeast-2)

  • Asia Pacífico (Singapur) – ap-southeast-1

  • Asia-Pacífico (Sídney) – ap-southeast-2

  • Asia-Pacífico (Tokio) – ap-northeast-1

  • Europa (Fráncfort) – eu-central-1

  • Europa (Irlanda) – eu-west-1

  • Europa (Londres) – eu-west-2

  • América del Sur (São Paulo) – sa-east-1