Como soluciono erros de permissões das APIs HTTP da API Gateway com uma integração do Lambda ou um autorizador do Lambda?

4 minuto de leitura
0

Quando tento invocar minha função do AWS Lambda com uma API HTTP da API Gateway, recebo uma mensagem de “Erro interno do servidor”. Em meus Amazon CloudWatch Logs, vejo um erro “não tem permissões para chamar a integração” ou “não tem permissão para chamar o autorizador”.

Breve descrição

Se uma API HTTP do API Gateway tentar invocar uma função do Lambda sem a permissão de invocação do Lambda, o API Gateway retornará uma mensagem de “Erro interno do servidor”. Se você ativou o registro em log do CloudWatch para sua API HTTP, o API Gateway também registra uma das seguintes mensagens de erro em seus registros de acesso:

  • Para APIs HTTP com uma integração do Lambda: “integrationError”: “O perfil do IAM configurado na integração ou no API Gateway não tem permissões para chamar a integração. Verifique as permissões e tente novamente.”
  • Para APIs HTTP com um autorizador Lambda: “authorizerError”: “O perfil do IAM configurado no autorizador ou no API Gateway não tem permissões para chamar o autorizador. Verifique as permissões e tente novamente.”

Para resolver esses erros, execute uma das seguintes ações:

Use o console do API Gateway ou a AWS Command Line Interface (AWS CLI) para adicionar uma permissão de invocação do Lambda baseada em recursos à sua API HTTP.

-ou-

Configure um perfil de execução do AWS Identity and Access Management (IAM) que conceda permissão à sua API HTTP para invocar sua função. Para obter mais informações, consulte Modelo de permissões do API Gateway para invocar uma API.

Para obter mais informações sobre como solucionar erros ao usar integrações do Lambda com APIs HTTP, consulte Solução de problemas com integrações do Lambda da API HTTP.

Resolução

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Use o console do API Gateway para adicionar a permissão de invocação do Lambda a uma API HTTP com uma integração com o Lambda

  1. Abra o console do API Gateway.
  2. No painel APIs, escolha o nome da sua API HTTP.
  3. No painel de navegação esquerdo, escolha Integrações.
  4. Escolha Gerenciar integração.
  5. Encontre o nome da sua integração com o Lambda e escolha o botão Editar ao lado do nome da sua integração com o Lambda.
  6. Em Invocar permissões, escolha Conceder permissão ao API Gateway para invocar sua função do Lambda.
    Ou forneça o ARN do perfil do IAM que o API Gateway pode usar para invocar a função do Lambda.
  7. Escolha Salvar e, em seguida, escolha Implantar a API para adicionar a permissão de invocação do Lambda à sua API.

Use a AWS CLI para adicionar a permissão de invocação do Lambda a uma API HTTP com uma integração com o Lambda

Execute o seguinte comando add-permission da AWS CLI:

aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--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 valor function-name pelo ARN da função do Lambda. Substitua o valor source-arn pelo ARN de origem da sua API. Substitua o valor statement-id por um identificador de instrução que diferencia a declaração de outras na mesma política.

Use o console do API Gateway para adicionar a permissão de invocação do Lambda a uma API HTTP com um autorizador Lambda

  1. Abra o console do API Gateway.
  2. No painel APIs, escolha o nome da sua API HTTP.
  3. No painel de navegação esquerdo, escolha Autorização.
  4. Escolha Gerenciar autorização.
  5. Encontre o nome do seu autorizador do Lambda e escolha o botão Editar ao lado do nome do autorizador do Lambda.
  6. Em Invocar permissões, escolha Conceder permissão automaticamente ao API Gateway para invocar sua função do Lambda.
    Ou forneça o ARN do perfil do IAM que o API Gateway pode usar para invocar a função do Lambda.
  7. Escolha Salvar e, em seguida, escolha Implantar a API para adicionar a permissão de invocação do Lambda à sua API.

Use o AWS CLI para adicionar a permissão de invocação do Lambda a uma API HTTP com um autorizador Lambda

Execute o seguinte comando add-permission da AWS CLI:

aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--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 valor function-name pelo ARN da função do Lambda. Substitua o valor source-arn pelo ARN de origem da sua API. Substitua o valor statement-id por um identificador de instrução que diferencia a declaração de outras na mesma política.