Я видел ваш вопрос на бессерверных форумах и добавил туда ответ, дублирую его здесь.
Я думаю, что проблема в том, что разрешения API-шлюза execute-api более сложны, чем это.Они имеют форму arn:aws:execute-api:region:account-id:api-id/stage-name/HTTP-VERB/resource-path
, и в прошлый раз, когда я пробовал что-то подобное, подстановочного знака сразу после части api-id
было недостаточно.Так что вы, вероятно, хотите что-то вроде
Fn::Join:
- ''
-
- 'arn:aws:execute-api:'
- Ref: AWS::Region
- ':'
- Ref: AWS::AccountId
- ':'
- Ref: ApiGatewayRestApi
- '/'
- ${self:provider.stage} (or wherever you get your serverless stage variable from)
- '/'
- '*'
- '/'
- '*'
Не цитируйте меня по этому поводу, но я также думаю, что если ваш resource-path
также имеет / в нем, то вам нужно получить разрешение, чтобы оноимеет тот же номер /, что и ваш ресурс.Таким образом, если ваш API имеет GET и POST для / x / y / z, то выражение политики должно выглядеть как arn:aws:execute-api:region:account-id:api-id/stage-name/*/*/*/*
.Я смутно помню, что мне нужно было иметь права, например
arn:aws:execute-api:region:account-id:api-id/stage-name/*/*
arn:aws:execute-api:region:account-id:api-id/stage-name/*/*/*
arn:aws:execute-api:region:account-id:api-id/stage-name/*/*/*/*
etc
, чтобы соответствовать уровням всех моих ресурсов.Я могу ошибаться, хотя, так что YMMV
См .: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-apigateway https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-iam-policy-examples-for-api-execution.html