Как написать политики для нескольких пользовательских авторизаторов в одном API Gateway REST API? - PullRequest
0 голосов
/ 27 августа 2018

tl; dr Как мне написать политику и / или структурировать свой ресурс при использовании нескольких пользовательских авторизаторов в одном REST API?

У меня есть REST API в API Gateway с несколькимиРесурсы.Для некоторых из них любые запросы должны быть разрешены, если они имеют специальный заголовок с секретным значением (т. Е. Нет аутентификации пользователя).Для других запросам требуется специальный заголовок и пользовательский аутентификатор.

Специальный заголовок работает как ключ API, но не может быть x-api-key, поскольку я не контролирую ни заголовок, ни его значение..

  • /resource1 - X-HEADER (разрешить любому пользователю)
  • /resource2 - X-HEADER (разрешить любому пользователю)
  • /resource3 -X-HEADER и Auth (разрешены только зарегистрированные пользователи)
  • /resource4 - X-HEADER и Auth (разрешены только зарегистрированные пользователи)

Комурешить эту проблему я имею два пользовательских авторизатораДля PublicAuthorizer я использую заголовок X-HEADER в качестве источника идентификации, для LoggedInAuthorizer I пользовательские заголовки X-HEADER и Auth в качестве источника идентификации.(Авторизаторы типа REQUEST.)

Пока все хорошо.Проблема в том, как написать политику.Это текущий ответ от LoggedInAuthorizer:

{
  "principalId": "[the user id]",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [{
      "Resource": "arn:aws:execute-api:[region]:[account id]:[rest api id]/[stage]*",
      "Action": "execute-api:Invoke",
      "Effect": "Allow"
    }]
  }
}

Это текущий ответ от PublicAuthorizer (всегда используется один и тот же principalId):

{
  "principalId": "anonymous user",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [{
      "Resource": "arn:aws:execute-api:[region]:[account id]:[rest api id]/[stage]*",
      "Action": "execute-api:Invoke",
      "Effect": "Allow"
    }]
  }
}

Это работает, ноЯ обеспокоен использованием одного и того же Resource для обеих политик.

Существует ли риск того, что злоумышленник может сделать запрос на /resource1, а затем на /resource3 и повторно использовать первую политику для вызова усилениядоступ без аутентификации пользователя?(Я пытался, но не смог этого сделать)

Я включил кэширование авторизации, поэтому я не могу использовать event.methodArn в качестве Resource.Это не позволяет пользователю вызывать какие-либо другие ресурсы в течение периода кэширования.

Нужно ли мне менять структуру моих ресурсов, чтобы политика использовала префикс пути для покрытия подмножества ресурса?Например, "arn:aws:execute-api:[region]:[account id]:[rest api id]/[stage]/*/public/*" для этой структуры:

  • /public/resource1 - X-HEADER
  • /public/resource2 - X-HEADER
  • /private/resource3 - X-HEADER и Auth
  • /private/resource4 - X-HEADER и Auth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...