我使用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一起使用时,这是一个错误吗?
答案 0 :(得分:0)
您可以尝试将AWS::Lambda::Permission
的{{1}}参数设置为有权执行授权者lambda的有效IAM角色吗?不确定标准showJson()
是否适用于此,但您可能希望暂时保留它,以防它仍然需要。