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