Я создаю API, используя AWS SAM (Lambda & API Gateway), контракт которого определяется третьей стороной.
Третья сторона вызывает мой API с помощью запроса GET, который содержит JSON в теле.Однако когда запрос отправляется в API с телом, он отклоняется CloudFront.
Это запрос:
curl -X GET -H "Content-Type: application/json" --data '{"hello":"world"}' https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api
Это ответ:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
ERROR: The request could not be satisfied
403 ERROR
The request could not be satisfied.
Bad request.
Generated by cloudfront (CloudFront)
Request ID: 1p0St_-e3noQL-2uMxeB_2I6lkMr1mg5afvxJRmVpCdnG67Vgnhj9w==
При проверке журналов запрос никогда не попадает в шлюз API или функцию Lambda.Однако, если я удаляю тело из запроса, то оно попадает в функцию Lambda, и я получаю соответствующее сообщение об ошибке от API (сообщающее вызывающей стороне, что ожидаемое тело отсутствует.)
curl -X GET -H "Content-Type: application/json" https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api
I 'используя базовую конфигурацию шлюза API через шаблон SAM.Это соответствующий раздел:
MyApiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: bin/main.zip
Handler: main
Runtime: go1.x
Tracing: Active
Role: !Sub ${MyApiLambdaExecutorRole.Arn}
Events:
CatchAll:
Type: Api
Properties:
Path: /my-api
Method: GET