Я пытался создать лямбда-разрешение для авторизатора запросов веб-сокетов для шлюза API и маршрута $connect. В документации AWS ничего не говорится о создании надлежащего лямбда-разрешения для авторизатора веб-сокетов. Я продолжаю получать ошибку 500, когда пытаюсь подключиться к своему пользовательскому авторизатору.
Поскольку в документации AWS (https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-lambda-auth.html) ничего не упоминается об этом разрешении, я предполагаю, что нужно будет создать лямбда-разрешение, как авторизатор 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
Кто-нибудь знает правильные настройки разрешений лямбда для пользовательского авторизатора для конечной точки $connect API-шлюза websocket?


Вам определенно нужно разрешение 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_REGION, YOUR_ACCOUNT_ID и AUTHORIZER_FUNCTION_NAME.
Вы можете добавить определение для
AuthorizerCredentialsArn? Это то же самое, чтоLambdaPermission?