AWS Lambda
Guia do desenvolvedor

Políticas do IAM baseadas em identidade para o AWS Lambda

Use políticas baseadas em identidade no AWS Identity and Access Management (IAM) para conceder a usuários na conta acesso ao Lambda. As políticas baseadas em identidade podem se aplicar diretamente aos usuários ou a funções e grupos associados a um usuário. Também é possível conceder a usuários em outra conta permissão para assumir uma função na conta e acessar os recursos do Lambda.

O Lambda fornece políticas gerenciadas que concedem acesso a ações da API do Lambda e, em alguns casos, acesso a outros serviços usados para desenvolver e gerenciar recursos do Lambda. O Lambda atualiza as políticas gerenciadas conforme necessário para garantir que os usuários tenham acesso a novos recursos quando eles forem lançados.

  • AWSLambdaFullAccess – Concede acesso total a ações do AWS Lambda e a outros serviços usados para desenvolver e manter recursos do Lambda.

  • AWSLambdaReadOnlyAccess – concede acesso de somente leitura aos recursos do AWS Lambda.

  • AWSLambdaRole – Concede permissões para invocar funções do Lambda.

As políticas gerenciadas concedem permissão a ações da API sem restringir as funções ou as camadas que um usuário pode modificar. Para um controle refinado, crie as próprias políticas que limitam o escopo das permissões de um usuário.

Desenvolvimento da função

A seguir, um exemplo de uma política de permissões com escopo limitado. Ele permite que um usuário crie e gerencie funções do Lambda com um prefixo designado (intern-) e configuradas com uma função de execução designada.

