Definição das permissões e funções do IAM para o Lambda@Edge - Amazon CloudFront

Definição das permissões e funções do IAM para o Lambda@Edge

Para configurar o Lambda@Edge, você deve configurar permissões específicas do IAM e uma função de execução do IAM. O Lambda@Edge também cria funções vinculadas ao serviço para replicar funções do Lambda para regiões do CloudFront e para permitir que o CloudWatch use arquivos de log do CloudFront.

Permissões do IAM necessárias para associar funções do Lambda às distribuições do CloudFront

Além das permissões do IAM de que você precisa para usar o AWS Lambda, o usuário do IAM precisa das seguintes permissões do IAM para associar as funções Lambda às distribuições do CloudFront:

  • lambda:GetFunction

    Permite que o usuário obtenha informações de configuração para a função do Lambda e um URL pré-assinado para baixar um arquivo .zip que contém a função.

    Para o recurso, especifique o ARN da versão da função que você deseja executar quando ocorrer um evento do CloudFront, conforme mostrado no exemplo a seguir:

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

  • lambda:EnableReplication*

    Adiciona uma permissão à política de recurso que concede ao serviço de replicação do Lambda permissão para obter o código e a configuração da função.

    Importante

    O asterisco (*) no final da permissão é necessário: lambda:EnableReplication*

    Para o recurso, especifique o ARN da versão da função que você deseja executar quando ocorrer um evento do CloudFront, conforme mostrado no exemplo a seguir:

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

  • iam:CreateServiceLinkedRole

    Permite que o usuário crie uma função vinculada ao serviço usada pelo Lambda@Edge para replicar funções do Lambda no CloudFront. Após essa função ser criada pela primeira distribuição que você usa com o Lambda@Edge, não é necessário adicionar a permissão a outras distribuições usadas com o Lambda@Edge.

  • cloudfront:UpdateDistribution ou cloudfront:CreateDistribution

    Use cloudfront:UpdateDistribution para atualizar uma distribuição ou cloudfront:CreateDistribution para criar uma distribuição.

Para obter mais informações, consulte a documentação a seguir:

Função de execução de função para primários de serviço

Você deve criar uma função do IAM que possa ser presumidas pelos principais de serviço lambda.amazonaws.com e edgelambda.amazonaws.com. Essa função é assumida pelos principais de serviço quando executarem sua função. Para obter mais informações, consulte a seção Criar funções e anexar políticas (console) do Guia do usuário do IAM.

Você adiciona essa função sob a guia Trust Relationship (Relação de confiança) no IAM (não a adicione sob a guia Permissions (Permissões)).

Aqui está um exemplo de política de confiança da função:

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

Para obter informações sobre as permissões necessárias para conceder à função de execução, consulte Gerenciar permissões: como usar uma função do IAM (função de execução) no Guia do desenvolvedor do AWS Lambda. Observe o seguinte:

  • Por padrão, sempre que um evento do CloudFront aciona uma função do Lambda, os dados são gravados no CloudWatch Logs. Se você quiser usar esses logs, a função de execução precisará de permissão para registrar dados no CloudWatch Logs. Você pode usar a AWSLambdaBasicExecutionRole predefinida para conceder permissão para a função de execução.

    Para obter mais informações sobre o CloudWatch Logs, consulte Métricas do CloudWatch e o CloudWatch Logs para funções do Lambda@Edge.

  • Se o código da sua função Lambda acessar outros recursos da AWS, como leitura de um objeto em um bucket do S3, a função de execução precisará de permissão para executar essa operação.

Funções vinculadas ao serviço para o Lambda@Edge

O Lambda@Edge usa funções vinculadas a serviços do AWS Identity and Access Management (IAM). Uma função vinculada ao serviço é um tipo exclusivo de função do IAM vinculada diretamente a um serviço. As funções vinculadas a serviços são predefinidas pelo serviço e incluem todas as permissões de que ele precisa para chamar outros produtos da AWS em seu nome.

O Lambda@Edge usa a seguinte função vinculada a serviço do IAM:

  • AWSServiceRoleForLambdaReplicator: o Lambda@Edge usa essa função para permitir que ele mesmo replique funções para Regiões da AWS.

  • AWSServiceRoleForCloudFrontLogger: o CloudFront usa essa função para enviar arquivos de log por push para a sua conta do CloudWatch para ajudar a depurar erros de validação do Lambda@Edge.

Quando você adiciona um acionador do Lambda@Edge ao CloudFront, uma função chamada AWSServiceRoleForLambdaReplicator é criada automaticamente para permitir que o Lambda@Edge replique funções para o Regiões da AWS. Essa função é necessária para usar as funções do Lambda@Edge. O ARN para a função AWSServiceRoleForLambdaReplicator é semelhante a:

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

A segunda função, denominada AWSServiceRoleForCloudFrontLogger, é criada automaticamente quando você adiciona a associação da função do Lambda@Edge para permitir que o CloudFront envie arquivos de log de erros do Lambda@Edge ao CloudWatch. O ARN para a função AWSServiceRoleForCloudFrontLogger é semelhante a:

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

Uma função vinculada a serviço facilita a configuração e o uso do Lambda@Edge, pois você não precisa adicionar manualmente as permissões necessárias. Lambda@Edge define as permissões de suas funções vinculadas ao serviço e apenas Lambda@Edge pode assumir as funções. As permissões definidas incluem a política de confiança e a política de permissões. A política de permissões não pode ser anexada a nenhuma outra entidade do IAM.

