Как создать лямбда-разрешение для пользовательского авторизатора запросов веб-сокетов с CloudFormation для API Gateway? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытался создать лямбда-разрешение для авторизатора запросов веб-сокетов для 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

Когда я вручную создаю авторизатор с помощью консоли, я получаю это приглашение в конце:

enter image description here

Этот созданный вручную авторизатор работает, как только я подключаю его к конечной точке $ 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

Кто-нибудь знает правильные настройки разрешения лямбда-выражений для пользовательского авторизатора для конечной точки $ web-сокета API Gateway $ connect?

1 Ответ

0 голосов
/ 29 мая 2019

Вам определенно нужно разрешение на лямбду.Это то, что я имею для установки разрешения, и это работает хорошо.Единственное отличие, которое я вижу здесь, состоит в том, что SourceArn не предоставляется.Это, надеюсь, даст вам место для начала.

Permission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - "WebsocketApi"
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !GetAtt Lambda.Arn
      Principal:
        Fn::Join:
        - ""
        - - "apigateway."
          - Ref: "AWS::URLSuffix"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...