Как заблокировать определенный путь к шлюзу API, чтобы он вызывался только определенной лямбда - PullRequest
0 голосов
/ 20 февраля 2020

Извиняюсь за мою наивность, я новичок в aws - облачности

сценарий:

  1. У меня есть лямбда-функция (F1)

  2. В отдельном стеке в той же учетной записи AWS у меня есть шлюз API (API1), подключенный к другой лямбда-функции (F2)

второй stack template.yaml:


Resources:
#############
 # Rest  Api #
 #############
 API1:
   Type: AWS::Serverless::Api
   Properties:
     StageName: Prod
     DefinitionBody:
       "Fn::Transform":
         Name: "AWS::Include"
         Parameters:
           Location: !Ref OpenApiDefinitionLocation

 ##############
 # Functions #
 #############
   F2:
   Type: AWS::Serverless::Function
   Properties:
     CodeUri: lambda/dist
     Handler: handler/code.foo
     Role: !GetAtt F2Role.Arn
     Events:
       bobEvents:
         Type: Api
         Properties:
           Path: /bob/{proxy+}
           Method: any
           RestApiId: !Ref API1

и openapi.yml:

openapi: "3.0.1"
paths:
    /jim/{bar+}:
    get:
      x-amazon-apigateway-integration:
        uri:
          Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${foo.Arn}/invocations"
        passthroughBehavior: "when_no_match"
        httpMethod: "POST" 
        type: "aws_proxy"
  /bob/{proxy+}:
    x-amazon-apigateway-any-method:
      parameters:
        - name: "proxy"
          in: "path"
          required: true
          schema:
            type: "string"
      x-amazon-apigateway-integration:
        uri:
          Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${F2.Arn}/invocations"
        responses:
          default:
            statusCode: "200"
        passthroughBehavior: "when_no_match"
        httpMethod: "post"
        contentHandling: "CONVERT_TO_TEXT"
        type: "aws_proxy"

Я хочу сделать путь /bob/{proxy+}, чтобы он был доступен только для F1 (в первом стек) (или просто блокировка, чтобы он не был доступен за пределами моей учетной записи AWS). но я все еще хочу, чтобы /jim/{bar+} был общедоступным.

любой совет или указатели были бы удивительными, спасибо.

...