AWS Lambda function Конечная точка API REST - ошибка 403
У меня есть функция AWS Lambda, которая отображается как REST API.
Когда он вызывается с помощью кнопки Test на консоли aws lambda, он работает.
Когда он вызывается через онлайн-клиент REST, я получаю ошибку 403. Он был создан как требующий - без аутентификации (Open).
Какую конфигурацию мне не хватает?
Ответы
Ответ 1
Предположительно, Lambda открывается через AWS API Gateway.
Одна из причин, по которой вы получите 403 на новом ресурсе шлюза API без аутентификации, состоит в том, что вы еще не развернули свои изменения.
В консоли API Gateway нажмите раскрывающееся меню Actions
и выберите Deploy API
.
Вы должны быть добрым.
Ответ 2
Возможно, вы отправляете запрос на неверную конечную точку.
Я получил сообщение об ошибке 403, отправив запрос POST по адресу https://example.com/locate
Однако, как только я добавил этап http://example.com/dev/locate и внедрил изменения в этот API, он заработал нормально, получив ответ 200.
![enter image description here]()
Надеюсь, это поможет.
Ответ 3
Сначала необходимо убедиться, что CORS включен на AWS API Gateway, если вы обращаетесь к нему из другого домена, потому что это API-шлюз, который выдает ошибку 403, а не лямбда-функцию. Вы можете включить CORS для метода или для полного ресурса. Выберите Действия, а затем выберите Включить CORS. Это добавит метод OPTIONS к ресурсу, если он еще не существует.
Включение CORS на API-шлюзе гарантирует, что все заголовки ответа будут иметь значение Access-Control-Allow-Origin, установленное на '*' (т.е. разрешены все источники, но вы можете указать конкретное происхождение, например, http://localhost).
![Enable CORS for method]()
Всегда проверяйте, вы используете правильный URL. Вы можете получить URL из раздела Stage шлюза API или из лямбда-функции (если вы установили лямбда-функцию в качестве конечной точки интеграции)
![API url -> API Gateway -> Stage]()
![API Url -> Lambda function]()
Вы можете увидеть новые заголовки, установленные в ответах Method и Integration.
![enter image description here]()
Ответ 4
Если вы используете авторизацию AWS, тогда AWS рассчитывает подпись.
Если вы передаете get или post params, вы должны отправить его в алфавитном порядке.
Причина в том, что при передаче токена для расчета подписи пользовательского интерфейса или внешнего интерфейса рассчитывается добавленный вами базовый порядок, но AWS пересчитывает подпись в соответствии с алфавитным порядком, чтобы соответствовать подписи.
Попробуйте отправить параметры в алфавитном порядке.
post = {
'id': 23,
'tag': '35353
}