Trabalhando com políticas do IAM baseadas em identidade no Lambda - AWS Lambda

Trabalhando com políticas do IAM baseadas em identidade no 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. Esta página apresenta um exemplo de como as políticas baseadas em identidade podem ser usadas para o desenvolvimento de funções.

O Lambda fornece políticas gerenciadas pela AWS que concedem acesso a ações da API do Lambda e, em alguns casos, acesso a outros serviços da AWS usados para desenvolver e gerenciar recursos do Lambda. 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.

  • AWSLambda_FullAccess: concede acesso total a ações do Lambda e a outros serviços da AWS usados para desenvolver e manter recursos do Lambda. Esta política foi criada com a redução do escopo da política anterior AWSLambdaFullAccess.

  • AWSLambda_ReadOnlyAccess: concede acesso somente leitura aos recursos do Lambda. Esta política foi criada com a redução do escopo da política anterior AWSLambdaReadOnlyAccess.

  • AWSLambdaRole: concede permissões para invocar funções do Lambda.

As políticas gerenciadas do AWS concedem permissão a ações da API sem restringir as funções ou as camadas do Lambda 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.

Escrever um exemplo de política que conceda permissões de usuário a uma função

Use políticas baseadas em identidade do para permitir que os usuários executem operações em funções do Lambda.

nota

Para uma função definida como uma imagem de contêiner, a permissão do usuário para acessar a imagem DEVE ser configurada no Amazon Elastic Container Registry Para obter um exemplo, consultePermissões do Amazon ECR.

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:GetEventSourceMapping", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:GetFunctionCodeSigningConfig", "lambda:GetFunctionConcurrency", "lambda:ListEventSourceMappings", "lambda:ListFunctions", "lambda:ListTags", "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:GetRolePolicy", "iam:PassRole", "iam:SimulatePrincipalPolicy" ], "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role" }, { "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:GetEventSourceMapping", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:GetFunctionCodeSigningConfig", "lambda:GetFunctionConcurrency", "lambda:ListEventSourceMappings", "lambda:ListFunctions", "lambda:ListTags", "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 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 de eventos 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:GetRolePolicy", "iam:PassRole", "iam:SimulatePrincipalPolicy" ], "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
  • ViewLogs: use o CloudWatch Logs para exibir logs 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 com o Lambda, sem colocar os recursos de outros usuários em risco. Ela não permite que um usuário configure uma função para ser disparada ou acione outros serviços da AWS, o que exige permissões mais amplas do IAM. 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 sua função, você precisa de acesso para usar o produto da AWS que invoca a sua função. Por exemplo, para configurar um acionador do Amazon S3, é necessária a 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.

Escrever um exemplo de política que conceda permissões para usar camadas

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 de 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.

Implementar acesso entre contas com políticas baseadas em identidade

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, um perfil 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.