Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Como faço para fornecer acesso granular às funções do Lambda?

8 minuto de leitura
0

Quero conceder permissões de leitura e gravação para uma função específica do AWS Lambda a um usuário do AWS Identity and Access Management (AWS IAM).

Solução

Use políticas do IAM para configurar permissões para que os usuários do IAM criem, excluam, modifiquem, invoquem e monitorem funções do Lambda e visualizem a configuração de uma função do Lambda.

Os exemplos de políticas a seguir limitam as ações de API do Lambda que oferecem suporte a permissões em nível de recurso a uma função específica do Lambda que está listada no elemento Recurso de cada instrução. Você pode usar o elemento Condição nas ações de API para identificar a função Lambda na política do IAM.

Para ações de API que não oferecem suporte a permissões em nível de recurso, você deve usar um curinga (*) no elemento Recurso. Você não pode aplicar chaves de condição específicas do Lambda. Para obter mais informações, consulte Ações, recursos e chaves de condição para serviços da AWS Lambda.

O elemento Recurso usa um ARN para identificar os recursos aos quais a instrução se aplica. Por exemplo, quando a Ação é Invocar, o valor Recurso é um ARN da função. O IAM compara o ARN com o ARN da função nos parâmetros FunctionName e Qualifier da solicitação Invocar. Para obter mais informações sobre ARNs em diferentes versões do Lambda, consulte Usando versões.

Se você usa várias versões do Lambda, não precisa adicionar cada ARN do Lambda. Em vez disso, inclua o curinga (*) no elemento Resources:

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

Observação: Substitua AWS\ _REGION:AWS\ _ACCOUNT\ _ID pelo ARN do seu Lambda e LAMBDA\ _FUNCTION\ _NAME pelo nome da função do Lambda.

No exemplo de políticas do IAM a seguir, substitua os seguintes valores:

  • AWS_ACCOUNT_ID pelo ID da sua conta da AWS
  • LAMBDA\ _FUNCTION\ _NAME pelo nome da sua função do Lambda
  • IAM\ _USER\ _NAME pelo usuário do IAM para o qual você está fornecendo acesso ao Lambda
  • AWS_REGION pela sua Região AWS
  • KEY_ID pela sua chave do AWS Key Management Service (AWS KMS)
  • IAM\ _ROLE\ _NAME pelo seu perfil do IAM
  • S3_BUCKET_NAME pelo nome do bucket do Amazon Simple Storage Service (Amazon S3)

Permissões para criar uma função do Lambda

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para usar a AWS CLI ou o console do Lambda para criar uma função do Lambda, você deve ter as permissões lambda:CreateFunction e iam:PassRole. Por exemplo, consulte Políticas do IAM baseadas em identidade para o AWS Lambda.

O exemplo de política a seguir permite que o chamador de API crie uma função do Lambda e transmita o perfil do IAM como o perfil de execução do Lambda para a função:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Se você armazenar o código da função do Lambda em um bucket do S3, adicione uma política para conceder permissões do Amazon S3 à política do IAM.

Exemplo de política:

{  "Sid": "PermissionToUploadCodeFromS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::S3_BUCKET_NAME/FileName.zip"
}

**Observação:**Substitua FileName.zip pelo arquivo .zip do código da função do Lambda.

Para visualizar e atualizar a função, você deve adicionar permissões e ações de API de leitura.

Exemplo de política:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionsToCreateAndUpdateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Para criar um perfil do IAM durante o processo de criação da função do Lambda, adicione as seguintes permissões do IAM:

{  "Sid": "PermmissionsToCreateAndUpdateARole",
  "Effect": "Allow",
  "Action": [
    "iam:CreateRole",
    "iam:CreatePolicy",
    "iam:PutRolePolicy",
    "iam:AttachRolePolicy"
  ],
  "Resource": "*"
}

Permissões para excluir uma função do Lambda

Para excluir uma função do Lambda, adicione as seguintes permissões à política do IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Para usar o console do Lambda para excluir uma função, adicione permissões de acesso de leitura do Lambda à política do IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Permissões para visualizar os detalhes de configuração de uma função do Lambda

