为什么API Gateway在使用Swagger时没有对Authorizer lambda的权限?

时间:2018-02-23 15:06:48

标签: swagger aws-api-gateway amazon-cloudformation

我使用Swagger定义了API,它定义了以下API密钥授权程序:

securityDefinitions:
  api_key:
    type: apiKey
    name: x-api-key
    in: header
    x-amazon-apigateway-authtype: "oauth2"
    x-amazon-apigateway-authorizer:
      type: token
      authorizerUri: arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:[accountid]:function:ApiKeyAuthorizerLambdaFunction/invocations
      authorizerResultTtlInSeconds: 0

但是,当我将此Swagger定义传递到我的CloudFormation脚本并调用使用此授权程序保护的端点时,我得到500. API网关日志显示以下内容:

Incoming identity: ***key
Execution failed due to configuration error: Invalid permissions on Lambda function
Execution failed due to configuration error: Authorizer error

请注意,我拥有给定的API网关权限来执行此lambda:

LambdaPermissionAuthorizerApiGateway:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName:
      Fn::GetAtt:
      - ApiKeyAuthorizerLambdaFunction
      - Arn
    Action: lambda:InvokeFunction
    Principal: apigateway.amazonaws.com

事实上,当我将Serverless为authoized端点生成的CloudFormation脚本(使用无服务器的表示法)与使用Swagger的我自己的CloudFormation脚本进行比较时,我发现它们之间没有什么区别,除了我的授权人是用Swagger定义的,而不是直接作为CF资源。

任何人都可以对此有所了解吗?将Swagger与CloudFormation一起使用时,这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试将AWS::Lambda::Permission的{​​{1}}参数设置为有权执行授权者lambda的有效IAM角色吗?不确定标准showJson()是否适用于此,但您可能希望暂时保留它,以防它仍然需要。

x-amazon-apigateway-authorizer docs显示了一个示例。