如何使用CloudFormation for API Gateway为自定义websocket请求授权程序创建lambda权限?
我一直在尝试为API网关和$connect路由的websockets请求授权程序创建lambda权限。AWS文档没有提到为websocket授权者创建适当的lambda权限。当我尝试连接到我的自定义授权人时,我不断收到500个错误 由于AWS文档()没有提到任何关于此权限的内容,因此我假设必须像令牌授权者一样创建lambda权限 自定义授权人是使用我的CloudFormation脚本创建的,如下所示:如何使用CloudFormation for API Gateway为自定义websocket请求授权程序创建lambda权限?,websocket,aws-lambda,amazon-cloudformation,aws-api-gateway,lambda-authorizer,Websocket,Aws Lambda,Amazon Cloudformation,Aws Api Gateway,Lambda Authorizer,我一直在尝试为API网关和$connect路由的websockets请求授权程序创建lambda权限。AWS文档没有提到为websocket授权者创建适当的lambda权限。当我尝试连接到我的自定义授权人时,我不断收到500个错误 由于AWS文档()没有提到任何关于此权限的内容,因此我假设必须像令牌授权者一样创建lambda权限 自定义授权人是使用我的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权限设置吗?您肯定需要lambda权限。这就是我设置权限的方法,而且效果很好。我在这里看到的唯一区别是没有给出SourceArn。这将有望给你一个开始的地方
Permission:
Type: "AWS::Lambda::Permission"
DependsOn:
- "WebsocketApi"
Properties:
Action: "lambda:InvokeFunction"
FunctionName: !GetAtt Lambda.Arn
Principal:
Fn::Join:
- ""
- - "apigateway."
- Ref: "AWS::URLSuffix"
我正在使用samcli,并拥有此作为授权人的权限,这对我来说很有效
AuthorizerFunctionPermission:
Type: AWS::Lambda::Permission
DependsOn:
- WebSocketApi
Properties:
Action: lambda:InvokeFunction
FunctionName: arn:aws:lambda:AWS_REGION:YOUR_ACCOUT_ID:function:AUTHORIZER_FUNCTION_NAME
Principal: apigateway.amazonaws.com
只需替换AWS地区、您的账户ID和授权人职能名称您是否可以添加
授权人身份的定义?它与LambdaPermission
相同吗?