Para permitir que um usuário visualize os detalhes de configuração de uma função do Lambda, adicione as seguintes permissões à política do IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

Observação: Com base no nível de acesso de leitura que você deseja conceder, você pode adicionar todas as permissões anteriores ou somente algumas delas. Se você estiver usando camadas do Lambda, também poderá adicionar as permissões lambda:GetLayerVersion ou lambda:ListLayerVersions.

Para visualizar os detalhes da configuração de uma função usando o console do Lambda, adicione as seguintes permissões à política do IAM:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

O console do Lambda usa tags nas funções do Lambda que permitem filtrar as funções do Lambda por tag. Para usar as tags, adicione as seguintes permissões à política do IAM:

{  "Sid": "PermissionsToFilterFunctionsByTags",
  "Effect": "Allow",
  "Action": [
     "tag:GetResources"
  ],
  "Resource": "*"
}

O console do Lambda exibe detalhes sobre o perfil do IAM associado a uma função do Lambda e os recursos aos quais o perfil do IAM da função tem acesso. Para ver os detalhes, adicione as seguintes permissões à política do IAM:

{  "Sid": "PermissionsToViewRolesAndPolicies",
  "Effect": "Allow",
  "Action": [
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:GetRolePolicy",
    "iam:ListRoles",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
  ],
  "Resource": "*"
}

Se você tiver requisitos adicionais, talvez precise conceder permissões adicionais a outros serviços da AWS.

Permissões para modificar uma função do Lambda

Para permitir que um usuário modifique uma função do Lambda, adicione as seguintes permissões à política do IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:AddPermission",
        "lambda:RemovePermission",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:DeleteAlias",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:PutFunctionConcurrency",
        "lambda:DeleteFunctionConcurrency",
        "lambda:PublishVersion",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Observação: Com base no nível de acesso de gravação que você deseja conceder, você pode adicionar todas as permissões anteriores ou somente algumas delas.

Para restringir o acesso, adicione lambda:AddPermission e lambda:RemovePermission a uma entidade principal incluído em uma política anexada. Você também pode limitar lambda:UpdateEventSourceMapping e lambda:DeleteEventSourceMapping a um mapeamento da origem do evento específico.

Para usar uma chave gerenciada pelo cliente para criptografar variáveis de ambiente, adicione as seguintes permissões do AWS KMS à política do IAM:

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

Para modificar as configurações de uma função do Lambda usando o console do Lambda, adicione as seguintes permissões à política do IAM:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

Permissões para invocar uma função do Lambda

Para invocar manualmente uma função do Lambda, adicione as seguintes permissões à política do IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Para listar as funções do Lambda usando o console do Lambda, adicione as seguintes permissões à política do IAM:

{  "Sid": "PermissionsToViewFunctionsConfigInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings",
    "lambda:GetFunction",
    "lambda:ListTags"
  ],
  "Resource": "*"
}

Para permitir que outros serviços invoquem uma função do Lambda, use políticas baseadas em recursos para o AWS Lambda. Você também pode usar políticas de função para fornecer acesso entre contas às funções do Lambda.

O exemplo de política a seguir pode ser usado para permitir que um usuário de uma conta diferente invoque manualmente uma função do Lambda:

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

**Observação:**Substitua External\ _AWS\ _ACCOUNT\ _ID pela conta que você deseja permitir que invoque a função.

Permissões para monitorar funções do Lambda

Para visualizar as métricas do Amazon CloudWatch na guia Monitoramento do console do Lambda, adicione as seguintes permissões à política do IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionForCloudWatchMetrics",
       "Effect": "Allow",
       "Action": [
          "cloudwatch:GetMetricStatistics",
          "cloudwatch:GetMetricData"
        ],
        "Resource": "*"
     }
  ]
}

Para conceder permissões a métricas específicas do CloudWatch e CloudWatch Logs Insights, consulte Referência de permissões do Amazon CloudWatch e Referência de permissões do CloudWatch Logs.