我正在尝试从API网关调用lambda函数。我遵循了下一个教程:https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html
但是,当我从API网关的Web对其进行测试时,出现以下错误:
Execution failed due to configuration error: API Gateway does not have permission to assume the provided role
我在google中搜索过,但无法解决(例如this)。
如果我转到IAM管理控制台,则可以看到信任关系允许API Gateway承担角色,并且信任关系的JSON如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"apigateway.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
我也尝试过:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"apigateway.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
该角色的策略是下一个:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
这是怎么了?谢谢
答案 0 :(得分:0)
我想您尚未将该角色附加到调用方法(即api网关)上
api要执行lamda,需要将创建的角色附加到api网关。
在“执行”角色下,选择“选择现有角色”。
为lambda_invoke_function_assume_apigw_role输入角色ARN 您之前创建的角色。
选择保存。
答案 1 :(得分:0)
要解决此问题,请转到IAM中的角色,然后选择“信任关系”选项卡。从此处编辑策略,并为Principal Service添加“ apigateway.amazonaws.com”,如下所示。除了现有的lambda权限之外,这还将使API Gateway能够承担角色来运行您的功能。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"apigateway.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}