Ограничение конечных точек php с помощью AWS apigateway - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть бэкэнд API, написанный в фреймворке laravel.Каждый клиентский запрос проходит через один API-шлюз AWS.Этот шлюз только проверяет подлинность пользователя (аутентифицирует) и передает его в бэкэнд-API php.У шлюза нет API для каждого ресурса, такого как пользователь, продукт, заказ и т. Д. У меня есть два типа пользователей в пуле пользователей AWS.Админ и обычные пользователи.Теперь я хочу ограничить определенные конечные точки API php (редактировать, удалять) для пользователей без прав администратора.Один из способов сделать это - сохранить информацию о пользователях с их ролью и разрешениями в базе данных и обработать логику в самом коде php.Пока я читаю документацию AWS, он говорит, что может контролировать доступ к API.Как я уже упоминал, у меня нет отдельного api-шлюза для каждого ресурса, я не знаю, возможно ли контролировать доступ в самом шлюзе.Может ли кто-нибудь помочь мне, какой подход я должен использовать.Поддерживает ли логика RBAC в php-коде правильный подход или просто перебор.

1 Ответ

0 голосов
/ 22 сентября 2019

Самый простой способ - использовать стандартные роли и политики IAM: https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html

Чтобы позволить вызывающей стороне API вызывать API или обновить его кэширование, необходимо создать политики IAM, которые разрешаютуказанный вызывающий API для вызова метода API, для которого включена аутентификация пользователя IAM.Разработчик API устанавливает для свойства authorizationType метода значение AWS_IAM, чтобы требовать, чтобы вызывающая сторона отправляла ключи доступа пользователя IAM для аутентификации.Затем вы присоединяете политику к пользователю IAM, представляющему вызывающего API, к группе IAM, содержащей этого пользователя, или к роли IAM, принятой пользователем.

Дополнительную информацию можно найти в официальная документация , но вот пример политики IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Permission",
      "Action": [
        "execute-api:Execution-operation"           
      ],
      "Resource": [
        "arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path"
      ]
    }
  ]
}
...