Эта ошибка возникает, если вы используете event.methodArn
в качестве ресурса для сгенерированной политики и совместно используете авторизатор между различными функциями из-за того, как работает кэширование политики. Для предоставленного токена политика кэшируется для всего API, это будет одна и та же запись кэша для всех методов и ресурсов в рамках одного и того же API и этапа (если они используют один и тот же авторизатор).
Например, при запросе к GET /users
ARN будет выглядеть примерно так:
arn:aws:execute-api:us-1:abc:123/prod/GET/users
При следующем вызове любой конечной точки с тем же маркером аутентификации будет использоваться кэшированная политика, созданная при первом вызове GET /users
. Проблема с этой кэшированной политикой заключается в том, что ее ресурс разрешает только один конкретный ресурс arn: ... /prod/GET/users
, любой другой ресурс будет отклонен.
В зависимости от того, насколько вы хотите ограничить разрешения политики, вы можете указать каждый возможный ресурс при создании политики.
{
"principalId": "user",
"policyDocument": {
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": [
"arn:aws:execute-api:us-1:abc:123/prod/GET/v1/users",
"arn:aws:execute-api:us-1:abc:123/prod/POST/v1/users",
"arn:aws:execute-api:us-1:abc:123/prod/GET/v1/orders"
]
}
],
"Version": "2012-10-17"
}
}
или используйте подстановочные знаки
"Resource": "arn:aws:execute-api:us-1:abc:123/prod/*/v?/*"
или даже
"Resource": "*"
Вы можете использовать переменные политики для некоторых расширенных шаблонов.
Также можно использовать подход черного списка, разрешая все с помощью подстановочных знаков, а затем запрещая определенные ресурсы в другом заявлении политики.
Источники:
person
Michael Radionov
schedule
13.05.2019