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

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Para configurar Lambda@Edge, debe configurar permisos de IAM específicos y un rol de ejecución de IAM. Lambda@Edge también crea roles vinculados a servicios para replicar funciones de Lambda en regiones CloudFront y permitir que CloudWatch utilice archivos de registro de CloudFront.

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

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

  • lambda:GetFunction

    Permite al usuario obtener información de configuración para la función Lambda y una URL prefirmada para descargar un archivo .zip que contiene la función.

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

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

  • lambda:EnableReplication*

    Agrega un permiso a la política de recursos que proporciona al servicio de replicación de Lambda permiso para obtener una configuración y un código de función.

    importante

    Se requiere el asterisco (*) al final del permiso: lambda:EnableReplication*

    Para el recurso, especifique el ARN de la función (sin el número de versión) que desea ejecutar cuando se produzca un evento de CloudFront, tal como se muestra en el ejemplo siguiente:

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

  • iam:CreateServiceLinkedRole

    Permite que el usuario cree un rol vinculado a un que utiliza Lambda@Edge para replicar funciones Lambda en CloudFront. Después de que la primera distribución que utilice con Lambda@Edge haya creado este rol, no es necesario que añada permisos a otras distribuciones que utilice con Lambda@Edge.

  • cloudfront:UpdateDistribution o bien cloudfront:CreateDistribution

    Use cloudfront:UpdateDistribution para actualizar una distribución o cloudfront:CreateDistribution para crear una distribución.

Para obtener más información, consulte la documentación siguiente:

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

Debe crear un rol de IAM que puedan asumir las entidades principales del servicio lambda.amazonaws.com y edgelambda.amazonaws.com. Este rol lo asumen las entidades principales del servicio cuando ejecutan la función. Para obtener más información, consulte Creación de los roles y asociación de las políticas (consola) en el tema "Funciones de trabajos de AWS Managed Policies" de la Guía del usuario de IAM.

Añada esta función en la pestaña Trust Relationship (Relación de confianza) en IAM (no la añada en la pestaña Permissions (Permisos)).

A continuación se muestra un ejemplo de política de confianza de rol:

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

Para obtener información acerca de los permisos que debe conceder al rol de ejecución, consulte Administración de permisos mediante un rol de IAM (rol de ejecución) en la Guía para desarrolladores de AWS Lambda. Tenga en cuenta lo siguiente:

  • 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 CloudWatch Logs, consulte Métricas de CloudWatch y CloudWatch Logs para funciones de Lambda.

  • 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 operación.

Roles vinculados a servicios para Lambda@Edge

Lambda@Edge utiliza roles vinculados a servicios de AWS Identity and Access Management (IAM). Un rol vinculado a un servicio es un tipo único de rol de IAM que está vinculado directamente a un servicio. Las funciones vinculadas a servicios son 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 el siguiente rol vinculado al servicio de IAM:

  • AWSServiceRoleForLambdaReplicator: Lambda@Edge usa este rol para permitir que Lambda@Edge replique funciones a regiones de AWS.

  • AWSServiceRoleForCloudFrontLogger: CloudFront utiliza este rol para insertar archivos de registro en su cuenta de CloudWatch, para ayudarle a depurar los errores de validación de Lambda@Edge.

Cuando se agrega un desencadenador de Lambda@Edge por primera vez en CloudFront, se crea automáticamente un rol denominado AWSServiceRoleForLambdaReplicator que permite a Lambda@Edge replicar funciones en las distintas regiones de AWS. Este rol es necesario para utilizar las funciones de Lambda@Edge. El ARN del rol AWSServiceRoleForLambdaReplicator tiene este aspecto:

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

El segundo rol, denominado AWSServiceRoleForCloudFrontLogger, se crea automáticamente cuando agrega la 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 para el rol AWSServiceRoleForCloudFrontLogger tiene el siguiente 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. La política de permisos no se puede asociar 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 al asegurarse de que no elimina un rol vinculado a un servicio que sigue siendo necesario para obtener acceso a los recursos activos.

Para obtener información sobre otros servicios que admiten roles vinculados a servicios, consulte Servicios de AWS que funcionan con IAM y busque los servicios que tienen en la columna Rol vinculado a servicio.

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 de roles vinculados a servicios para Lambda Replicator

Este rol vinculado a servicios permite a Lambda replicar las funciones de Lambda@Edge en las regiones de AWS.

El rol vinculado al servicio AWSServiceRoleForLambdaReplicator confía en el siguiente servicio para que asuma el rol:

  • replicator.lambda.amazonaws.com

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

  • Acción: lambda:CreateFunction en arn:aws:lambda:*:*:function:*

  • Acción: lambda:DeleteFunction en arn:aws:lambda:*:*:function:*

  • Acción: lambda:DisableReplication en arn:aws:lambda:*:*:function:*

  • Acción: iam:PassRole en all AWS resources

  • Acción: cloudfront:ListDistributionsByLambdaFunction en all AWS resources

Permisos de rol vinculados a servicios para CloudFront Logger

