当前位置: 首页 > 知识库问答 >
问题:

为什么API网关在使用Swagger时没有我的授权器lambda的权限?

祁博涛
2023-03-14

我有一个使用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
Incoming identity: ***key
Execution failed due to configuration error: Invalid permissions on Lambda function
Execution failed due to configuration error: Authorizer error
LambdaPermissionAuthorizerApiGateway:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName:
      Fn::GetAtt:
      - ApiKeyAuthorizerLambdaFunction
      - Arn
    Action: lambda:InvokeFunction
    Principal: apigateway.amazonaws.com

有人能说说这件事吗?当使用带有Cloudformation的Swagger时,这是一个bug吗?

共有1个答案

东郭瀚玥
2023-03-14

可以尝试将x-Amazon-Apigateway-AuthorizerAuthorizerCredentials参数设置为具有执行授权器lambda权限的有效IAM角色吗?不确定标准AWS::Lambda::Permission是否适用于此,尽管您可能希望暂时保留它,以防仍然需要它。

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

 类似资料:
  • 我的WEB API托管在Docker中。我的Angular客户机将发送一个JWT令牌来访问这些API中的任何一个。我想利用AWS API网关特性在调用请求的API客户端之前添加一个授权检查。从文档中,我看到我们可以利用Lambda授权器的概念来实现这一点。但我又想了一下为什么要使用Lambda Authorizer,因为我可以想出一个可以验证用户的DOT NET CORE API。 我的Lambd

  • 我遵循的方法是,我为每组用户创建一个单独的Cognito用户池。 当用户登录时,他将通过适当的用户池进行身份验证。 为了调用后续的API,我计划使用Lambda Authorizer。 我遇到了下面的链接,以验证ID令牌。 https://github.com/awslabs/aws-support-tools/blob/master/cognito/decode-verify-jwt/decod

  • 我有下面的CloudFormation堆栈。2个lambda(问候和Auth),API网关配置为使用Auth lambda进行授权。 我的lambdas的代码如下: 我尝试在GET请求的头中发送此输入。响应为“未经授权”,没有来自Auth lambda CloudWatch日志中的任何日志。 发生什么事了?

  • 我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API