Как ограничить доступ к лямбде - PullRequest
0 голосов
/ 21 января 2019

У меня есть внешнее приложение, приложение будет использовать лямбда-сервисы, на конечных точках такие cors включены:

// serverless.yml

functions:
  test:
  handler: functions/test.handler
  events:
  - http:
      path: /test
      method: get
      cors: true

Обработчик функции теста имеет следующие заголовки:

// ./functions/test.js
headers: {
        'Access-Control-Allow-Origin': 'https://example.com',
    },

Когда я собираю / внедряю проект без сервера, я могу поместить сгенерированный URL в браузер и увидеть ответ.Заголовок ACAO существует, и я не пробовал использовать его с сайта, возможно, он там заблокирован, но CORS недостаточно - он будет основан только на браузере, лямбда-ответ по-прежнему будет отображаться, если будет запрошен другими способами..

Что я хочу сделать, так это ограничить доступ к этим (производственным) лямбда-функциям, если только запрос не поступает из моего приложения, которое (статично) размещено в корзине s3, корзина связана с облачным фронтом, облачный фронт связанв домен (используя маршрут 53 для домена.

У моего приложения не будет пользователей, я просто не хочу, чтобы данные, которые там обслуживаются, были доступны из сторонних сервисов. Я думал о созданииФункция, которую я импортирую внутри каждой функции, и она будет проверять IP, если состояние prod, но я не уверен, что это хорошая практика.

Что еще я могу сделать, чтобы защитить эти лямбды?должен быть в лямбде, может быть, есть что-то в облачном фронте, которое я мог бы использовать, в настоящее время нет поддомен api.example.com, который будет указывать налямбды.

1 Ответ

0 голосов
/ 21 января 2019

Нашел решение, которое мне действительно нравится, не знаю, как я об этом раньше не думал.

В serverless.yml политика ресурсов выглядит следующим образом:

provider:
  name: aws
  runtime: nodejs8.10
  memorySize: 128
  stage: dev
  resourcePolicy:
    - Effect: Allow
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*
      Condition:
        IpAddress:
          aws:SourceIp:
            - 'your ip here'

Когдапри его развертывании политика устанавливается в API Gateway -> Your service -> Resource Policy.Я уверен, что вы могли бы добавить несколько, если определенные лямбды / конечные точки должны позволять другой / полный доступ, и таким образом у меня также могут быть разные IP-адреса в зависимости от стадии развертывания.

...