Este rol vinculado al servicio permite a CloudFront enviar los archivos de registro a su cuenta de CloudWatch, para ayudarle a depurar errores de validación de Lambda@Edge.

El rol vinculado al servicio AWSServiceRoleForCloudFrontLogger confía en el siguiente servicio para asumir el rol:

  • logger.cloudfront.amazonaws.com

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

  • Acción: logs:CreateLogGroup en arn:aws:logs:*:*:log-group:/aws/cloudfront/*

  • Acción: logs:CreateLogStream en arn:aws:logs:*:*:log-group:/aws/cloudfront/*

  • Acción: logs:PutLogEvents en arn:aws:logs:*:*:log-group:/aws/cloudfront/*

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 un rol AWSServiceRoleForLambdaReplicator, si aún no existe, que permite a Lambda replicar funciones 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 actualiza o crea una distribución de CloudFront que tiene una asociación Lambda@Edge, el servicio crea un rol, AWSServiceRoleForCloudFrontLogger, si el rol no existe ya, que permite a CloudFront enviar los archivos de registro a 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.

Si debe crear manualmente estos roles vinculados a servicios, ejecute los siguientes comandos con la CLI de AWS:

Para crear el rol AWSServiceRoleForLambdaReplicator

aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com

Para crear el rol AWSServiceRoleForCloudFrontLogger

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

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

Lambda@Edge no permite editar los roles vinculados al servicio 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 editar la descripción de un rol mediante IAM. Para obtener más información, consulte Editar un rol vinculado a un servicio en la Guía del usuario de IAM.

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

Si ya no tiene que utilizar Lambda@Edge, le recomendamos que elimine los roles vinculados a servicios. De esta forma no tendrá entidades no utilizadas que no se monitoricen ni mantengan de forma activa. Sin embargo, debe limpiar los recursos de Lambda@Edge de la cuenta antes de poder eliminar manualmente los roles.

Para eliminar todas las asociaciones de Lambda@Edge de sus distribuciones, actualice las distribuciones con el fin de eliminar todos los disparadores de funciones de Lambda@Edge o elimine las distribuciones que utilizan funciones de Lambda@Edge. Para obtener más información, consulte Eliminación de funciones de Lambda@Edge y réplicas.

Una vez que haya eliminado todas las asociaciones de funciones de Lambda@Edge de las distribuciones y que CloudFront haya eliminado las réplicas de las funciones de las ubicaciones de AWS, puede eliminar los roles vinculados a servicios.

nota

Si CloudFront no ha finalizado la actualización, la eliminación del rol vinculado a servicio puede dar un error. En tal caso, espere unos minutos y realice de nuevo los pasos de eliminación.

Debe seguir procedimientos distintos para eliminar manualmente cada rol vinculado al servicio:

  • Elimine el rol AWSServiceRoleForLambdaReplicator mediante la consola de CloudFront.

  • Elimine el rol AWSServiceRoleForCloudFrontLogger mediante la consola de IAM.

Para eliminar manualmente el rol vinculado al servicio AWSServiceRoleForLambdaReplicator

  1. Inicie sesión en la consola de administración de AWS y abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/.

  2. En la página CloudFront Distributions (Distribuciones de CloudFront), haga clic en el avatar de la parte superior derecha.

    
  		      Captura de pantalla que muestra el avatar en CloudFront.
  3. Elija Eliminar.

    
  	        Captura de pantalla que muestra el cuadro de diálogo para eliminar el rol vinculado a servicio de Lambda en CloudFront.

Para eliminar manualmente los roles vinculados al servicio AWSServiceRoleForCloudFrontLogger

  1. Inicie sesión en la consola de administración de AWS y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación de la consola de IAM, elija Roles. A continuación, seleccione la casilla junto al nombre del rol que desea eliminar, no el nombre ni la fila.

  3. En Role actions (Acciones de rol) en la parte superior de la página, elija Delete role (Eliminar rol).

  4. En el cuadro de diálogo de confirmación, revise los datos del último acceso al servicio, que muestra cuándo cada uno de los roles seleccionados tuvo acceso a un servicio de AWS por última vez. Esto le ayuda a confirmar si el rol está actualmente activo. Si desea continuar, seleccione Yes, Delete para enviar la solicitud de eliminación del rol vinculado al servicio.

  5. Consulte las notificaciones de la consola de IAM para monitorear el progreso de la eliminación del rol vinculado al servicio. Como el proceso de eliminación del rol vinculado al servicio de IAM es asíncrono, dicha tarea puede realizarse correctamente o fallar después de que envía la solicitud de eliminación. Para obtener más información, consulte Eliminar un rol vinculado a un servicio en la Guía del usuario de IAM.

Regiones admitidas para roles vinculados a servicios de CloudFront

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

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

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

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

  • Asia-Pacífico (Mumbai) (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)

  • UE (Fráncfort) (eu-central-1)

  • UE (Irlanda) (eu-west-1)

  • UE (Londres) (eu-west-2)

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