Configurar permissões e perfis do IAM para o Lambda@Edge - Amazon CloudFront

Configurar permissões e perfis do IAM para o Lambda@Edge

Para configurar o Lambda@Edge, é necessário ter as seguintes permissões e perfis do IAM para o AWS Lambda:

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

Além das permissões do IAM necessárias para o Lambda, você precisa das seguintes permissões para associar as funções do Lambda às distribuições do CloudFront:

  • lambda:GetFunction: concede permissão para recebimento de informações de configuração para a função do Lambda e de um URL pré-assinado para baixar um arquivo .zip que contém a função.

  • lambda:EnableReplication*: concede permissão à política de recurso para que o serviço de replicação do Lambda possa obter o a configuração e o código da função.

  • lambda:DisableReplication*: concede permissão à política de recurso para que o serviço de replicação do Lambda possa excluir a função.

    Importante

    É necessário adicionar o asterisco (*) ao final das ações lambda:EnableReplication* e lambda:DisableReplication*.

  • 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 seguinte exemplo:

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

  • iam:CreateServiceLinkedRole: concede permissão para criar um perfil vinculado ao serviço que o Lambda@Edge usa para replicar funções do Lambda no CloudFront. Depois que você configurar o Lambda@Edge pela primeira vez, o perfil vinculado ao serviço será criado automaticamente para você. Não é necessário adicionar essa permissão a outras distribuições que usam o Lambda@Edge.

  • cloudfront:UpdateDistribution ou cloudfront:CreateDistribution: concede permissão para atualizar ou criar uma distribuição.

Para obter mais informações, consulte os tópicos a seguir.

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

É necessário criar um perfil do IAM que as entidades principais do serviço lambda.amazonaws.com e edgelambda.amazonaws.com possam assumir ao executarem a função.

dica

Ao criar a função no console do Lambda, você pode optar por criar um perfil de execução usando um modelo de política da AWS. Essa etapa adiciona automaticamente as permissões necessárias do Lambda@Edge para executar a função. Consulte a Etapa 5 do tutorial Criação de uma função do Lambda@Edge simples.

Consulte mais informações sobre como criar um perfil do IAM manualmente em Criar funções e anexar políticas (console) no Guia do usuário do IAM.

exemplo Exemplo: política de confiança do perfil

É possível adicionar esse perfil na guia Relação de confiança no console do IAM. Não adicione essa política na guia Permissões.

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

Consulte mais informações sobre as permissões que você precisa conceder ao perfil de execução em Permissões de acesso a recursos do Lambda no Guia do desenvolvedor do AWS Lambda.

Observações
  • 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. É possível usar o AWSLambdaBasicExecutionRole predefinido para conceder permissão ao perfil de execução.

    Para obter mais informações sobre o CloudWatch Logs, consulte Logs de funções de borda.

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

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

O Lambda@Edge usa perfis vinculados ao serviço do 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 serviços da AWS em seu nome.

O Lambda@Edge usa os seguintes perfis vinculados ao 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.

    Quando você adiciona um acionador do Lambda@Edge ao CloudFront pela primeira vez, um perfil chamado AWSServiceRoleForLambdaReplicator é criado automaticamente para permitir que o Lambda@Edge replique funções para Regiões da AWS. Esse perfil é necessário para usar as funções do Lambda@Edge. O ARN do perfil AWSServiceRoleForLambdaReplicator é semelhante a este exemplo:

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

  • AWSServiceRoleForCloudFrontLogger: o CloudFront usa esse perfil para enviar arquivos de log ao CloudWatch. É possível usar arquivos de log para depurar erros de validação do Lambda@Edge.

    O perfil AWSServiceRoleForCloudFrontLogger é criado 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. Não é possível anexar a política de permissões 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 de modo que você não remova um perfil vinculado ao serviço que ainda seja necessário para acessar os recursos ativos.

Para obter mais informações sobre funções vinculadas ao serviço, consulte Funções vinculadas ao serviço do CloudFront.

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 confia no serviço replicator.lambda.amazonaws.com para presumir a função.

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

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

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

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

  • iam:PassRole no all AWS resources

  • cloudfront:ListDistributionsByLambdaFunction no all AWS resources

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

Esse perfil vinculado ao serviço permite que o CloudFront envie arquivos de log por push ao CloudWatch para que seja possível depurar erros de validação do Lambda@Edge.

A função vinculada ao serviço AWSServiceRoleForCloudFrontLogger confia no serviço logger.cloudfront.amazonaws.com para presumir a função.

A política de permissões do perfil permite que o Lambda@Edge conclua as seguintes ações no recurso arn:aws:logs:*:*:log-group:/aws/cloudfront/* especificado:

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

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 ter 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 o perfil AWSServiceRoleForLambdaReplicator (caso ele ainda não exista). Esse perfil permite que o Lambda replique 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 o perfil AWSServiceRoleForCloudFrontLogger (caso o perfil ainda não exista). Esse perfil permite que o CloudFront envie arquivos de log ao 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.

Para criar manualmente esses perfis vinculados ao serviço, execute os seguintes comandos da AWS Command Line Interface (AWS CLI):

Para criar a função AWSServiceRoleForLambdaReplicator
  • Execute o seguinte comando .

    aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com
Para criar a função AWSServiceRoleForCloudFrontLogger
  • Execute o seguinte comando .

    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 os perfis vinculados ao serviço AWSServiceRoleForLambdaReplicator ou AWSServiceRoleForCloudFrontLogger. Depois que o serviço criar um perfil vinculado ao serviço, você não poderá alterar o nome dele, pois várias entidades podem fazer referência a ele. No entanto, é possível usar o IAM para editar a descrição da função. Para ter 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:

  • Leste dos EUA (Norte da Virgínia): 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