exemplo Política de desenvolvimento da função

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnlyPermissions", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "lambda:ListTags", "lambda:GetEventSourceMapping", "lambda:ListEventSourceMappings", "iam:ListRoles" ], "Resource": "*" }, { "Sid": "DevelopFunctions", "Effect": "Allow", "NotAction": [ "lambda:AddPermission", "lambda:PutFunctionConcurrency" ], "Resource": "arn:aws:lambda:*:*:function:intern-*" }, { "Sid": "DevelopEventSourceMappings", "Effect": "Allow", "Action": [ "lambda:DeleteEventSourceMapping", "lambda:UpdateEventSourceMapping", "lambda:CreateEventSourceMapping" ], "Resource": "*", "Condition": { "StringLike": { "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*" } } }, { "Sid": "PassExecutionRole", "Effect": "Allow", "Action": [ "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role" }, { "Sid": "ViewExecutionRolePolicies", "Effect": "Allow", "Action": [ "iam:GetPolicy", "iam:GetPolicyVersion" ], "Resource": "arn:aws:iam::aws:policy/*" }, { "Sid": "ViewLogs", "Effect": "Allow", "Action": [ "logs:*" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*" } ] }

As permissões na política são organizadas em declarações com base nos recursos e nas condições compatíveis.

  • ReadOnlyPermissions – O console do Lambda usa essas permissões quando você procura e exibe funções. Elas não oferecem suporte a padrões ou condições de recursos.

    "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "lambda:ListTags", "lambda:GetEventSourceMapping", "lambda:ListEventSourceMappings", "iam:ListRoles" ], "Resource": "*"
  • DevelopFunctions – Use qualquer ação do Lambda que opere em funções prefixadas com intern-, exceto AddPermission e PutFunctionConcurrency. AddPermission modifica a política baseada em recursos na função e pode ter implicações de segurança. PutFunctionConcurrency reserva a capacidade de escalabilidade para uma função e pode consumir a capacidade de outras funções.

    "NotAction": [ "lambda:AddPermission", "lambda:PutFunctionConcurrency" ], "Resource": "arn:aws:lambda:*:*:function:intern-*"
  • DevelopEventSourceMappings – Gerencie mapeamentos de origem do evento em funções prefixadas com intern-. Essas ações operam em mapeamentos de origem do evento, mas é possível restringi-las por função com uma condição.

    "Action": [ "lambda:DeleteEventSourceMapping", "lambda:UpdateEventSourceMapping", "lambda:CreateEventSourceMapping" ], "Resource": "*", "Condition": { "StringLike": { "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*" } }
  • PassExecutionRole – Exiba e passe apenas uma função chamada intern-lambda-execution-role, que deve ser criada e gerenciada por um usuário com permissões do IAM. PassRole é usado quando você atribui uma função de execução a uma função.

    "Action": [ "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
  • ViewExecutionRolePolicies – Exiba as políticas gerenciadas fornecidas pela AWS anexadas à função de execução. Isso permite exibir as permissões da função no console, mas não inclui permissão para exibir políticas que foram criadas por outros usuários na conta.

    "Action": [ "iam:GetPolicy", "iam:GetPolicyVersion" ], "Resource": "arn:aws:iam::aws:policy/*"
  • ViewLogs – Use CloudWatch Logs para exibir registros de funções prefixadas com intern-.

    "Action": [ "logs:*" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"

Essa política permite que um usuário começar a usar o Lambda, sem colocar os recursos de outros usuários em risco. Ela não permite que um usuário configure uma função a ser disparada ou chame outros serviços da AWS, o que exige permissões do IAM mais amplas. Ela também não inclui permissão para serviços que não ofereçam suporte a políticas de escopo limitado, como CloudWatch e X-Ray. Use as políticas somente leitura desses serviços para conceder ao usuário acesso a métricas e dados de rastreamento.

Ao configurar triggers para a função, você precisa de acesso para usar o serviço da AWS que invoca a função. Por exemplo, para configurar um trigger Amazon S3, você precisa de permissão para ações do Amazon S3 a fim de gerenciar notificações do bucket. Muitas dessas permissões estão incluídas na política gerenciada AWSLambdaFullAccess. As políticas de exemplo estão disponíveis no repositório do GitHub deste guia.

Desenvolvimento e uso da camada

A política a seguir concede permissões a um usuário para criar camadas e usá-las com funções. Os padrões de recursos permitem que o usuário trabalhe em qualquer região da AWS e com qualquer versão da camada, desde que o nome da camada comece com test-.

exemplo Política de desenvolvimento da camada

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublishLayers", "Effect": "Allow", "Action": [ "lambda:PublishLayerVersion" ], "Resource": "arn:aws:lambda:*:*:layer:test-*" }, { "Sid": "ManageLayerVersions", "Effect": "Allow", "Action": [ "lambda:GetLayerVersion", "lambda:DeleteLayerVersion" ], "Resource": "arn:aws:lambda:*:*:layer:test-*:*" } ] }

Também é possível impor o uso da camada durante a criação da função e a configuração com a condição lambda:Layer. Por exemplo, evite que os usuários usem camadas publicadas por outras contas. A política a seguir adiciona uma condição às ações CreateFunction e UpdateFunctionConfiguration para exigir que todas as camadas especificadas venham da conta 123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfigureFunctions", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Resource": "*", "Condition": { "ForAllValues:StringLike": { "lambda:Layer": [ "arn:aws:lambda:*:123456789012:layer:*:*" ] } } } ] }

Para garantir que a condição se aplique, verifique se não há outras instruções concedendo ao usuário permissão para essas ações.

Funções entre contas

Aplique qualquer uma das políticas e instruções anteriores a uma função, que é possível acabar compartilhando com outra conta para conceder a ela acesso aos recursos do Lambda. Diferentemente de um usuário do IAM, uma função não tem credenciais para autenticação. Em vez disso, ela tem uma política confiável que especifica quem pode assumir a função e usar as permissões.

Use funções entre contas para dar a contas nas quais você confia acesso a ações e recursos do Lambda. Se você só quiser conceder permissão para invocar uma função ou usar uma camada, use políticas baseadas em recursos.

Para obter mais informações, consulte Funções do IAM no Guia do usuário do IAM.