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 }