API网关无权承担提供的角色

时间:2019-04-11 15:58:38

标签: amazon-web-services aws-lambda aws-api-gateway amazon-iam

我正在尝试从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": [
                "*"
            ]
        }
    ]
}  

这是怎么了?谢谢

2 个答案:

答案 0 :(得分:0)

我想您尚未将该角色附加到调用方法(即api网关)上

api要执行lamda,需要将创建的角色附加到api网关。

  

在“执行”角色下,选择“选择现有角色”。

     

为lambda_invoke_function_assume_apigw_role输入角色ARN   您之前创建的角色。

     

选择保存。

AWS Link

答案 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"
    }
  ]
}