Como faço para usar políticas baseadas em recursos com o AWS Lambda para conceder permissão a serviços da AWS?

Data da última atualização: 27/9/2021

Desejo usar políticas baseadas em recursos do AWS Lambda para conceder permissão a serviços da AWS.

Descrição breve

Você pode usar a AWS Command Line Interface (AWS CLI) com o Lambda para conceder permissão aos serviços da AWS usando políticas baseadas em recursos. Para obter mais informações, consulte Uso de políticas baseadas em recursos para o AWS Lambda.

Resolução

O exemplo a seguir adiciona permissão para um evento do Amazon CloudWatch e valida se a função do Lambda invoca a política baseada em recursos.

Observação:

Confirme se a função do Lambda não tem uma política de recursos configurada

Alguns serviços da AWS, como o CloudWatch, criam uma política baseada em recursos para a função do Lambda. Verifique se a política baseada em recursos não tem permissão para o evento do CloudWatch com o comando get-policy da AWS CLI semelhante ao seguinte:

aws lambda get-policy --region your-region --function-name your-function

An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.

Esse erro confirma que a função do Lambda não tem uma política baseada em recursos configurada.

Adicione permissões para o evento do CloudWatch

Execute o comando add-permission da AWS CLI para invocar a função do Lambda semelhante à seguinte:

aws lambda add-permission --region your-region --function-name your-function --statement-id "your-event-permission" --action "lambda:InvokeFunction" --principal "events.amazonaws.com" --source-arn "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"

{
    "Statement": "{\"Sid\":\"your-event-permission\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event\"}}}"
}

Verifique as permissões para a política baseada em recursos da função do Lambda

Execute o comando get-policy da AWS CLI novamente, semelhante ao seguinte:

aws lambda get-policy --region your-region --function-name your-function

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "your-event-permission",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
        }
      }
    }
  ]
}

(Opcional) Remova a permissão de uma política baseada em recursos de função do Lambda

Se você não precisar mais de um serviço da AWS para acionar a função do Lambda, poderá executar o comando remove-permission da AWS CLI semelhante ao seguinte:

aws lambda remove-permission --region your-region --function-name your-function --statement-id "your-event-permission"

Observação: a cota de política baseada em recursos da função do Lambda é de 20 KB. Para obter mais informações, consulte Cotas do Lambda.