Você deve remover todos os recursos do CloudFront ou do Lambda@Edge associados para poder excluir a função vinculada ao serviço. Isso ajuda a proteger seus recursos do Lambda@Edge, certificando-se de não remover uma função vinculada ao serviço que ainda seja necessária para acessar os recursos ativos.

Para obter informações sobre outros produtos que oferecem suporte a funções vinculadas ao serviço, consulte Serviços da AWS compatíveis com o IAM e procure os serviços que contêm Yes (Sim) na coluna Service-Linked Role (Função vinculada a serviço).

Permissões de função vinculada ao serviço para o Lambda@Edge

O Lambda@Edge usa duas funções vinculadas a serviços: AWSServiceRoleForLambdaReplicator e AWSServiceRoleForCloudFrontLogger. As seções a seguir descrevem as permissões para cada uma dessas funções.

Permissões de função vinculada ao serviço para o replicador do Lambda

Essa função vinculada ao serviço permite que o Lambda replique funções do Lambda@Edge para Regiões da AWS.

A função vinculada ao serviço AWSServiceRoleForLambdaReplicator conta com o seguinte serviço para assumir a função: replicator.lambda.amazonaws.com

A política de permissões da função permite que o Lambda@Edge conclua as seguintes ações nos recursos especificados:

  • Ação: lambda:CreateFunction em arn:aws:lambda:*:*:function:*

  • Ação: lambda:DeleteFunction em arn:aws:lambda:*:*:function:*

  • Ação: lambda:DisableReplication em arn:aws:lambda:*:*:function:*

  • Ação: iam:PassRole em all AWS resources

  • Ação: cloudfront:ListDistributionsByLambdaFunction em all AWS resources

Permissões de função vinculada ao serviço para o CloudFront Logger

Essa função vinculada ao serviço permite que o CloudFront envie arquivos de log por push à sua conta do CloudWatch, para ajudá-lo a depurar erros de validação do Lambda@Edge.

A função vinculada ao serviço AWSServiceRoleForCloudFrontLogger conta com o seguinte serviço para assumir a função: logger.cloudfront.amazonaws.com

A política de permissões da função permite que o Lambda@Edge conclua as seguintes ações nos recursos especificados:

  • Ação: logs:CreateLogGroup em arn:aws:logs:*:*:log-group:/aws/cloudfront/*

  • Ação: logs:CreateLogStream em arn:aws:logs:*:*:log-group:/aws/cloudfront/*

  • Ação: logs:PutLogEvents em arn:aws:logs:*:*:log-group:/aws/cloudfront/*

Você deve configurar permissões para permitir que uma entidade do IAM (como um usuário, grupo ou função) exclua uma função vinculada ao serviço do Lambda@Edge. Para obter mais informações, consulte Service-linked role permissions (Permissões de nível vinculado a serviços) no Guia do usuário do IAM.

Criação de funções vinculadas ao serviço para o Lambda@Edge

Normalmente, não é necessário criar manualmente as funções vinculadas a serviços para o Lambda@Edge. O serviço cria as funções automaticamente nas seguintes situações:

  • Quando você cria um acionador pela primeira vez, o serviço cria uma função AWSServiceRoleForLambdaReplicator. Caso a função ainda não exista, isso permitirá ao Lambda replicar as funções do Lambda@Edge para Regiões da AWS.

    Se você excluir a função vinculada ao serviço, a função será criada novamente quando você adicionar um novo gatilho para o Lambda@Edge em uma distribuição.

  • Quando você atualiza ou cria uma distribuição do CloudFront que tem uma associação ao Lambda@Edge, o serviço cria uma função AWSServiceRoleForCloudFrontLogger. Caso a função ainda não exista, isso permitirá que o CloudFront envie seus arquivos de log por push para o CloudWatch.

    Se você excluir a função vinculada ao serviço, ela será criada novamente quando você atualizar ou criar uma distribuição do CloudFront que tenha uma associação ao Lambda@Edge.

Se você precisar criar manualmente essas funções vinculadas ao serviço, execute os seguintes comandos usando a AWS CLI:

Para criar a função AWSServiceRoleForLambdaReplicator

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

Para criar a função AWSServiceRoleForCloudFrontLogger

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

Edição de funções vinculadas ao serviço do Lambda@Edge

O Lambda@Edge não permite que você edite as funções vinculadas a serviços AWSServiceRoleForLambdaReplicator ou AWSServiceRoleForCloudFrontLogger. Depois que o serviço criar uma função vinculada a serviço, você não poderá alterar o nome da função, pois várias entidades podem fazer referência a ela. No entanto, você poderá editar a descrição de uma função usando o IAM. Para obter mais informações, consulte Editar uma função vinculada a serviço no Guia do usuário do IAM.

Regiões da AWS compatíveis com funções vinculadas ao serviço do CloudFront

O CloudFront é compatível com as funções vinculadas ao serviço do Lambda@Edge nas seguintes Regiões da AWS:

  • US East (N. Virginia) – us-east-1

  • US East (Ohio) – us-east-2

  • US West (N. California) – us-west-1

  • US West (Oregon) – us-west-2

  • Asia Pacific (Mumbai) – ap-south-1

  • Ásia-Pacífico (Seul) – ap-northeast-2

  • Asia Pacific (Singapore) – ap-southeast-1

  • Ásia-Pacífico (Sydney) – ap-southeast-2

  • Ásia-Pacífico (Tóquio) (ap-northeast-1)

  • Europe (Frankfurt) – eu-central-1

  • Europe (Ireland) – eu-west-1

  • Europe (London) – eu-west-2

  • South America (São Paulo) – sa-east-1