如何使用 AWS Lambda 集成或 Lambda 授权方排除 API Gateway HTTP API 的权限错误?

上次更新时间:2021 年 5 月 28 日

当我尝试使用 API Gateway HTTP API 调用我的 AWS Lambda 函数时,收到“Internal Server Error”消息。在我的 Amazon CloudWatch Logs 中,我看到“没有调用集成的权限”或“没有调用授权方的权限”错误。导致这些错误的原因是什么,我该如何解决?

简短描述

如果 API Gateway HTTP API 尝试在没有 Lambda 调用权限的情况下调用 Lambda 函数,则 API Gateway 将返回 Internal Server Error 消息。如果您为 HTTP API 激活了 CloudWatch 日志记录,那么 API Gateway 还会在访问日志中记录以下错误消息之一:

使用 Lambda 集成的 HTTP API 的 CloudWatch 错误消息

“IntegrationError”:“The IAM role configured on the integration or API Gateway doesn't have permissions to call the integration.Check the permissions and try again。”

使用 Lambda 授权方的 HTTP API 的 CloudWatch 错误消息

“AuthorizeRerror”:“The IAM role configured on the authorizer or API Gateway doesn't have permissions to call the authorizer.Check the permissions and try again。”

要解决这些错误,请执行以下操作之一:

使用 API Gateway 控制台AWS 命令行界面 (AWS CLI) 向您的 HTTP API 添加基于资源的 Lambda 调用权限

–或者–

配置 AWS Identity and Access Management (IAM) 执行角色,该角色将授予您调用函数的 HTTP API 权限。有关更多信息,请参阅调用 API 的 API Gateway 权限模型

有关将 Lambda 集成与 HTTP API 结合使用时对出现的错误进行故障排除的更多信息,请参阅排查 HTTP API Lambda 集成问题

解决方法

注意:如果您在运行 AWS CLI 命令时收到错误消息,确保您运行的是最新版本的 AWS CLI

要使用 API Gateway 控制台向具有 Lambda 集成的 HTTP API 添加 Lambda 调用权限

1.    在 API Gateway 控制台API 窗格中,选择您的 HTTP API 的名称。

2.    在左侧导航窗格中,选择 Integrations (集成)

3.    选择 Manage integration (管理集成)

4.    找到您的 Lambda 集成的名称。然后,选择 Lambda 集成名称旁边的 Edit (编辑) 按钮。

5.    对于 Invoke permissions (调用权限),请选择 Grant API Gateway permission to invoke your Lambda function (授予 API Gateway 权限以调用您的 Lambda 函数) –或– 提供 API Gateway 可用于调用 Lambda 函数的 IAM 角色 ARN

6.    选择 Save (保存)。然后,选择 Deploy the API (部署 API) 以将 Lambda 调用权限添加到您的 API。

要使用 AWS CLI 向具有 Lambda 集成的 HTTP API 添加 Lambda 调用权限

运行以下 add-permission AWS CLI 命令:

重要提示:function-name 值替换为 Lambda 函数的 ARN。将 source-arn 值替换为 API 的源 ARN。将 statement-id 值替换为区分同一策略中其他语句的语句标识符。

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

要使用 API Gateway 控制台向具有 Lambda 授权方的 HTTP API 添加 Lambda 调用权限

1.    在 API Gateway 控制台API 窗格中,选择您的 HTTP API 的名称。

2.    在左侧导航窗格中,选择 Authorizers (授权方)

3.    选择 Manage authorizers (管理授权方)

4.    找到您的 Lambda 授权方的名称。然后,选择 Lambda 授权方名称旁边的 Edit (编辑)按钮。

5.    对于 Invoke permissions (调用权限),请选择 Automatically grant API Gateway permission to invoke your Lambda function (自动授予 API Gateway 权限以调用您的 Lambda 函数) –或– 提供 API Gateway 可用于调用 Lambda 函数的 IAM 角色 ARN

6.    选择 Save (保存)。然后,选择 Deploy the API (部署 API) 以将 Lambda 调用权限添加到您的 API。

要使用 AWS CLI 向具有 Lambda 授权方的 HTTP API 添加 Lambda 调用权限

运行以下 add-permission AWS CLI 命令:

重要提示:function-name 值替换为 Lambda 函数的 ARN。将 source-arn 值替换为 API 的源 ARN。将 statement-id 值替换为区分同一策略中其他语句的语句标识符。

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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?