我一直在尝试为 API Gateway 和 $connect 路由的 websockets 请求授权器创建 lambda 权限。AWS 文档没有提到为 websocket 授权者创建正确的 lambda 权限。当我尝试连接到我的自定义授权方时,我不断收到 500 错误。
由于 AWS 文档(https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-lambda-auth.html)没有提及有关此权限的任何内容,因此我认为必须创建一个 lambda 权限,就像一个 TOKEN 授权者。
自定义授权人是使用我的 CloudFormation 脚本创建的,如下所示:
# ***************************************************************
# API Gateway Websocket Authorizer
# ***************************************************************
WebsocketAuthorizer:
Type: 'AWS::ApiGatewayV2::Authorizer'
DependsOn: Lambda
Properties:
Name: WebsocketAuthorizer
ApiId:
Fn::ImportValue:
!Sub ${Env}-${AWS::Region}-altosignal-global-websockets
AuthorizerType: REQUEST
AuthorizerCredentialsArn:
Fn::ImportValue:
!Sub ${Env}-${AWS::Region}-global-iamprocesscommandsfromapigateway-arn
AuthorizerUri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${Lambda.Arn}/invocations
IdentitySource:
- route.request.querystring.token
当我使用控制台手动创建授权方时,最后会收到以下提示:
一旦我将它与 $connect 端点连接起来,这个手动创建的授权器就可以工作。
所以,我试图在我的 CloudFormation 脚本中设置这个权限。我尝试了以下设置,但它不起作用。我不断收到 500 错误:
LambdaPermission:
Type: AWS::Lambda::Permission
DependsOn:
- Lambda
- WebsocketAuthorizer
Properties:
Action: lambda:*
FunctionName: !GetAtt Lambda.Arn
Principal: apigateway.amazonaws.com
SourceArn: !Sub
- arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${apiId}/${Env}/$connect
- apiId:
Fn::ImportValue:
!Sub ${Env}-${AWS::Region}-altosignal-global-websockets
有人知道 websocket API Gateway $connect 端点的自定义授权者的正确 lambda 权限设置吗?