Como resolvo erros de “Permissões inválidas na função do Lambda” das APIs REST do API Gateway?

5 minuto de leitura
0

Quando invoco minha função do AWS Lambda de uma API REST do Amazon API Gateway, recebo o erro “Permissões inválidas na função do Lambda”.

Breve descrição

Se sua API REST do API Gateway invocar sua função do Lambda sem a permissão de invocação do Lambda, o API Gateway retornará o erro “Permissões inválidas na função do Lambda”.

Se você configurar o log do CloudWatch para sua API REST, o API Gateway também registrará uma das seguintes mensagens de erro:

  • Exemplo de mensagem de erro do CloudWatch para APIs REST com uma integração do Lambda:
    “Enviando solicitação para
    Falha na execução devido a um erro de configuração: Permissões inválidas na função do Lambda
    Método concluído com o status: 500”
  • Exemplo de mensagem de erro do CloudWatch para APIs REST com um autorizador do Lambda:
    “Enviando solicitação para
    Falha na execução devido a um erro de configuração: Permissões inválidas na função do Lambda
    Falha na execução devido a um erro de configuração: Erro do autorizador”

Resolução

Para resolver esses erros, faça o seguinte:

Para obter mais informações, consulte Modelo de permissões do API Gateway para invocar uma API.

Observação: Se você receber um erro 401 Unauthorized, siga as instruções em Por que estou recebendo erros “401 Unauthorized” do API Gateway depois de criar um autorizador do Lambda?

Resolver erros de integração com o Lambda

Adicionar uma permissão de invocação do Lambda a uma API REST com uma integração do Lambda usando o console do API Gateway

Conclua as etapas a seguir:

  1. Abra o console do API Gateway.
  2. No painel APIs, escolha o nome da sua API REST.
  3. No painel Recursos, escolha o método HTTP configurado.
  4. No painel Execução do método, escolha Solicitação de integração.
  5. Em Tipo de integração, escolha Função do Lambda.
  6. Expanda a lista suspensa Região do Lambda. Em seguida, escolha a região da AWS em que sua função do Lambda está.
  7. Escolha a lista suspensa Função do Lambda. Em seguida, escolha o nome da sua função do Lambda.
  8. Escolha Salvar. Em seguida, escolha Implantar a API para adicionar a permissão de invocação do Lambda à sua API.

Adicionar uma permissão de invocação do Lambda a uma API REST com uma integração do Lambda usando um modelo do CloudFormation

Adicione o seguinte trecho de código ao seu modelo do CloudFormation:

SampleApiPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref ExampleLambdaFunction
      Principal: "apigateway.amazonaws.com"
      SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:example-api-id/*/example-method/example-resource"

Observação: Substitua o seguinte no modelo anterior:
O valor de FunctionName pelo nome da sua função do Lambda
O valor de SourceArn pelo Amazon Resource Name (ARN) de origem da sua API
No valor de SourceArn, substitua example-api-id pela sua apiID

Para obter mais informações sobre como declarar várias partes do modelo do CloudFormation, consulte Trechos de modelo.

Adicionar a permissão de invocação do Lambda a uma API REST com uma integração do Lambda usando a AWS CLI

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.

Execute o seguinte comando add-permission da AWS CLI:

aws lambda add-permission   \
--function-name "$FUNCTION_NAME"   \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/*/$METHOD/$RESOURCE"   \
--principal apigateway.amazonaws.com   \
--statement-id $STATEMENT_ID   \
--action lambda:InvokeFunction

Observação: Substitua o seguinte no comando anterior:
O valor de function-name pelo nome da sua função do Lambda
O valor de source-arn pelo ARN de origem da sua API
O valor de statement-id por um identificador de instrução que identifica exclusivamente a instrução

Resolver erros do autorizador do Lambda

Adicionar uma permissão de invocação do Lambda a uma API REST com um autorizador do Lambda usando o console do API Gateway

Conclua as etapas a seguir:

  1. Crie um perfil do IAM para o API Gateway que permita a ação lambda:InvokeFunction. Em seguida, copie o ARN do perfil do IAM para sua área de transferência.
  2. Abra o console do API Gateway.
  3. No painel APIs, escolha o nome da sua API REST.
  4. No painel Autorizadores, escolha o autorizador do Lambda configurado. Em seguida, escolha Editar.
  5. Em Perfil de invocação do Lambda, insira o ARN do perfil do IAM que você copiou para sua área de transferência.
  6. Escolha Salvar. Em seguida, escolha Implantar a API.

Adicionar uma permissão de invocação do Lambda a uma API REST com um autorizador do Lambda usando um modelo do CloudFormation

Adicione o seguinte trecho de código ao seu modelo do CloudFormation:

SampleApiAuthPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref ExampleLambdaFunction
      Principal: "apigateway.amazonaws.com"
      SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:example-api-id/authorizers/example-auth-id"

Observação: Substitua o seguinte no modelo anterior:
O valor de FunctionName pelo nome da sua função do Lambda
No valor de SourceArn, substitua example-api-id pela sua apiID
No valor de SourceArn, substitua example-auth-id pela authorizerId do seu autorizador do Lambda

Adicionar a permissão de invocação do Lambda a uma API REST com um autorizador do Lambda usando a AWS CLI

Execute o seguinte comando add-permission da AWS CLI:

aws lambda add-permission   \
--function-name "$FUNCTION_NAME"   \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/authorizers/$AUTHORIZER_ID"   \
--principal apigateway.amazonaws.com   \
--statement-id $STATEMENT_ID   \
--action lambda:InvokeFunction

Observação: Substitua o seguinte no comando anterior:
O valor de function-name pelo nome da sua função do Lambda
O valor de source-arn pelo ARN de origem da sua API
O valor de statement-id por um identificador de instrução que identifica exclusivamente a instrução

Informações relacionadas

Trabalhando com políticas de IAM baseadas em recursos no Lambda

Como posso configurar o log de acesso para o API Gateway?