Como resolvo erros de “Permissões inválidas na função do Lambda” das APIs REST do API Gateway?
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:
- Adicione uma permissão de invocação do Lambda baseada em recursos à sua API REST por meio de um dos métodos descritos neste artigo.
- Configure um perfil de execução do AWS Identity and Access Management (AWS IAM) que conceda permissão à sua API REST para invocar sua função.
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:
- Abra o console do API Gateway.
- No painel APIs, escolha o nome da sua API REST.
- No painel Recursos, escolha o método HTTP configurado.
- No painel Execução do método, escolha Solicitação de integração.
- Em Tipo de integração, escolha Função do Lambda.
- Expanda a lista suspensa Região do Lambda. Em seguida, escolha a região da AWS em que sua função do Lambda está.
- Escolha a lista suspensa Função do Lambda. Em seguida, escolha o nome da sua função do Lambda.
- 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:
- 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.
- Abra o console do API Gateway.
- No painel APIs, escolha o nome da sua API REST.
- No painel Autorizadores, escolha o autorizador do Lambda configurado. Em seguida, escolha Editar.
- Em Perfil de invocação do Lambda, insira o ARN do perfil do IAM que você copiou para sua área de transferência.
- 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
Vídeos relacionados
Conteúdo relevante
- feita há 16 diaslg...
- Resposta aceitafeita há 14 diaslg...
- feita há 10 horaslg...
- feita há 16 diaslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 4 meses