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 usando uma API REST do Amazon API Gateway, recebo o erro “Permissões inválidas na função do Lambda”. O que está causando o erro e como resolvê-lo?
Breve descrição
Se sua API REST do API Gateway tentar invocar sua função do Lambda sem a permissão de invocação do Lambda, o API Gateway retornará o seguinte 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 https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xx:function:xxx/invocations
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 https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xxx:function:xx/invocations
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 usando um dos métodos descritos neste artigo.
-ou-
Configure um perfil de execução do AWS Identity and Access Management (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?
- Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando sua versão mais recente.
Para adicionar permissão de invocação do Lambda a uma API REST com uma integração do Lambda usando o console do API Gateway
1. No console do API Gateway, no painel APIs, escolha o nome da sua API REST.
2. No painel Recursos, escolha o método HTTP configurado.
3. No painel Execução do método, escolha Solicitação de integração.
4. Em Tipo de integração, escolha Função do Lambda.
5. Expanda a lista suspensa Região do Lambda. Em seguida, escolha a região da AWS em que sua função do Lambda está.
6. Escolha a lista suspensa Função do Lambda. Em seguida, escolha o nome da sua função do Lambda.
7. É exibido um prompt que oferece a opção de Adicionar permissão à função do Lambda. Escolha OK.
8. Escolha Salvar. Em seguida, escolha Implantar a API para adicionar a permissão de invocação do Lambda à sua API.
Para adicionar 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:
Importante: substitua <api-id> pela sua apiID. Substitua o valor de FunctionName pelo nome da sua função do Lambda. Substitua o valor de SourceArn pelo nome do recurso da Amazon (ARN) de origem da sua API.
SampleApiPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref MyLambdaFnA1 Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/*/<method>/<resource>"
Para obter mais informações sobre como declarar várias partes do modelo do CloudFormation, consulte Trechos de modelo.
Para adicionar a permissão de invocação do Lambda a uma API REST com uma integração do Lambda usando a AWS CLI
Execute o seguinte comando add-permission da AWS CLI:
Importante: substitua o valor de function-name pelo nome da sua função do Lambda. Substitua o valor de source-arn pelo ARN de origem da sua API. Substitua o valor de statement-id por um identificador de instrução que diferencia a instrução de outras na mesma política.
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
Para adicionar permissão de invocação do Lambda a uma API REST com um autorizador do Lambda usando o console do API Gateway
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. No console do API Gateway, no painel APIs, escolha o nome da sua API REST.
3. No painel Autorizadores, escolha o autorizador do Lambda configurado. Em seguida, escolha Editar.
4. Em Perfil de invocação do Lambda, insira o ARN do perfil do IAM que você copiou para sua área de transferência.
5. Escolha Salvar. Em seguida, escolha Implantar a API.
Para adicionar 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:
Importante: substitua <api-id> pela sua apiID. Substitua o valor de FunctionName pelo nome da sua função do Lambda. Substitua <auth-id> pelo authorizerId do seu autorizador do Lambda.
SampleApiAuthPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref MyLambdaFnA1 Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/authorizers/<auth-id>"
Para obter mais informações sobre como declarar várias partes do modelo do CloudFormation, consulte Trechos de modelo.
Para 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:
Importante: substitua o valor de function-name pelo nome da sua função do Lambda. Substitua o valor de source-arn pelo ARN de origem da sua API. Substitua o valor de statement-id por um identificador de instrução que diferencia a instrução de outras na mesma política.
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
Informações relacionadas
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos